手順は以下。
- UserStoreクライアントをセットアップ/認証
-認証されたUserオブジェクトと、認証トークンが渡される - NoteStoreをセットアップ
-認証されたUserオブジェクトがもつshardIdが必要 - NoteStoreサービスのメソッド(プロシージャ)を呼ぶ
-プロシージャコールの都度、認証トークンをパラメータで渡す
ノートブックを作成・更新・取得するコードの例。
- public class NotebookTest {
- 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);
- // 新規ノートブック作成
- System.out.println("** CREATE **");
- Notebook notebook1 = new Notebook();
- notebook1.setName("testbook1");
- Notebook created1 = noteStore.createNotebook(authToken, notebook1);
- System.out.println("新規ノートブック\"" + created1.getName() + "\" が作成されました。(guid=" + created1.getGuid() + ")");
- Notebook notebook2 = new Notebook();
- notebook2.setName("testbook2");
- Notebook created2 = noteStore.createNotebook(authToken, notebook2);
- System.out.println("新規ノートブック\"" + created2.getName() + "\" が作成されました。(guid=" + created2.getGuid() + ")");
- // ノートブック取得
- System.out.println("** GET **");
- Notebook notebook1_1 = noteStore.getNotebook(authToken, created1.getGuid());
- System.out.println("ノートブック\"" + notebook1_1.getName() + "\" を取得しました。(Update Sequence Number: " + notebook1_1.getUpdateSequenceNum() + ")");
- // ノートブック更新
- System.out.println("** UPDATE **");
- notebook1_1.setName("testbook1_xyz");
- int usn = noteStore.updateNotebook(authToken, notebook1_1);
- System.out.println("ノートブック\"" + notebook1_1.getName() + "\" を更新しました。 (Update Sequence Number: " + usn + ")");
- // ノートブックを削除
- // XXX デフォルトはで許可されない。(*1)
- // System.out.println("** EXPUNGE **");
- // int guid = noteStore.expungeNotebook(authToken, created2.getGuid());
- // System.out.println("ID: " + guid + " のノートブックが削除されました。");
- // 全ノートをリストアップ
- System.out.println("** LIST **");
- List<Notebook> notebooks = noteStore.listNotebooks(authToken);
- for (Notebook notebook : notebooks) {
- System.out.print("- " + notebook.getName());
- if (notebook.isDefaultNotebook()) {
- System.out.print(" (default)");
- }
- System.out.println("");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
NoteStoreクライアント作成時(setupNoteStore())に、URLの最後に付けている shardId というのは、API Overview ドキュメントによると
This allows the service to efficiently pass your requests to the appropriate NoteStore shard server.
とあるので、なにかしらサーバーのロケーションを特定するのに使っている?
実行例。
** CREATE ** 新規ノートブック"testbook1" が作成されました。(guid=263db0da-edb1-43a2-af0e-bb7491be275d) 新規ノートブック"testbook2" が作成されました。(guid=456ffd44-a71c-4c3e-a297-104465a354b7) ** GET ** ノートブック"testbook1" を取得しました。(Update Sequence Number: 112) ** UPDATE ** ノートブック"testbook1_xyz" を更新しました。 (Update Sequence Number: 114) ** LIST ** - default notebook (default) - testbook1_xyz - testbook2
(*1)
NoteStore.Client#expungeNotebook() というメソッドを呼ぶと、認証トークンは正しいはずなのに
EDAMUserException(errorCode:PERMISSION_DENIED, parameter:authenticationToken)
という例外が発生してノートブックが削除できない。
フォーラムを検索してみると、「デフォルトのAPIキーだとCREATE/READ/UPDATEしかできないようにしている、もしexpungeXXXをしたいのなら別途申請して」ということらしい。。
http://forum.evernote.com/phpbb/viewtopic.php?f=43&t=16949&p=67917&hilit=expungenotebook#p67917
0 件のコメント:
コメントを投稿