LoginSignup
10
11

More than 5 years have passed since last update.

Twitter APIリミットの残存回数取得メソッド

Last updated at Posted at 2014-01-27

Twitter APIリミットの残存回数取得メソッド - 別館 子子子子子子(ねこのここねこ)からの引用です。詳細情報は上記サイトを参照頂ければ幸いです。

メソッド

(1/28更新)
オープンクラスでrate_limit_statusrate_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を消費するので、その点も注意してください。

10
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11