ノート作成・取得・更新・削除を行うテストプログラム。
public class NoteTest { private static String consumerKey = "consumer key"; private static String consumerSecret = "consumer secret"; private static String evernoteHost = "sandbox.evernote.com"; private static String userName = "user name"; private static String password = "password"; private static NoteStore.Client setupNoteStore(String evernoteHost, User user) throws TException { // NoteStore クライアントのセットアップ String noteStoreUrl = "https://" + evernoteHost + "/edam/note/" + user.getShardId(); THttpClient trans = new THttpClient(noteStoreUrl); TBinaryProtocol prot = new TBinaryProtocol(trans); NoteStore.Client noteStore = new NoteStore.Client(prot, prot); return noteStore; } public static void main(String[] args) { UserStore.Client userStore = null; NoteStore.Client noteStore = null; AuthenticationResult authResult = null; try { userStore = AuthUtil.setupUserStore(evernoteHost); authResult = AuthUtil.authenticate(userStore, consumerKey, consumerSecret, evernoteHost, userName, password); User user = authResult.getUser(); String authToken = authResult.getAuthenticationToken(); noteStore = setupNoteStore(evernoteHost, user); Notebook notebook = noteStore.getDefaultNotebook(authToken); // 新規ノート作成 System.out.println("** CREATE **"); Note note1 = new Note(); note1.setTitle("testnote1"); String content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml.dtd\">" + "<en-note>Hello Evernote.</en-note>"; note1.setContent(content); note1.setNotebookGuid(notebook.getGuid()); Note created1 = noteStore.createNote(authToken, note1); System.out.println("ノート \"" + created1.getTitle() + "\" が作成されました。(guid=" + created1.getGuid() + ")"); Note note2 = new Note(); note2.setTitle("testnote2"); note2.setContent(content); note2.setNotebookGuid(notebook.getGuid()); Note created2 = noteStore.createNote(authToken, note2); System.out.println("ノート \"" + created2.getTitle() + "\" が作成されました。(guid=" + created1.getGuid() + ")"); // ノート取得 System.out.println("** GET **"); Note note1_1 = noteStore.getNote(authToken, created1.getGuid(), true, false, false, false); System.out.println("ノート \"" + note1_1.getTitle() + "\" を取得しました。(Update Sequence Number: " + note1_1.getUpdateSequenceNum() + ")"); System.out.println("コンテンツ: " + note1_1.getContent()); // ノート更新 System.out.println("** UPDATE **"); String content2 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml.dtd\">" + "<en-note>My First Note.</en-note>"; note1_1.setContent(content2); noteStore.updateNote(authToken, note1_1); Note updated = noteStore.getNote(authToken, note1_1.getGuid(), true, false, false, false); System.out.println("ノート \"" + updated.getTitle() + "\" を更新しました。(Update Sequence Number: " + updated.getUpdateSequenceNum() + ")"); System.out.println("コンテンツ: " + updated.getContent()); // ノート削除 (Trashに移動) System.out.println("** DELETE **"); int usn = noteStore.deleteNote(authToken, created2.getGuid()); System.out.println("ノート\"" + created2.getTitle() + "\"が削除されました。"); // ノートリストを取得 System.out.println("** FIND **"); NoteFilter filter = new NoteFilter(); filter.setNotebookGuid(notebook.getGuid()); NoteList noteList = noteStore.findNotes(authToken, filter, 0, 100); List<Note> notes = noteList.getNotes(); System.out.println("(Active Notes)"); for (Note note : notes) { System.out.println(" - " + note.getTitle()); } // Trashに移動されたノートリストを取得 filter.setInactive(true); NoteList noteList2 = noteStore.findNotes(authToken, filter, 0, 100); List<Note> notes2 = noteList2.getNotes(); System.out.println("(Inactive Notes)"); for (Note note : notes2) { System.out.println(" - " + note.getTitle()); } } catch (Exception e) { e.printStackTrace(); } } }
実行例。
** CREATE ** ノート "testnote1" が作成されました。(guid=19ebdb55-c36b-47b5-8ce6-7ef9474b79aa) ノート "testnote2" が作成されました。(guid=19ebdb55-c36b-47b5-8ce6-7ef9474b79aa) ** GET ** ノート "testnote1" を取得しました。(Update Sequence Number: 201) コンテンツ:Hello Evernote. ** UPDATE ** ノート "testnote1" を更新しました。(Update Sequence Number: 203) コンテンツ:My First Note. ** DELETE ** ノート"testnote2"が削除されました。 ** FIND ** (Active Notes) - testnote1 (Inactive Notes) - testnote2
ノートのコンテンツは、Evernote Markup Language (ENML) で厳密に記述する必要がある(DTDがここ)。保存前にバリデーションがかかり、妥当なXMLでなければはじかれてしまうため、DOMなりのツールを使ってきちんと構築しないといけない。
ノートブックや、他のタイプでもそうなのだけれど、特定のオブジェクトを指定する場合にGUIDを指定しないといけないのがけっこう面倒くさい&通信が多くなる(ノートの場合はGUID以外に一意に特定できる属性がないから仕方ないけれど)。実際、アプリを作ろうという場合はGUIDをメモリなりにキャッシュしておくレイヤーをかぶせるのだと思う。
0 件のコメント:
コメントを投稿