PerlでOAuth③ – Twitter

さて、先の記事でリクエストトークンを取得しましたが、このままでは使えない訳で、このトークン値を使って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


投稿日

カテゴリー:

投稿者:

タグ: