TwitterのOAuthClientを下記URLから設定
http://twitter.com/oauth_clients
consumer_keyとconsumer_secretを取得する。
おおまかな流れ
- index.html からリンクで sample.pl にアクセスし、Twitter の OAuth 許可用のページへリダイレクト
- OAuth 許可用のページで許否を設定後、sample.pl で設定した callback_url (ここ重要)へリダイレクトされる(この場合はcallback.pl)
- callback.pl で oauth_token と oauth_verifier を取得し update を試みる
- 成功であればツイート先へ、失敗であれば Twitter トップページにリダイレクト
コード例
sample.pl
#!/usr/bin/perl use strict; use warnings; use utf8; use lib '/home/foo/local/lib/perl5'; use OAuth::Lite::Consumer; use URI; use CGI; use CGI::Carp qw/fatalsToBrowser/; my $q = CGI->new(); my $consumer = OAuth::Lite::Consumer->new( consumer_key => 'YOUR_CONSUMER_KEY', consumer_secret => 'YOUR_CONSUMER_SECRET', callback_url => 'http://example.com/callback.pl', 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) ); print $q->redirect($uri->as_string); exit;
callback.pl
#!/usr/bin/perl use strict; use warnings; use utf8; use lib '/home/foo/local/lib/perl5'; use OAuth::Lite::Consumer; use Encode; use CGI; use CGI::Carp qw/fatalsToBrowser/; use URI; my $q = CGI->new(); *OAuth::Lite::Util::encode_param = sub { my $param = shift; URI::Escape::uri_escape_utf8($param, '^\w.~-'); }; my $consumer = OAuth::Lite::Consumer->new( consumer_key => 'YOUR_CONSUMER_KEY', consumer_secret => 'YOUR_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 $param_oauth_token = $q->param('oauth_token'); my $param_oauth_verifier = $q->param('oauth_verifier'); my $access_token = $consumer->get_access_token( token => $param_oauth_token, verifier => $param_oauth_verifier, ); my $res = $consumer->request( method => 'POST', url => q{http://twitter.com/statuses/update.xml}, token => $access_token, params => { status => scalar localtime, token => $access_token, }, ); if ($res->is_success) { use XML::Simple; my $status = XMLin($res->decoded_content); print $q->redirect( "http://twitter.com/" . $status->{user}->{screen_name} . '/status/' . $status->{id} ); } else { print $q->redirect('http://twitter.com'); } exit;