さて、先の記事でリクエストトークンを取得しましたが、このままでは使えない訳で、このトークン値を使ってTwitterにリダイレクトしてユーザの承認を行います。
この辺の処理はブラウザ/デスクトップベースのクライアントかによっても違ってきますし、Botのようなクライアントなら自分で承認すればOKですが、他のユーザが使う場合なら各ユーザに承認してもらう必要もあり、各トークンの管理等も含めて複雑になって行きます。
今回はbotがつぶやく仕様、これです。
botがつぶやくには、つぶやくTwitterアカウントでログインして、アプリの承認を自分で行います。
# 前回のソースから直接承認画面にリダイレクトする場合。 my $authorize_url = 'http://twitter.com/oauth/authorize'; my $request_token = '[取得したリクエストトークン]'; print "Location: ".$authorize_url."?oauth_token=".$request_token." ";
リダイレクトすると、Twitteのアプリ承認画面が開きます。
この画面で許可を選択すれば、コールバックURLへリダイレクトされます。
※デスクトップクライアントの場合は、ここで暗証番号らしき数字が表示されるみたいです。それは、またの機会に確認してみます。
コールバックURLにリダイレクトされると同時に、承認済リクエストトークンとヴェリファイア値がPOSTされるので、適当な方法でこのPOST値を拾います。簡単な方法だとCGIモジュールとか。。。
で、今度はこの各値を使って、アクセストークンとシークレットを取得します。
# アクセストークンとシークレットの取得 -------------------- # このソースは簡略化してますので、自分のソースに合った改変は必須かと思います。 use CGI; use LWP::UserAgent; use Net::OAuth; $Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A; my $q = CGI->new; my $access_token = $q->param('oauth_token'); #承認済みトークン my $access_verifier = $q->param('oauth_verifier'); #ヴェリファイア my $access_token_url = 'http://twitter.com/oauth/access_token'; my $request_method = 'POST'; #アクセストークン取得はpostなので注意 my $request = Net::OAuth->request("access token")->new( consumer_key => 'Twitterから取得したキー', consumer_secret => 'Twitterから取得しシークレット', request_url => $access_token_url, request_method => $request_method, signature_method => 'HMAC-SHA1', timestamp => time, nonce => 'ランダム文字列', #毎回変更 callback => '', token => $access_token, verifier => $access_verifier, token_secret => '', ); my $ua = LWP::UserAgent->new; my $http_hdr = HTTP::Headers->new('User-Agent' => $ClientUA_name); my $http_req = HTTP::Request->new($request_method, $access_token_url, $http_hdr, $request->to_post_body); my $http_res = $ua->request($http_req); my $AccessTokenStr = $http_res->content;
こんな感じです。$AccessTokenStrは前回同様に分解して下さい。
2010/02/06追記: Syntax-Hilighter入れてみたw