2010年11月20日土曜日

Evernote API を使ってみる (2) 認証

Evernote サービスのクライアントを作成して、認証するまで。正しく認証されると、認証トークンがもらえ、そのあとは取得した認証トークンを使ってRPCできるようになる。
具体的には以下の3つのステップを踏む。
  1. Evernote サービスのURLを指定してUserStore.Client というクラスを初期化
  2. バージョンチェック
  3. consumer key, consumer secret, user name, password で認証
細かいコーディングはサンプルを参照すればOK, 一応こんな感じで。

  1. public class AuthTest {  
  2.   
  3.     private static String consumerKey = "consumer key";  
  4.     private static String consumerSecret = "consumer secret";  
  5.     private static String evernoteHost = "sandbox.evernote.com";  
  6.     private static String userName = "user name";  
  7.     private static String password = "password";  
  8.   
  9.     private UserStore.Client setupUserStore() throws TException {  
  10.         // 1. UserStore クライアントのセットアップ  
  11.         String userStoreUrl = "https://" + evernoteHost + "/edam/user";  
  12.         THttpClient trans = new THttpClient(userStoreUrl);  
  13.         TBinaryProtocol prot = new TBinaryProtocol(trans);  
  14.         UserStore.Client userStore = new UserStore.Client(prot);  
  15.           
  16.         // 2. バージョンチェック  
  17.         boolean versionOk = userStore.checkVersion("Evernote's EDAMDemo (Java)",  
  18.                 com.evernote.edam.userstore.Constants.EDAM_VERSION_MAJOR,  
  19.                 com.evernote.edam.userstore.Constants.EDAM_VERSION_MINOR);  
  20.         if (!versionOk) {  
  21.             System.err.println("Incomatible EDAM client protocol version");  
  22.         }  
  23.         return userStore;  
  24.     }  
  25.       
  26.     private boolean authenticate(UserStore.Client userStore) throws EDAMSystemException, TException {  
  27.         // 3. ユーザー認証  
  28.         AuthenticationResult authResult = null;  
  29.         try {  
  30.             authResult = userStore.authenticate(userName, password, consumerKey, consumerSecret);  
  31.             User user = authResult.getUser(); // 認証されたユーザー  
  32.             String authToken = authResult.getAuthenticationToken(); // 認証トークン  
  33.             System.out.println("ユーザー  " + user.getName() + " が認証されました。");  
  34.             System.out.println("Authentication Token: " + authToken);  
  35.         } catch (EDAMUserException ex) {  
  36.             // 例外処理  
  37.             String parameter = ex.getParameter(); // パラメータ  
  38.             EDAMErrorCode errorCode = ex.getErrorCode(); // エラーコード  
  39.             
  40.             System.err.println("Authentication failed (parameter: " + parameter + " errorCode: " + errorCode + ")");  
  41.             // 認証に失敗した場合  
  42.             if (errorCode == EDAMErrorCode.INVALID_AUTH) {  
  43.                 // consumer key が不正  
  44.                 if (parameter.equals("consumerKey")) {  
  45.                     System.err.println("Your consumer key was not accepted by " + evernoteHost);  
  46.                     System.err.println("If you do not have an API Key from Evernote, you can request one from http://www.evernote.com/about/developer/api");  
  47.                 // user name が不正  
  48.                 } else if (parameter.equals("username")) {  
  49.                     System.err.println("You must authenticate using a username and password from " + evernoteHost);  
  50.                 // password が不正  
  51.                 } else if (parameter.equals("password")) {  
  52.                     System.err.println("The password that you entered is incorrect");  
  53.                 }  
  54.             }  
  55.             return false;  
  56.         }  
  57.         return true;  
  58.     }  
  59.       
  60.     public static void main(String[] args) {  
  61.         AuthTest test = new AuthTest();  
  62.         try {  
  63.             UserStore.Client userStore = test.setupUserStore();  
  64.             test.authenticate(userStore);  
  65.         } catch (Exception e) {  
  66.             e.printStackTrace();  
  67.         }  
  68.           
  69.     }  
  70. }  

実行して、ユーザ名と認証トークンがコンソールに表示されれば認証成功。
ユーザー XXX が認証されました。
Authentication Token:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

0 件のコメント:

コメントを投稿