tweepy.TweepError超出限速

时间:2015-03-29 17:18:42

标签: python twitter tweepy

问题

我正在用Python写一个Twitter机器人Tweepy。我昨晚成功地让机器人工作了,然而,在跟随60人之后,机器人开始抛出一个错误[{u'message': u'Rate Limit Exceeded', u'code': 88}]。我知道我只允许对Twitter API进行一定数量的调用,我发现this link显示了我可以对这些函数进行多少次调用。在查看我的代码之后,我发现在我说for follower in tweepy.Cursor(api.followers, me).items():的地方错误。在我发现的页面上说我收到了多少请求,它表示我每15分钟收到15个请求以获取我的关注者。我等了一夜,我今天早上重试了代码,然而,它仍然抛出同样的错误。我不明白为什么每当我还有请求时,Tweepy会抛出rate limit exceeded错误。

代码

这是我的代码抛出错误。

#!/usr/bin/python

import tweepy, time, pprint

CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_KEY = ''
ACCESS_SECRET = ''
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth, wait_on_rate_limit=True)
me = api.me()

pprint.pprint(api.rate_limit_status())

while True:
    try:
        for follower in tweepy.Cursor(api.followers, me).items():
            api.create_friendship(id=follower.id)
        for follower in tweepy.Cursor(api.friends, me).items():
            for friend in tweepy.Cursor(api.friends, follower.id).items():
                if friend.name != me.name:
                    api.create_friendship(id=friend.id)
    except tweepy.TweepError, e:
        print "TweepError raised, ignoring and continuing."
        print e
        continue

通过输入交互式提示

,我找到了引发错误的行
for follower in tweepy.Cursor(api.followers, me).items():
        print follower

它给了我错误

**Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    for follower in api.followers(id=me.id):
  File "C:\Users\Lane\AppData\Local\Enthought\Canopy\User\lib\site-packages\tweepy\binder.py", line 239, in _call
    return method.execute()
  File "C:\Users\Lane\AppData\Local\Enthought\Canopy\User\lib\site-packages\tweepy\binder.py", line 223, in execute
    raise TweepError(error_msg, resp)
TweepError: [{u'message': u'Rate limit exceeded', u'code': 88}]**

1 个答案:

答案 0 :(得分:3)

API().followers方法实际上是GET followers/list,每个窗口限制为15个请求(在下一个纪元之前)。每次通话都会通过默认返回 20 用户列表,如果您达到限制超出错误,我确定经过身份验证的用户拥有超过300个关注者。

解决方案是增加每次通话期间收到的用户列表的长度,这样在15次通话中它可以获取所有用户。修改您的代码如下

for follower in tweepy.Cursor(api.followers, id = me.id, count = 50).items():
    print follower

count表示每个请求要提取的用户数。

count的最大值可以是200,这意味着在15分钟内,您只能获取200 x 15 = 3000个粉丝,这在一般情况下就足够了。