Hatena::ブログ(Diary)

黒羊工房はてな版

2010-05-02

[][][]【解決編】twitterOAuth使ってもAPIが150のままになってる(ように見える)件

【試行錯誤中】twitterOAuth使ってもAPIが150のままになってる(ように見える)件

http://d.hatena.ne.jp/bsheep/20100501/1272720696



というダイアリーをポストしてtwitterにも投げた直後に@fujimottaさんからヒントを教えてもらった結果あっという間に解決することができました。twitterサイコー

@bsheep apiurlOAuth用のやつになってない可能性ありますねー。

http://twitter.com/fujimotta/status/13188681287

@bsheep http://api.twitter.com/1/users/hogehoge.xml これでいけるらしいす。

http://twitter.com/fujimotta/status/13188874593



ということでAPI仕様書の翻訳版を見直してみたところこんな記述が!


Twitter API 仕様書 日本語訳 第四十九版 (2010年3月3日版)

http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt

API 実行回数制限の緩和

(2010年1月から) OAuth 経由で新しい API エンドポイント (http://api.twitter.com/ で始まる URL) にアクセスする場合に限って、API を60分間に350回まで実行することができる

(訳者注: 緩和措置導入直後は60分間に450回まで実行可能だったが、2010年1月12日のハイチ地震発生時のサーバー負荷状況を考慮した結果、2010年1月24日以降、60分間に350回まで実行可能とすることにした模様。

将来的には、60分間に1500回まで実行可能にすることが予告されている)。

なお、この「緩和措置」が有効な状態でも rate_limit_status は、依然として hourly-limit の値として 150 を返す。

「緩和措置」が有効になっていることを確認するには、API 実行要求(httpリクエスト)に対する応答中のhttpレスポンスヘッダを見ればよい。

httpレスポンスヘッダ中の

X-RateLimit-Limit:

が、60分間(1時間)に実行可能な回数を示し、

X-RateLimit-Remaining:

が、あと何回実行可能なのかを示している。

やっぱり仕様書はちゃんと読めって事ですね><


ということで、修正後


use strict;
use warnings;
use utf8;
use Data::Dumper;
use Digest::SHA;
use IO::All;
use JSON;
use LWP::UserAgent;
use Net::OAuth;

my $account = from_json( io( 'account.json' )->all );
my $application = from_json( io( 'application.json' )->all );

my $uri = 'http://api.twitter.com/1/account/rate_limit_status.json';
my $request = Net::OAuth->request('protected resource')->new(
    consumer_key => $application->{consumer_key},
    consumer_secret => $application->{consumer_secret},
    token => $account->{access_token},
    token_secret => $account->{access_token_secret},
    request_url => $uri,
    request_method => 'GET',
    signature_method => 'HMAC-SHA1',
    timestamp => time,
    nonce => Digest::SHA::sha1_base64(time . $$ . rand),
);
$request->sign;
my $ua = LWP::UserAgent->new;
my $res = $ua->get( $request->to_url );
my $content = $res->content;
print Dumper from_json $content;

結果

$VAR1 = {

'reset_time_in_seconds' => 1272729694,

'hourly_limit' => 350,

'remaining_hits' => 350,

'reset_time' => 'Sat May 01 16:01:34 +0000 2010'

};

@fujimottaさん本当にありがとうございます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/bsheep/20100502/1272726519