ノート作成・取得・更新・削除を行うテストプログラム。
- 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 件のコメント:
コメントを投稿