Net::Twitterで、OAuthしてみる(API 1.1)

認証ページURLの生成

use strict;
use warnings;
use utf8;

use Net::Twitter;

my $nt = Net::Twitter->new(
    traits   => [qw/API::RESTv1_1 OAuth/],
    consumer_key => 'xxxxxxxxxxxxxxxxxx',
    consumer_secret => 'xxxxxxxxxxxxxxxxxx',
);

my $callback = 'http://xxxxxxxxxxxxxx/callback';

# 認証済みの場合は、リダイレクトで戻ってくるURLの生成
my $url = $nt->get_authentication_url( callback => $callback );

# 認証済みでも、毎回認証するURLの生成
# my $url = $nt->get_authorization_url( callback => $callback );

# callbackで使うので、どこかに保存しておく(sessionとか)
my $request_token = $nt->request_token;
my $request_token_secret = $nt->request_token_secret;

return $url; # リダイレクトするなり、どこかにリンク貼るなり。

「get_authentication_url」の場合は、認証済みの場合にそのままcallbackで指定したURLに戻る
「get_authorization_url」の場合は、認証済みであっても、認証ページを経由してcallbackへ戻る

Callback(認証後に返ってくるページ)

Twitterから戻ってくる際に、パラメータとして、「oauth_token」と「oauth_verifier」が返ります。
それに先ほどの「request_token」と「request_token_secret」の4つを合わせて、
「access_token」、「access_token_secret」を取得する事ができます。

use strict;
use warnings;
use utf8;

use Net::Twitter;

my $nt = Net::Twitter->new(
    traits   => [qw/API::RESTv1_1 OAuth/],
    consumer_key => 'xxxxxxxxxxxxxxxxxx',
    consumer_secret => 'xxxxxxxxxxxxxxxxxx',
);

my $oauth_token = ''; # Twitterから送られる
my $oauth_verifier = ''; # Twitterから送られる

my $request_token = ''; # 認証URLを生成した時に保存しておいたもの
my $request_token_secret = ''; # 認証URLを生成した時に保存しておいたもの

# tokenのチェック( 認証時に保存したrequest_tokenと、Twitterから送られるoauth_tokenは同じ文字列です)
die unless ( $oauth_token eq $request_token );

$nt->request_token( $request_token );
$nt->request_token_secret( $request_token_secret );

my ( $access_token, $access_token_secret, $id, $screen_name ) = $nt->request_access_token(
    verifier => $args->{'oauth_verifier'},
);

# $access_tokenと、$access_token_secretを保存

てな感じで、Twitterにアクセスする為の「access_token」と、「access_token_secret」が取得できました。
これでAPI叩きまくれますね!!