2010年8月16日月曜日

OAuth::Liteのget_request_tokenの代わりを作る

OAuth::Lite::Consumerのget_request_tokenがうまく動作しないようなので、
代用品を作ってみる。


my $consumer = new OAuth::LIte::Consumer(
  consumer_key => '****',
  consumer_secret => '****'
);

my $params = $consumer->gen_auth_params(
  'POST',
  'https://api.twitter.com/oauth/request_token'
);

$params->{oauth_callback} = 'コールバックのURL';

my $sig = $consumer->{signature_method}->new(
  consumer_secret => '*******',
  token_secret => ''
);
my $base = &OAuth::Lite::Consumer::create_signature_base_string(
  'POST',
  'https://api.twitter.com/oauth/request_token',
  $params
);

$params->{oauth_signature} = $sig->sign($base);

my $header = 'OAuth ';
foreach(sort{$a cmp $b} keys %$params){
  $header .= "$_\"" . uri_escape($params->{$_}) . "\",";
}
chop($header);
chop($header);

my $req = new HTTP::Request(
  'POST',
  'https://api.twitter.com/oauth/request_token'
);
$req->header('Authorization' => $header);
my $ua = new LWP::UserAgent();
my $res = $ua->request($req);

my $result;
foreach(split(/\&/,$res->content)){
  if($_ =~ /^([^\=]+)\=(.+)$/){
    $result->{$1} = $2;
  }
}


0 件のコメント: