twitterのOAuthベータが開始されたので、さっそく軽量Web Application Framework「MENTA」でOAuthする物を作ってみた。
構成も簡単で
│ .htaccess
│ menta.cgi
├─app
│ ├─controller
│ │ callback.pl
│ │ request.pl
│ ├─data
│ └─static
├─bin
├─lib
└─plugins
session.pl
こんな感じ。
トップページからrequest.plに飛び、OAuthのcallbackとしてcallback.plがキックされる。
要のrequest.plは以下の様な感じ
use MENTA::Controller;
use URI;
use OAuth::Lite::Consumer;
sub run {
my $consumer = OAuth::Lite::Consumer->new(
consumer_key => config()->{application}->{consumer_key},
consumer_secret => config()->{application}->{consumer_secret},
site => 'http://twitter.com/',
request_token_path => 'http://twitter.com/oauth/request_token',
access_token_path => 'http://twitter.com/oauth/access_token',
authorize_path => 'http://twitter.com/oauth/authorize',
);
my $request_token = $consumer->get_request_token();
my $uri = URI->new( $consumer->{authorize_path} );
$uri->query(
$consumer->gen_auth_query(
"GET", "http://twitter.com/", $request_token
)
);
redirect( $uri->as_string );
}
そしてcallback.plはこんな感じ
use utf8;
use MENTA::Controller;
use OAuth::Lite::Consumer;
use JSON;
sub run {
my $consumer = OAuth::Lite::Consumer->new(
consumer_key => config()->{application}->{consumer_key},
consumer_secret => config()->{application}->{consumer_secret},
site => 'http://twitter.com/',
request_token_path => 'http://twitter.com/oauth/request_token',
access_token_path => 'http://twitter.com/oauth/access_token',
authorize_path => 'http://twitter.com/oauth/authorize',
);
my $access_token = $consumer->get_access_token( token => param('oauth_token') );
my $res = $consumer->request(
method => 'POST',
url => q{http://twitter.com/statuses/update.json},
token => $access_token,
params =>
{ status => 'おうっふー', token => $access_token },
);
if ( $res->is_success ) {
my $status = from_json( $res->content );
redirect( "http://twitter.com/"
. $status->{user}->{screen_name}
. "/status/"
. $status->{id} );
}
else {
redirect("http://twitter.com/");
}
}
ちなみにこのアプリケーションを"Accept"にするとtwitteのステータスラインに「おうっふー」がポストされます。自分で作る方は
twitterのアプリケーション登録画面から得られるconsumer_keyとconsumer_secretをmenta.cgiのapplication項目に設定するのをお忘れなく。
簡単ですね!