您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Java讀取Evernote中如何使用DeveloperToken”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Java讀取Evernote中如何使用DeveloperToken”這篇文章吧。
首先我們需要在Evernote的sandbox環境注冊一個賬戶,https://sandbox.evernote.com/Registration.action
有賬戶,如果希望使用java讀取賬戶的信息,我們還需要申請一個Token,也就是一個授權碼,有了授權,我們才能從賬戶里那東西。https://sandbox.evernote.com/api/DeveloperToken.action
開發準備就緒,下面創建一個Maven項目,引入Evernote API
創建Maven項目:
mvn archetype:generate -DgroupId=com.yotoo.app -DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
添加evernote jdk依賴:
<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類
HelloEvernote類
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 類的同級目錄。
6. 執行一下看看,如果在Evernote賬戶下創建了一個新的筆記,說明已經學會啦。
以上是“Java讀取Evernote中如何使用DeveloperToken”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。