我希望使用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.
问题是,当用户拥有大量关注者时,我会收到“超出限制率”错误消息。
答案 0 :(得分:1)
我认为您需要按照this link中的说明将结果分块。
这是当前在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分钟)运行脚本。