在學習的時候,常常使用Evernote記錄一下筆記或收藏一些有用的文章。若是經過Java讀取Evernote文章哪?官方給處理受權接口。 php
mvn archetype:generate -DgroupId=com.yotoo.app -DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
添加evernote jdk依賴: java
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yotoo.app</groupId> <artifactId>simple</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>simple</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>com.evernote</groupId> <artifactId>evernote-api</artifactId> <version>1.25.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
4. 把項目導入Intellij IDEA或Eclipse隨你喜歡,建立一個HelloEvernote類 shell
HelloEvernote類 apache
package com.yotoo.app; import com.evernote.auth.EvernoteAuth; import com.evernote.auth.EvernoteService; import com.evernote.clients.ClientFactory; import com.evernote.clients.NoteStoreClient; import com.evernote.clients.UserStoreClient; import com.evernote.edam.error.EDAMErrorCode; import com.evernote.edam.error.EDAMSystemException; import com.evernote.edam.error.EDAMUserException; import com.evernote.edam.notestore.NoteFilter; import com.evernote.edam.notestore.NoteList; import com.evernote.edam.type.*; import com.evernote.thrift.transport.TTransportException; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.security.MessageDigest; import java.util.Iterator; import java.util.List; public class HelloEvernote { // 去這裏申請一個 Token https://sandbox.evernote.com/api/DeveloperToken.action private static final String AUTH_TOKEN = "填寫受權Token"; private UserStoreClient userStore; private NoteStoreClient noteStore; private String newNoteGuid; public static void main(String args[]) throws Exception { String token = System.getenv("AUTH_TOKEN"); if (token == null) { token = AUTH_TOKEN; } if ("".equals(token)) { System.err.println("去這裏申請一個Token https://sandbox.evernote.com/api/DeveloperToken.action"); return; } HelloEvernote demo = new HelloEvernote(token); try { demo.listNotes(); demo.createNote(); demo.searchNotes(); demo.updateNoteTag(); } catch (EDAMUserException e) { // 須要處理的異常 if (e.getErrorCode() == EDAMErrorCode.AUTH_EXPIRED) { System.err.println("受權的Token已通過期!"); } else if (e.getErrorCode() == EDAMErrorCode.INVALID_AUTH) { System.err.println("無效的受權Token!"); } else if (e.getErrorCode() == EDAMErrorCode.QUOTA_REACHED) { System.err.println("無效的受權Token!"); } else { System.err.println("錯誤: " + e.getErrorCode().toString() + " 參數: " + e.getParameter()); } } catch (EDAMSystemException e) { System.err.println("系統錯誤: " + e.getErrorCode().toString()); } catch (TTransportException t) { System.err.println("網絡錯誤:" + t.getMessage()); } } /** * 初始化 UserStore and NoteStore 客戶端 */ public HelloEvernote(String token) throws Exception { // 設置 UserStore 的客戶端而且檢查和服務器的鏈接 EvernoteAuth evernoteAuth = new EvernoteAuth(EvernoteService.SANDBOX, token); ClientFactory factory = new ClientFactory(evernoteAuth); userStore = factory.createUserStoreClient(); boolean versionOk = userStore.checkVersion("Evernote EDAMDemo (Java)", com.evernote.edam.userstore.Constants.EDAM_VERSION_MAJOR, com.evernote.edam.userstore.Constants.EDAM_VERSION_MINOR); if (!versionOk) { System.err.println("不兼容的Evernote客戶端協議"); System.exit(1); } // 設置 NoteStore 客戶端 noteStore = factory.createNoteStoreClient(); } /** * 獲取並顯示用戶的筆記列表 */ private void listNotes() throws Exception { // 列出用戶的Notes System.out.println("Listing notes:"); // 首先,獲取一個筆記本的列表 List<Notebook> notebooks = noteStore.listNotebooks(); for (Notebook notebook : notebooks) { System.out.println("Notebook: " + notebook.getName()); // 而後,搜索筆記本中前100個筆記並按建立日期排序 NoteFilter filter = new NoteFilter(); filter.setNotebookGuid(notebook.getGuid()); filter.setOrder(NoteSortOrder.CREATED.getValue()); filter.setAscending(true); NoteList noteList = noteStore.findNotes(filter, 0, 100); List<Note> notes = noteList.getNotes(); for (Note note : notes) { System.out.println(" * " + note.getTitle()); } } System.out.println(); } /** * 建立一個新的筆記 */ private void createNote() throws Exception { // 建立一個新的筆記對象,並填寫相關內容,好比標題等 Note note = new Note(); note.setTitle("Yotoo的Demo演示:經過Java建立一個新的筆記"); String fileName = "enlogo.png"; String mimeType = "image/png"; // 給筆記添加一個附件,好比圖片;首先建立一個資源對象,而後設置相關屬性,好比文件名 Resource resource = new Resource(); resource.setData(readFileAsData(fileName)); resource.setMime(mimeType); ResourceAttributes attributes = new ResourceAttributes(); attributes.setFileName(fileName); resource.setAttributes(attributes); //如今,給新的筆記增長一個新的資源對象 note.addToResources(resource); // 這個資源對象做爲筆記的一部分顯示 String hashHex = bytesToHex(resource.getData().getBodyHash()); // Evernote筆記的內容是經過ENML(Evernote Markup Language)語言生成的。 // 在這裏能夠了解具體的說明 http://dev.evernote.com/documentation/cloud/chapters/ENML.php String content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">" + "<en-note>" + "<span style=\"color:green;\">Evernote的圖標在這裏,很綠奧!</span><br/>" + "<en-media type=\"image/png\" hash=\"" + hashHex + "\"/>" + "</en-note>"; note.setContent(content); // 最後,使用createNote方法,發送一個新的筆記給Evernote。 // 返回的新筆記對象將包含服務器生成的屬性,如新筆記的的GUID Note createdNote = noteStore.createNote(note); newNoteGuid = createdNote.getGuid(); System.out.println("成功建立一個新的筆記,GUID爲:" + newNoteGuid); System.out.println(); } /** * 查詢用戶的筆記並顯示結果 */ private void searchNotes() throws Exception { // 搜索的格式須要根據Evernote搜索語法, // 參考這裏http://dev.evernote.com/documentation/cloud/chapters/Searching_notes.php // 在這個例子中,咱們搜索的標題中包含Yotoo String query = "intitle:Yotoo"; // 搜索的筆記中包含具體標籤,我可使用這個: // String query = "tag:tagname"; // 搜索任何位置包含"Yotoo"的筆記,可使用: // String query = "Yotoo"; NoteFilter filter = new NoteFilter(); filter.setWords(query); filter.setOrder(NoteSortOrder.UPDATED.getValue()); filter.setAscending(false); // 查詢前50個知足條件的筆記 System.out.println("知足查詢條件的筆記: " + query); NoteList notes = noteStore.findNotes(filter, 0, 50); System.out.println("找到 " + notes.getTotalNotes() + " 個筆記"); Iterator<Note> iter = notes.getNotesIterator(); while (iter.hasNext()) { Note note = iter.next(); System.out.println("筆記: " + note.getTitle()); // 經過findNotes()返回的Note對象,僅包含筆記的屬性,標題,GUID,建立時間等,但筆記的內容和二進制數據都省略了; // 獲取筆記的內容和二進制資源,能夠調用getNote()方法獲取 Note fullNote = noteStore.getNote(note.getGuid(), true, true, false, false); System.out.println("筆記包含 " + fullNote.getResourcesSize() + " 個資源對象"); System.out.println(); } } /** * 更新標籤分配給一個筆記。這個方法演示瞭如何調用updateNote方法發送被修改字段 */ private void updateNoteTag() throws Exception { // 當更新一個筆記時,只須要發送已經修改的字段。 // 例如,經過updateNote發送的Note對象中沒有包含資源字段,那麼Evernote服務器不會修改已經存在的資源屬性 // 在示例代碼中,咱們獲取咱們先前建立的筆記,包括 筆記的內容和全部資源。 Note note = noteStore.getNote(newNoteGuid, true, true, false, false); //如今,更新筆記。復原內容和資源,由於沒有修改他們。咱們要修改的是標籤。 note.unsetContent(); note.unsetResources(); // 設置一個標籤 note.addToTagNames("TestTag"); // 如今更新筆記,咱們沒有設置內容和資源,因此他們不會改變 noteStore.updateNote(note); System.out.println("成功增長標籤"); // 證實一下咱們沒有修改筆記的內容和資源;從新取出筆記,它仍然只有一個資源(圖片) note = noteStore.getNote(newNoteGuid, false, false, false, false); System.out.println("更新之後, 筆記有 " + note.getResourcesSize() + " 個資源"); System.out.println("更新之後,筆記的標籤是: "); for (String tagGuid : note.getTagGuids()) { Tag tag = noteStore.getTag(tagGuid); System.out.println("* " + tag.getName()); } System.out.println(); } /** * 從磁盤讀取文件的內容並建立數據對象 */ private static Data readFileAsData(String fileName) throws Exception { String filePath = new File(HelloEvernote.class.getResource( "com.yotoo.app.HelloEvernote.class").getPath()).getParent() + File.separator + fileName; // 讀取文件的二進制內容 FileInputStream in = new FileInputStream(filePath); ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); byte[] block = new byte[10240]; int len; while ((len = in.read(block)) >= 0) { byteOut.write(block, 0, len); } in.close(); byte[] body = byteOut.toByteArray(); // 建立一個新的包含文件內容的二進制對象 Data data = new Data(); data.setSize(body.length); data.setBodyHash(MessageDigest.getInstance("MD5").digest(body)); data.setBody(body); return data; } /** * 把byte數組轉換成hexadecimal字符串 */ public static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte hashByte : bytes) { int intVal = 0xff & hashByte; if (intVal < 0x10) { sb.append('0'); } sb.append(Integer.toHexString(intVal)); } return sb.toString(); } }
5. 把Evernote的圖標放在HelloEvernote 類的同級目錄。 api
6. 執行一下看看,若是在Evernote帳戶下建立了一個新的筆記,說明已經學會啦。 數組