2015-06-23 35 views
2

我试图用Tweepy从与像500K追随者的账户让追随者的完整列表,我有一个让我对小账户的用户名,如在100码的追随者大名单,但是如果我得到一个甚至像110个追随者那样的人,那么这是行不通的。任何帮助搞清楚如何使它与更大的数字工作,非常感谢!如何获得Tweepy

下面的代码我现在所拥有的:

import tweepy 
import time 

key1 = "..." 
key2 = "..." 
key3 = "..." 
key4 = "..." 

accountvar = raw_input("Account name: ") 

auth = tweepy.OAuthHandler(key1, key2) 
auth.set_access_token(key3, key4) 

api = tweepy.API(auth) 

ids = [] 
for page in tweepy.Cursor(api.followers_ids, screen_name=accountvar).pages(): 
    ids.extend(page) 
    time.sleep(60) 

users = api.lookup_users(user_ids=ids) 
for u in users: 
    print u.screen_name 

我不断收到的错误是:

Traceback (most recent call last): 
    File "test.py", line 24, in <module> 
    users = api.lookup_users(user_ids=ids) 
    File "/Library/Python/2.7/site-packages/tweepy/api.py", line 321, in lookup_users 
    return self._lookup_users(post_data=post_data) 
    File "/Library/Python/2.7/site-packages/tweepy/binder.py", line 239, in _call 
    return method.execute() 
    File "/Library/Python/2.7/site-packages/tweepy/binder.py", line 223, in execute 
    raise TweepError(error_msg, resp) 
tweepy.error.TweepError: [{u'message': u'Too many terms specified in query.', u'code': 18}] 

我已经看了大量关于这类问题的其他问题,但没有我能找到的解决方案适用于我,但如果有人有解决方案的链接,请发送给我!

+0

为什么你需要* *后的图像?错误消息是**文本**,请使用代码格式设置。 – jonrsharpe

回答

1

Twitter的API仅允许100个用户在同一时刻被搜索。这就是为什么无论多少,你输入到它,你会得到100 followers_id是给你的用户数正确,但你被GET users/lookup

限制,你需要做的是通过每个迭代100什么但保持在限制范围内。

9

其实我想通了,所以我会在这里发布的解决方案仅供参考。

import tweepy 
import time 

key1 = "..." 
key2 = "..." 
key3 = "..." 
key4 = "..." 

accountvar = raw_input("Account name: ") 

auth = tweepy.OAuthHandler(key1, key2) 
auth.set_access_token(key3, key4) 

api = tweepy.API(auth) 

users = tweepy.Cursor(api.followers, screen_name=accountvar).items() 

while True: 
    try: 
     user = next(users) 
    except tweepy.TweepError: 
     time.sleep(60*15) 
     user = next(users) 
    except StopIteration: 
     break 
    print "@" + user.screen_name 

每隔300分钟后停止15分钟,然后继续。这确保它不会遇到问题。这显然需要年龄大的帐户,但正如Leb提到的:

Twitter API只允许100个用户一次搜索... [所以]你需要做的是迭代每100个用户,但保持在速率限制内。

你基本上只需要离开程序运行,如果你想下一组。我不知道为什么我一次给300人,而不是100人,但正如我之前提到过的我的计划,它早些时候也给了我100。

希望这有助于其他任何人有同样的问题,因为我,大喊答题节目环节以LEB提醒我关注的速率限制。

+1

我会考虑去稍微超过15分钟,以去除您的计算机和Twitter API之间的任何可能的延迟。我没有实际的数字,也许16?我不确定Twitter的'15分钟'有多严格,'14:35'会好吗?为了安全起见,确保程序在干扰最小的情况下运行。 – Leb

4

要在此扩展:

您可以通过添加计数参数收获每十五分钟3000个用户:

users = tweepy.Cursor(api.followers, screen_name=accountvar, count=200).items() 

这将调用Twitter API的15倍,按您的版本,但不是默认计数= 20,每个API调用将返回200(即你得到3000而不是300)。