今回はGoogle App Engine上でOAuth認証をして、ノートブックの一覧を表示してみます。まずedamtest.zipをダウンロードして解凍した後、どこか適当なところに置いてください。
GoogleAppEngineLauncherのメニューからFile=>"Add Existing Application..."を選択して、解凍後のディレクトリを指定します。また、ポート番号を8081としてください。その後、main.pyの36-37行目 OAUTH_CONSUMER_KEY
とOAUTH_CONSUMER_SECRET
を、取得したWebアプリケーション用キーで置き換えてください。これでGoogleAppEngineLauncherを通してデモを実行できます。ブラウザでhttp://localhost:8081を開くと、以下のような単純なトップページが表示されます。
ポート番号を8081以外にする場合は、main.pyの47行目APP_BASE_URI
の番号を変更すれば良いです。また、本番環境で動かす場合は、この部分をGoogle App Engineのホスト名に変更する必要があります。
Google App Engineでは、予め必要なライブラリを全てアプリケーションディレクトリ内に置いておく必要があります。今回使用している外部ライブラリは以下の通りです。
evernoteとthriftはeverenote-api-1.19/python/lib/にあるものです。python-oauth2はOAuth認証用のライブラリ、httplib2はpython-oauth2が依存しているライブラリ、gaeutiltiesはセッション用です。
今回は説明を簡単にするためにセッションによってOAuthの情報を管理するようにしています。Googleアカウントなどに紐付けて管理というのでも良いでしょう。
では、OAuthの処理を見ていきましょう。デモ画面で"トークン取得"をクリックすると、以下のOAuthTokenHandler
クラスに処理が渡されます。
まず、Webアプリケーション用のキーとシークレットをOAuthサーバの仮証明要求URI(以前のリクエストトークンURI)に送ります。この際にユーザ認可後にOAuthサーバからリダイレクトしたもらうURIをoauth_callback
で指定しておきます。また、OAuthのリクエストでは署名を作成して付加する必要があります。
成功するとOAuthサーバから仮証明(以前のリクエストトークンに相当)の情報が返ってきます。次に、この仮証明を使用してユーザの認証と承認をOAuthサーバに依頼するために、OAuthサーバの認証用URIにリダイレクトします。成功すると、以下のようにEvernoteの認証画面が表示されます。
ここでユーザ名・パスワードを入力すると、権限の承認画面に遷移します。EvernoteのOAuthではアプリケーションに"閲覧、作成、更新"の権限を付与することになります。
ユーザが承認した場合は、仮証明取得時にoauth_callbackに指定したURIに転送されてきます。そのURIの処理はOAuthTokenCallbakHandler
クラスで行っています。
ユーザ承認済の仮証明 oauth_token とチェックコード oauth_verifier が転送時に渡されてくるので、次にこれらを使用してトークン証明(以前のアクセストークンに相当)を取得します。成功するとトークン証明 oauth_tokenと、NoteStoreのURIを決定するための edam_shard、認証したユーザのIDである edam_userId が返ってきますので、それぞれセッションに保存しておきます。
トークン証明の取得が終わったら一度トップページに飛ぶようにしています。トークン証明が正常に保存されている場合は、トップページに"ノートブック一覧"というリンクが増えているはずです。
ノートブック一覧の処理は以下のListHandler
クラスで行っています。
Evernoteにおいては、OAuthのトークン証明はUserStoreの認証トークンと同等です。そのため、NoteStoreを使用した処理はこれまでとまったく同じです。成功すると以下のように認証したユーザのノートブック一覧が表示されます。
今回はGoogle App Engine上においてOAuth認証経由でのEvernote APIの使い方を説明しました。次回も引き続きGoogle App Engineでの開発を解説します。