2013-01-10 37 views
4

我对tweepy和分页使用游标类相当陌生。我一直在尝试使用光标类来获取特定twitter用户的所有追随者,但是我一直收到错误,它说"tweepy.error.TweepError: This method does not perform pagination" 因此,如果有人可以帮助我实现获取所有一个特定的twitter用户的分页,使用tweepy的追随者。我到目前为止的代码如下:关于特定twitter用户的tweepy(get_followers)中的分页查询

import tweepy 

consumer_key='xyz' 
consumer_secret='xyz' 

access_token='abc' 
access_token_secret='def' 

auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 

auth.set_access_token(access_token, access_token_secret) 

api = tweepy.API(auth) 


user = api.get_user('somehandle') 
print user.name 

followers = tweepy.Cursor(user.followers) 
temp=[] 
for user in followers.items(): 
    temp.append(user) 
    print temp 
#the following part works fine but that is without pagination so I will be able to retrieve at #most 100 followers 
aDict = user.followers() 
for friend in aDict: 
    friendDict = friend.__getstate__() 
    print friendDict['screen_name'] 

回答

6

有一个方便的方法叫做followers_ids。它返回给定的screen_name(或id,user_idcursor)的5000个追随者(twitter api limit)ID。

然后,您可以在python中手动分页这些结果,并且为每个块调用lookup_users。只要lookup_users可以一次(twitter api limit)只处理100的用户ID,它是相当合理的,以块大小设置为100。

下面的代码(分页部分从here采取):

import itertools 
import tweepy 


def paginate(iterable, page_size): 
    while True: 
     i1, i2 = itertools.tee(iterable) 
     iterable, page = (itertools.islice(i1, page_size, None), 
       list(itertools.islice(i2, page_size))) 
     if len(page) == 0: 
      break 
     yield page 


auth = tweepy.OAuthHandler(<consumer_key>, <consumer_secret>) 
auth.set_access_token(<key>, <secret>) 

api = tweepy.API(auth) 

followers = api.followers_ids(screen_name='gvanrossum') 

for page in paginate(followers, 100): 
    results = api.lookup_users(user_ids=page) 
    for result in results: 
     print result.screen_name 

希望有所帮助。

+0

您是否有机会获得有关您如何创建分页功能的更多信息的链接?我一直在寻找一种很好的方法来做到这一点。谢谢! –

+0

@KyleSponable很久以前,但看看[这个线程](http://stackoverflow.com/questions/3744451/is-this-how-you-paginate-or-is-there-a-better-算法) - 我认为这是我使用'paginate()'函数的地方。 – alecxe

+0

@alecxe这是否允许解决极限问题? –

0

这是一个非常好的答案,应该得到更多的信贷!一整天都跟随着玩家玩,并且不会想到这样做。 :)

相关问题