Tweepy 的 Twitter 错误代码 429

新手上路,请多包涵

我正在尝试创建一个使用 tweepy api 访问 Twitter 帐户的项目,但我遇到了状态代码 429。现在,我环顾四周,发现这意味着我有太多请求。但是,我一次只能发送 10 条推文,而在我的测试期间,在这些推文中,应该只存在一条。

 for tweet in tweepy.Cursor(api.search, q = '@realtwitchess ',lang = ' ').items(10):
                        try:
                                text = str(tweet.text)
                                textparts = str.split(text) #convert tweet into string array to disect
                                print(text)

                                for x, string in enumerate(textparts):
                                        if (x < len(textparts)-1): #prevents error that arises with an incomplete call of the twitter bot to start a game
                                                if string == "gamestart" and textparts[x+1][:1] == "@": #find games
                                                        otheruser = api.get_user(screen_name = textparts[2][1:]) #drop the @ sign (although it might not matter)
                                                        self.games.append((tweet.user.id,otheruser.id))
                                        elif (len(textparts[x]) == 4): #find moves
                                                newMove = Move(tweet.user.id,string)
                                                print newMove.getMove()
                                                self.moves.append(newMove)
                                if tweet.user.id == thisBot.id: #ignore self tweets
                                        continue

                        except tweepy.TweepError as e:
                                print(e.reason)
                                sleep(900)
                                continue
                        except StopIteration: #stop iteration when last tweet is reached
                                break

当错误确实出现时,它出现在第一个 for 循环行中。有点奇怪的是它不会每次都抱怨,甚至不会在一致的时间间隔内抱怨。有时它会起作用,而其他时候,似乎是随机的,不起作用。

我们尝试在循环中添加更长的休眠时间并减少项目数。

原文由 DSchana 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

您找到了有关错误代码的正确信息。事实上,当由于应用程序的资源速率限制已用尽而无法提供请求时,将返回 429 代码。(来自文档)

我想你的问题不是数据的数量而是频率。

检查 Twitter API 速率限制(与 tweepy 相同)。

速率限制分为 15 分钟间隔。所有端点都需要身份验证,因此不存在未经身份验证的调用和速率限制的概念。 GET 请求有两个可用的初始存储桶:每 15 分钟调用 15 次,每 15 分钟调用 180 次。

我认为你可以尝试在这个范围内使用 API 来避免这个问题

更新

对于最新版本的 Tweepy(从 3.2.0 开始),引入了 *wait_on_rate_limit *。

如果设置为 True,它允许自动避免此问题。

从文档:

wait_on_rate_limit – 是否自动等待速率限制补充

原文由 Giordano 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 API 调用中添加 wait_on_rate_limit=True,如下所示:

 api = tweepy.API(auth, wait_on_rate_limit=True)

这将使其余代码遵守速率限制

原文由 J. Gandra 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题