TwitterOAuthでrate-limit(レート制限)のレスポンスヘッダを確認する

シェアする

TwitterのBotを作るのに必携のTwitterOAuthでレスポンスヘッダを確認する方法。

TwitterOAuthでrate-limit(レート制限)のレスポンスヘッダを確認する

Twitterのbotを作るのに必須なのはTwitter APIですが、簡単にいじるのに楽ちんなのはTwitterOAuthです。

結構オートメーションに使えるのであまり中を見ることがなかったのですが、マスクのせいで昨今のBotに対する制限が厳しくて、ちょくちょくBotが429 Too Many Requestsで止まっていることが多くなりました。

一応Twitter APIのhttpレスポンスの中にrate limitに関連する情報が入っているんですが、それをどう取り出すのかが分からず……仕方なくソースの中を見て「あ、これか」というのがあったので共有です。

TwitterOAuthの使い方はさておき、TwitterOAuthのインスタンスが$appだとすると、postやらgetやらを投げた後に、

$app->getLastXHeaders();

でobjectが返ってきます。

stdClass Object
(
    [x_access_level] => read-write
    [x_frame_options] => SAMEORIGIN
    [x_transaction_id] => ae69cc7546791a58
    [x_xss_protection] => 0
    [x_rate_limit_limit] => 40000
    [x_rate_limit_reset] => 1697955438
    [x_content_type_options] => nosniff
    [x_rate_limit_remaining] => 39999
    [x_app_limit_24hour_limit] => 50
    [x_app_limit_24hour_reset] => 1698028845
    [x_user_limit_24hour_limit] => 50
    [x_user_limit_24hour_reset] => 1698028845
    [x_app_limit_24hour_remaining] => 35
    [x_user_limit_24hour_remaining] => 35
    [x_response_time] => 234
    [x_connection_hash] => d5b274257c60a748f38808e13be1051c16d552a711785f19338275979fbebac0
)

こんな感じです。実際のヘッダではx-rate-limit-resetみたいに-(ハイフン)区切りなのですが、全て_(アンダースコア)に変換して返してきます。

x_user_**とx_app_*の違いはAPI Versionの1と2に相当するとのこと。

実際Botの動作に関連しそうなのは、API Versionが2前提で、

x_app_limit_24hour_reset
x_app_limit_24hour_remaining

この辺なんですかね。x_app_limit_24hour_resetがUnixtimeでrate limitが次にリセットされる時間、x_app_limit_24hour_remainingが残りのリクエスト回数のようです。

他のは何だ?と思いますが、少し前まではpost/tweetで15分間で何回、とかでしたが、2023年7月から無料アカウントのAPI利用は極端に制限されて……tweetだと今24時間で50回とかみたいですよ。。1時間2回ちょっと、てとこですか・・・。ひどい。

とりあえずこれを独立したファイルにしてコピーして使いまわしできるようにして、レスポンスヘッダをファイル出力、bot本体からrequireして、x_app_limit_24hour_remainingが0になるとx_app_limit_24hour_resetまではdie()、みたいな使い方をしています。

この記事が気に入ったら
いいね!お願いします