ノートブックの取得

準備

前回はかなりかる〜く、Evernote でいうところのノートブックとノートを EvernoteAPI ではどう取得するのかを説明しました。
といっても説明はしていないか。さわりのコードを軽く見せただけでした。失礼しました。

そこで今回からは、実際の EvernoteAPI の使い方を少しずつご紹介していけたらと思います。

と、その前に EvernoteAPI を触るにあたって色々と準備があります。
準備については、こちらのサイトを見てください(笑)

簡単に説明すると、以下のような流れ。

  1. Evernoteへの認証時に使用する API キーの取得
  2. Evernote SDK の入手
  3. Sandbox 環境(開発環境)の作成
  4. 取得した API キーを本番でも使えるようにアクティベートする

でも、1 つ目と 4 つ目については、認証方法に OAuth 認証を選択したときだけ必要になります。
認証方法にディベロッパトーク*1を用いる方法を選択した場合は不要です。
(確かそうだったはず、うろ覚えですいません。自分が以前 EvernoteAPI と戯れていたときは、ディベロッパトークンは無かったので(^^;;)

ということは、認証方法にディベロッパトークンを用いた場合、Evernote SDK と Sandbox 環境を用意すれば OK。
あとは、その Sandbox 環境用のディベロッパトークンを発行すれば、すぐにでも API を使えます。

UserStoreとNoteStore

それでは実際にコードを見ていこう、っとその前に EvernoteAPI を触る上で、コアとなる概念を軽く触れておきます。それはUserStoreNoteStore
前回チラっと触れたこのUserStoreNoteStoreは、それぞれ以下の感じ。

UserStore

Evernote ユーザアカウント自体を管理するサービス(API)

NoteStore

ユーザの Evernote アカウントの内容を管理するサービス(API)

まぁクラス名の通りっちゃ〜通りですね。
では実際にそれぞれの情報を取得するためのコードを見てみましょう。

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ノートブックの取得と、そのテスト

*1:http://dev.evernote.com/intl/jp/documentation/cloud/chapters/Authentication.php#devtoken

*2:Evernote 内で扱う様々なオブジェクトを一意に識別するID。Global Unique ID の略。