Twitter错误代码429与Tweepy

23

我正在尝试使用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循环的行。有点奇怪的是,它并不总是抱怨,甚至不是在一致的时间间隔内出现。有时它会起作用,而其他时候,看起来是随机的,不起作用。

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

3个回答

44

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

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

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


25

您找到了关于错误代码的正确信息。实际上,当应用程序针对某个资源的速率限制耗尽时,会返回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
我使用了sleep(10),但仍然遇到相同的问题 :/ - mina
是的,我们需要保存推文,并根据需要才调用API :) - Praveen Kumar Palai
为什么我被限制速率了?我只使用了2,000,000条推文中的3条。 - Jridyard
@Jridyard 抱歉,你的问题不是很清楚,请发一条新的带有所有细节的问题吗?谢谢。 - Giordano
1
@Giordano 我主要是在发泄情绪。最终我解决了这个问题。因为尽管不太清楚,Twitter限制你的“规则”数量为25个,而每个你尝试从中流式传输推文的影响者都算作1个“规则”。所以我不能像我原打算的那样从300个影响者那里进行流式传输。嗯,我想这三周的工作还是值得的。 - Jridyard

3

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

这应该有助于设置速率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接