其他分享
首页 > 其他分享> > 超过tweepy.TweepError速率限制

超过tweepy.TweepError速率限制

作者:互联网

我当时用Python和Tweepy编写了一个Twitter机器人.昨晚我成功地使该机器人正常工作,但是在跟随了60个人之后,该机器人开始引发错误,提示错误[{u’message’:u’Rate Limit Exceeded’,u’code’:88}].我了解只允许对Twitter API进行一定数量的调用,我发现this link可以显示我可以对这些函数进行多少次调用.查看我的代码后,我发现我在tweepy.Cursor(api.followers,me).items()中对追随者说的错误被抛出.在发现的页面上,我收到了多少请求,并说我每15分钟收到15个请求以吸引关注者.我已经等了一整夜,今天早上我重试了代码,但是,它仍然抛出相同的错误.我不明白为什么Tweepy每当我仍然有剩余请求时都会抛出超出速率限制的错误.

这是引发错误的代码.

#!/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}]**

解决方法:

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个关注者,在一般情况下就足够了.

标签:twitter,tweepy,python
来源: https://codeday.me/bug/20191120/2044844.html