0

我想使用 python-twitter 获得 twitter 用户的顶级关注者。并且没有收到“超出速率限制”错误消息。

我可以获取用户的关注者,然后获取每个用户的关注者数量,但问题是当该用户很大(数千)时。

我使用以下函数来获取特定用户的关注者 ID:

def GetFollowerIDs(self, userid=None, cursor=-1):
   url = 'http://twitter.com/followers/ids.json'
   parameters = {}
   parameters['cursor'] = cursor
   if userid:
       parameters['user_id'] = userid
   json = self._FetchUrl(url, parameters=parameters)
   data = simplejson.loads(json)
   self._CheckForTwitterError(data)
   return data

我的代码是:

import twitter
api = twitter.Api(consumer_key='XXXX',
                  consumer_secret='XXXXX',
                  access_token_key='XXXXX',
                  access_token_secret='XXXXXX')
user=api.GetUser(screen_name="XXXXXX")
users=api.GetFollowerIDs(user)

#then i make a request per follower in users so that I can sort them according to the number of followers.

问题是,当用户有很多关注者时,我会收到“超出速率限制”错误消息。

4

1 回答 1

1

我认为您需要按此链接中的说明分块获取结果。

这是目前在 github 页面上显示的解决方法。但是,如果您想要无限流,您应该升级您的 twitter 应用程序的订阅。

def GetFollowerIDs(self, userid=None, cursor=-1, count = 10):
   url = 'http://twitter.com/followers/ids.json'
   parameters = {}
   parameters['cursor'] = cursor
   if userid:
       parameters['user_id'] = userid
   remaining = count
   while remaining > 1:
       remaining -= 1
       json = self._FetchUrl(url, parameters=parameters)
       try:
           data = simplejson.loads(json)
           self._CheckForTwitterError(data)
       except twitterError:
           break
   return data

def main():
    api = twitter.Api(consumer_key='XXXX',
                      consumer_secret='XXXXX',
                      access_token_key='XXXXX',
                      access_token_secret='XXXXXX')
    user=api.GetUser(screen_name="XXXXXX")
    count = 100 # you can find optimum value by trial & error
    while(#users not empty):
        users=api.GetFollowerIDs(user,count)

或者另一种可能性是尝试按此处解释的间隔运行 Cron 作业。 http://knightlab.northwestern.edu/2014/03/15/a-beginners-guide-to-collecting-twitter-data-and-a-bit-of-web-scraping/

以循环使用 API 密钥的方式构建脚本以保持在速率限制内。


Cronjobs — 一个基于时间的作业调度程序,可让您在指定的时间或间隔运行脚本(例如,总是在上午 12:01 或每 15 分钟)。

于 2014-06-13T23:59:54.887 回答