GoogleAppEngineでTwitterAPI(3)Twitter4JでOAuth認証を使う
このエントリーのカテゴリ : GoogleAppEngine
…Twitter4JのOAuthのブラウザ版での情報が少ないため、oauth_tokenや
oauth_verifierに悩まされましたが、結構苦労してなんとかできました。
http://monitorequest.appspot.com/twitguestbook
1. http://twitter.com/oauth_clients/newでアプリケーションを登録
ConsumerKeyとConsumerSecretKeyを使うのでメモしておきます。
2. OAuth認証用のTwitterオブジェクトを生成
TwitterFactoryでConsumerKeyとConsumerSecretKeyを指定して作成します。
TwitterFactory factory = new TwitterFactory();
Twitter twitter = factory.getOAuthAuthorizedInstance(KEY,SECRET_KEY);
3. Twitter.getRequestTokenメソッドでRequestTokenを生成
ここで、
requestToken = twitter.getOAuthRequestToken();
とするとドツボにはまります。
requestToken = twitter.getOAuthRequestToken("http://monitorequest.appspot.com/twitguestbook");
としないとoauth_verifierが取得できず、延々と悩まされます。
4. RequestToken.getAuthorizationURLで取得したURLにリダイレクト
こんな感じです。
String url = requestToken.getAuthenticationURL();
resp.sendRedirect(url);
5. リダイレクト後にtwitterオブジェクトにAccessTokenを持たせる
認証された後にリダイレクトされたときにoauth_verifierが
クエリパラメータで渡されるので、これを取得し、
twitter.getOAuthAccessToken(requestToken,oauth_verifier);
としてtwitterオブジェクトを承認させます。
このときに使用するrequestTokenは
3.や4.で利用したrequestTokenを利用する必要があるため、
3.でセッションに保持し、5.でセッションから取得して利用します。
3.でoauth_tokenとoauth_secretをtwitterサイトから取得しており、
それを元に4.で認証をしてoauth_verifierが発行されるようなので、
考えてみれば当たり前ですが。
6. twitterオブジェクトを使ってtimelineなどを取得
この辺りは前の記事の
GoogleAppEngineでTwitterAPI(1)Twitter4Jを使うや
GoogleAppEngineでTwitterAPI(2)EclipsePluginでJSPと同じです。
やっとできたのがこちらです。
http://monitorequest.appspot.com/twitguestbook
最大の敗因は5.でoauth_verifierがクエリパラメータで渡ってこなかったことです。
GoogleでTwitter4JのOAuth認証のサンプルを探してもクライアントアプリ版のサンプルでPINコードがどうのこうの、とか、リダイレクトがなかったりしました。
また、ブラウザ版のサンプルがあってもTwitter4Jが古いバージョンで参考にならなかったりして苦労しました。
結局3.にあるように、「絶対パスでリダイレクト先を設定する」でなんとかしのいだのですが、1.のTwitterのアプリ申請でもCALLBACK_URLをわざわざ指定しているにも関わらず、また絶対パスを指定しなければならないのが気持悪いです。
相対パスにするとtwitterサイトの相対パスに遷移するのでこれまた微妙です。
ちなみにAccessTokenとかはデータベースに保持していないので安心してください。
(ユニクロみたいに悪用目的ではないので…)
そもそもOAuth認証は仮にAccessTokenをサイトに預けても拒否すれば無効になるみたいです。
そっけない画面ですが、そのうち頑張って装飾して行こうかと思っています。
誰がデザインがんばりたい人いないかなぁ。
スポンサーサイト