使用Tweepy开发Twitter点赞机器人遭遇429请求过多错误
Twitter机器人429限流问题的成因与修复
问题成因
- 限流配置错位:初始化
tweepy.API时设置了wait_on_rate_limit=True,但实际执行点赞的是tweepy.Client实例,该实例未开启自动限流等待,遇到429错误会直接抛出,不会自动等待速率重置。 - 手动sleep无效:
time.sleep(10)仅在单条推文处理后延迟,但Streaming是实时推送机制,当符合关键词的推文密集涌入时,手动sleep无法控制整体请求频率,依然会突破API速率限制。 - 流规则冗余:规则中存在多余的空值
OR,可能导致无效匹配,增加不必要的请求量。
修复步骤
1. 给Client开启自动限流等待
修改tweepy.Client的初始化代码,添加wait_on_rate_limit=True参数,让Client自动处理429错误,在速率重置前自动等待:
client = tweepy.Client( BEARER_TOKEN, TWITTER_API_KEY, TWITTER_API_KEY_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_S, wait_on_rate_limit=True )
2. 移除无用的time.sleep(10)
Client的自动限流已经能处理速率问题,手动sleep不仅无效,还会增加处理延迟,直接删除该行代码。
3. 修正流规则的冗余项
删除规则中多余的空值OR,避免无效匹配:
rule = tweepy.StreamRule("(fumar OR fumando OR fumeque OR fumo) -is:retweet")
4. 清理冗余代码(可选)
初始化的tweepy.API实例未被使用,可直接删除相关代码减少冗余:
# 以下两行可删除 auth = tweepy.OAuth1UserHandler(TWITTER_API_KEY, TWITTER_API_KEY_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_S) api = tweepy.API(auth, wait_on_rate_limit=True)
修复后完整代码
import time import tweepy TWITTER_API_KEY = "XXXX" TWITTER_API_KEY_SECRET = "XXXX" BEARER_TOKEN = "XXXX" TWITTER_ACCESS_TOKEN = "XXXX" TWITTER_ACCESS_TOKEN_S = "XXXX" client = tweepy.Client( BEARER_TOKEN, TWITTER_API_KEY, TWITTER_API_KEY_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_S, wait_on_rate_limit=True ) alive() class MyStream(tweepy.StreamingClient): def on_tweet(self, tweet): try: print(tweet.text) client.like(tweet.id) except Exception as error: print(error) stream = MyStream(bearer_token=BEARER_TOKEN) rule = tweepy.StreamRule("(fumar OR fumando OR fumeque OR fumo) -is:retweet") stream.add_rules(rule) stream.filter()
内容的提问来源于stack exchange,提问作者areksuu
相关产品推荐
相关产品推荐

