OAuth::LiteでOAuth対応のHTTP::Requestを作る方法 (Perlでtwitter bot書いてる人向け)

最近人気エントリーに便乗したネタが多くてすみません。

実用! PerlでコマンドラインからTwitter投稿(OAuth対応) では、Net::Twitter を使って OAuth で投稿する方法が紹介されていますね。

ところで、単純な twitter bot 作るのに Net::Twitter 使います?「投稿なんて LWP で1発リクエスト投げればいいだけだから使わない」という人も多いと思いますが、Basic 認証が廃止されたらどうしましょう。
そのようなかた向けに、OAuth::Lite で OAuth 対応な HTTP::Request を作る方法をご紹介します。

consumer key, consumer secret, access token, access token secret は既に何らかの方法で取得できているものとすると、こんな感じです。

use OAuth::Lite::Consumer;
my $consumer = OAuth::Lite::Consumer->new(
    consumer_key    => $consumer_key,
    consumer_secret => $consumer_secret,
);
my $access_token = OAuth::Lite::Token->new(
    token  => $access_token,
    secret => $access_token_secret,
);
my $req = $consumer->gen_oauth_request(
    method  => "POST",
    url     => "http://twitter.com/statuses/update.json",
    token   => $access_token,
    params  => { status => $status },
);
# $req は HTTP::Request のインスタンス

これで OAuth 署名のついた HTTP::Request オブジェクトが得られます。
あとは LWP::UserAgent でも Tatsumaki::HTTPClient でも、HTTP::Request を受け入れてくれるお好きなライブラリに渡してやることで、OAuth で Twitter API を使用することができます。

# OAuth::Lite::Consumer->request() で直接リクエストを投げることもできるのですが、自分は AnyEvent で使いたかったので gen_oauth_request() を使う形にしました

これで6月末の Basic 認証廃止も怖くないですね!