手順は以下。
- 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(); } } }※ AuthUtil は、UserStore初期化・認証用に作成したユーティリティクラス
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 件のコメント:
コメントを投稿