Compass note

未踏の地へ踏み出すコンパス的エンジニアノート

Twitter API(Tweepy) でのレート制限をハンドリングする方法|Tweepy Rate limit エラーで困ったら

* 本ページはプロモーションが含まれています

"Twitter API(Tweepy) でのレート制限をハンドリングする方法|Tweepy Rate limit エラーで困ったら" Twitter API を Python ライブラリの Tweepy でがんがん実行していると API を受け付けてくれなくなるときがある。

API は各エンドポイントで単位時間あたりの受付回数を制限されているので、それを超えるとエラーとなる。

Tweepy では、API 認証をセットする時のオプションを加えることで、

  • レート制限が補充されるまで自動的に待つ
  • レート制限の補充を待っている時の通知をする

を制御できる。

  • wait_on_rate_limit:レート制限が補充されるのを自動的に待つかどうか
  • wait_on_rate_limit_notify:Tweepyがレート制限の補充を待っているときに通知を出力するかどうか

具体的には以下のように書く。

import tweepy
CONSUMER_KEY="XXXXXXXXXXX"
CONSUMER_SECRET="XXXXXXXXXXX"
ACCESS_TOKEN="XXXXXXXXXXX-XXXXXXXXX"
ACCESS_SECERET="XXXXXXXXXXXXXXXXXXX"

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECERET)
 

# wait_on_rate_limit、wait_on_rate_limit_notify のセット
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

レート補充に待たされると以下のように補充を待っている情報とあわせて、あと何秒で補充が完了するかの応答が返ってくる。

bash-3.2$ python twitter_followBack_hiro_businessX.py 
Rate limit reached. Sleeping for: 172
hiro_businessX :----------------------------------------
hiro_businessX :  amano@人生これから🐾をフォローします。

各レートの規定の詳細はこちらを参照

Rate limits | Docs | Twitter Developer

Standard API v1.1 rate limits per window
POST endpoints

Endpoint Rate limit window Rate limit per user Rate limit per app
POST statuses/update 3 hours* 300* 300*
POST statuses/retweet/:id 3 hours* 300* 300*
POST favorites/create 24 hours 1000 1000
POST friendships/create 24 hours 400 1000
POST direct_messages/events/new 24 hours 1000 15000

GET endpoints

Endpoint Requests / window per user Requests / window per app
GET account/verify_credentials 75 0
GET application/rate_limit_status 180 180
GET favorites/list 75 75
GET followers/ids 15 15
GET followers/list 15 15
GET friends/ids 15 15
GET friends/list 15 15
GET friendships/show 180 15
GET geo/id/:place_id 75 0
GET help/configuration 15 15
GET help/languages 15 15
GET help/privacy 15 15
GET help/tos 15 15
GET lists/list 15 15
GET lists/members 900 75
GET lists/members/show 15 15
GET lists/memberships 75 75
GET lists/ownerships 15 15
GET lists/show 75 75
GET lists/statuses 900 900
GET lists/subscribers 180 15
GET lists/subscribers/show 15 15
GET lists/subscriptions 15 15
GET search/tweets 180 450
GET statuses/lookup 900 300
GET statuses/mentions_timeline 75 0
GET statuses/retweeters/ids 75 300
GET statuses/retweets_of_me 75 0
GET statuses/retweets/:id 75 300
GET statuses/show/:id 900 900
GET statuses/user_timeline 900 1500
GET trends/available 75 75
GET trends/closest 75 75
GET trends/place 75 75
GET users/lookup 900 300
GET users/search 900 0
GET users/show 900 900
GET users/suggestions 15 15
GET users/suggestions/:slug 15 15
GET users/suggestions/:slug/members 15 15