使用python-twitter获取用户的热门关注者
我想用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.
问题在于,当这个用户的粉丝数量非常多时,我就会收到“超出请求限制”的错误信息。
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)
另外一个可能的办法是尝试按照这里的说明运行定时任务。你可以查看这个链接了解更多:http://knightlab.northwestern.edu/2014/03/15/a-beginners-guide-to-collecting-twitter-data-and-a-bit-of-web-scraping/
构建你的脚本时,要循环使用你的API密钥,以保持在速率限制之内。
定时任务——一种基于时间的任务调度工具,可以让你在指定的时间或间隔运行脚本(例如,每天凌晨12:01,或者每15分钟一次)。