Twitter APIリミットの残存回数取得メソッド - 別館 子子子子子子(ねこのここねこ)からの引用です。詳細情報は上記サイトを参照頂ければ幸いです。
メソッド
(1/28更新)
オープンクラスでrate_limit_status
とrate_limit_status_all
メソッドを作ってみました。Twitter gemバージョン5以上の対応です。4以下の場合にはオープンするClassをTwitter::REST::Client
からTwitter::Client
に変更すれば動くはずです(4.8.1確認済)。
なお、rate_limit_status
も180回/15分の制限がありますのでご注意ください。
rate_limit_status
メソッド
引数にpath(StringまたはSymbol)を与えると
- 上限回数・残存回数・リセット時刻(エポックタイム及び
Time
オブジェクト)・Twitterへアクセスした時刻
をハッシュで返します。(keyは順に:limit
, :remaining
, :reset
, :reset_time
, :time_now
)
rate_limit_status_all
メソッド
リミットがある全てのAPIの情報をハッシュで返します。このハッシュに含まれているのは
- 各API毎の上限回数・残存回数・リセット時刻(エポックタイム及びTimeオブジェクト)のハッシュ(keyはpath(StringまたはSymbol))
- Twitterへアクセスした時刻(keyは
:time_now
)
です。
スクリプト
(Twitter gem バージョン5.13.0以降。5.12.0以前のものはTwitter APIリミットの残存回数取得メソッド - 別館 子子子子子子(ねこのここねこ)をご参照ください。)
class Twitter::REST::Client
def rate_limit_status(path)
result_hash = rate_limit_status_all[path.to_sym]
result_hash[:time_now] = rate_limit_status_all[:time_now]
result_hash
end
def rate_limit_status_all
result_hash = {}
result_hash[:time_now] = Time.now
rate_limits = perform_get('/1.1/application/rate_limit_status.json')[:resources]
rate_limits.each do |genre, path_limits|
path_limits.each do |path, limits|
limits[:reset_time] = Time.at(limits[:reset])
result_hash[path] = limits
result_hash[path.to_s] = limits
end
end
result_hash
end
end
実行結果
rate_limit_status
の引数であるpathは、StringでもSymbolでも同じ返値が得られます。
pry(main)> client.rate_limit_status("/statuses/user_timeline")
=> {:limit=>180,
:remaining=>180,
:reset=>1390917352,
:reset_time=>2014-01-28 22:55:52 +0900,
:time_now=>2014-01-28 22:40:53 +0900}
pry(main)> client.rate_limit_status(:"/statuses/user_timeline")
=> {:limit=>180,
:remaining=>180,
:reset=>1390917362,
:reset_time=>2014-01-28 22:56:02 +0900,
:time_now=>2014-01-28 22:41:03 +0900}
rate_limit_status_all
メソッドでも同じ情報へアクセスできます。複数APIの残存回数を取得したい場合には、このrate_limit_status_all
を使ってください。
またrate_limit_status
メソッドと同じく、rate_limit_status_all
で返される(ハッシュ)オブジェクトのkeyに与えるpathは、StringでもSymbolでもどちらでも同じ値が返されます。
pry(main)> client.rate_limit_status_all["/statuses/user_timeline"]
=> {:limit=>180,
:remaining=>180,
:reset=>1390917398,
:reset_time=>2014-01-28 22:56:38 +0900}
pry(main)> client.rate_limit_status_all[:"/statuses/user_timeline"]
=> {:limit=>180,
:remaining=>180,
:reset=>1390917404,
:reset_time=>2014-01-28 22:56:44 +0900}
なおrate_limit_status_all
の返値の詳細は上記Twitter APIリミットの残存回数取得メソッド - 別館 子子子子子子(ねこのここねこ)をご確認ください。また、上記しましたが、これらのメソッドを使うと"/application/rate_limit_status" APIを消費するので、その点も注意してください。