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()、みたいな使い方をしています。