ノートブックの取得
準備
前回はかなりかる〜く、Evernote でいうところのノートブックとノートを EvernoteAPI ではどう取得するのかを説明しました。
といっても説明はしていないか。さわりのコードを軽く見せただけでした。失礼しました。
そこで今回からは、実際の EvernoteAPI の使い方を少しずつご紹介していけたらと思います。
と、その前に EvernoteAPI を触るにあたって色々と準備があります。
準備については、こちらのサイトを見てください(笑)
簡単に説明すると、以下のような流れ。
でも、1 つ目と 4 つ目については、認証方法に OAuth 認証を選択したときだけ必要になります。
認証方法にディベロッパートークン*1を用いる方法を選択した場合は不要です。
(確かそうだったはず、うろ覚えですいません。自分が以前 EvernoteAPI と戯れていたときは、ディベロッパートークンは無かったので(^^;;)
ということは、認証方法にディベロッパートークンを用いた場合、Evernote SDK と Sandbox 環境を用意すれば OK。
あとは、その Sandbox 環境用のディベロッパートークンを発行すれば、すぐにでも API を使えます。
UserStoreとNoteStore
それでは実際にコードを見ていこう、っとその前に EvernoteAPI を触る上で、コアとなる概念を軽く触れておきます。それはUserStoreとNoteStore。
前回チラっと触れたこのUserStoreとNoteStoreは、それぞれ以下の感じ。
UserStore を取得
THttpClient userStoreTrans; try { userStoreTrans = new THttpClient("https://sandbox.evernote.com/edam/user"); } catch (TTransportException e) { throw new EvernoteException(e); } TBinaryProtocol userStoreProtocol = new TBinaryProtocol(userStoreTrans); UserStore.Client userStore = new UserStore.Client(userStoreProtocol);
NoteStore を取得
String noteStoreUrl; try { noteStoreUrl = userStore.getNoteStoreUrl(developerToken); } catch (EDAMUserException | EDAMSystemException | TException e) { throw new EvernoteException(e); } THttpClient noteStoreTrans; try { noteStoreTrans = new THttpClient(noteStoreUrl); } catch (TTransportException e) { throw new EvernoteException(e); } TBinaryProtocol noteStoreProt = new TBinaryProtocol(noteStoreTrans); NoteStore.Client noteStore = new NoteStore.Client(noteStoreProt);
上記の通り、とっても似ています。とゆーかほぼ同じ。
なので、この辺りの処理は、実際に何かアプリを作るときにはリファクタリングの余地ありって感じですね。
ちなみに、この二つのクラスを扱う場合、それぞれインナークラスの Client を介して使用する必要があるので、注意が必要。
そして、この取得した NoteStore を使って実際にノートを取ったり、ノートを作成したりする訳です。
今回は、まずノートブックを取得する処理について、コードを見てみましょう。
デフォルトノートブックを取得する
Notebook defaultNotebook; try { defaultNotebook = noteStore.getDefaultNotebook(developerToken); } catch (EDAMUserException | EDAMSystemException | TException e) { throw new EvernoteException(e); }
指定した名前のノートブックを取得する
// ノートブックの一覧を取得(1) List<Notebook> notebooks; try { notebooks = noteStore.listNotebooks(developerToken); } catch (EDAMUserException | EDAMSystemException | TException e) { throw new EvernoteException(e); } // ノートブック名が一致するものを取得(2) Notebook result = null; for (Notebook notebook : notebooks) { if (notebook.getName().equals(notebookName)) { result = notebook; break; } }
こちらは少し残念な感じですね。
ノートブックを取得する系の API は、デフォルトを取得か、一覧で取得か、GUID*2 で取得かしか用意されていません。
そのため、ノートブックの名前で取得したい場合は、まず一覧で取得して(1)、その中から該当する名前のノートブックを比較する(2)必要があります。
この他、ノートブックに関連する API としては、更新(update)、削除(expunge)などがあります。
今日は終わり
今回はここまで。
次回は取得したノートブックを基に、ノートを取得するところのコードを見てみようと思います。
ちなみに
今回お見せしたコードは全て GitHub に晒していますので、参考になれば幸いです。
ご指摘等あればコメントいただけると助かります。
GitHub: evernote-api-example(ノートブックの取得と、そのテスト)