AIR/ActionScript3でTwitterのOAuthをするための必要最低限
OAuth面倒くさいので、AIR/AS3で最低限認証通るようになるまでのメモ。
準備
Twitterにアプリケーション登録。https://twitter.com/apps
OAuthライブラリ。iotashan氏作のものを利用。
http://code.google.com/p/oauth-as3/
ライブラリを使わず、OAuthを1から叩くと死ねます。
やること
1. RequestToken取得2. PINコード取得
3. AccessToken取得
1.RequestToken取得
OAuthConsumerオブジェクトを生成。keyにTwitterから取得したConsumer keyと、
secretに同じく取得したConsumer secretを設定する。
OAuthRequestオブジェクトを、
RequestTokenのURL(http://twitter.com/oauth/request_token)と、
OAuthConsumerオブジェクトをコンストラクタ引数に渡して生成。
HTTPMethodはGETで良い。
さらに、OAuthRequestオブジェクトから、buildRequestメソッドをコールして、
URLを取得する。
引数にはnew OAuthSignatureMethod_HMAC_SHA1()を渡しておく。
このURLをHTTPServiceなどを使ってHTTP GETを投げる。
成功すると、oauth_tokenとoauth_secretが戻ってくる。
oauth_tokenがRequestToken Keyで、oauth_secretがRequestToken secret。
簡単な説明。
ここでは、RequestTokenというものをTwitterから取得します。
登録アプリケーションを識別するConsumer keyを渡すことがメインなのですが、
ただConsumer keyを渡すのではなく、Consumer secretを利用して、
ハッシュ化(SHA1)したものを渡します。
↑ウソ書きました。Consumer keyはそのまま飛んでいきます。
ハッシュ化はシグネチャ(oauth_signature)を作成する時に行います。
その他、timestampやnonceといった文字列も必要なのですが、buildRequestが自動生成します。
ちなみに、OAuthの規格では、signatureを平文で渡しても良いことになっていますが、
Twitterは平文での通信を認めていません。
2.PINコード取得
1.で取得したRequestToken keyをパラメータとして、Authorize URLにアクセス。
直に書くと、
https://twitter.com/oauth/authorize?oauth_token=取得したRequestToken Key
このURLはnavigateToURLなどを使ってブラウザを起動します。
ユーザに利用許可を求める画面に移ります。
ユーザが許可を出すと、7桁のPINコードが表示されるので、これを保存します。
このPINコードはoauth_verifierとして後で使います。
Webアプリの場合はoauth_callbackというパラメタを指定すると、
指定先にリダイレクトしてくれますが、
AIRなどのデスクトップの場合、他の方法でPINを保存する必要があります。
若干面倒です。
3.AccessToken取得
ここが厄介なので、コード風に記述。
var consumer:OAuthConsumer = new OAuthConsumer(Consumer key, Consumer secret);
var reqToken:OAuthToken = new OAuthToken(Request token key, Request token secret);
var request:OAuthRequest = new OAuthRequest("GET", access_token url, {oauth_verifier: PIN, oauth_version: "1.0"}, consumer, reqToken);
var url:String = request.buildRequest(new OAuthSignatureMethod_HMAC_SHA1());
このurlをHTTPServiceなどでHTTP GETします。
戻り値のtokenとsecretが、永久保存版のAccess Tokenです。
AccessTokenの取得でやっていることはかなりわかりづらいので、
生成したurlをtraceなどで観察するといいと思います。
このページが特に参考になるかと。
Twitter API を OAuth で認証するスクリプトを 0 から書いてみた
http://techno-st.net/2009/11/26/twitter-api-oauth-0.html