2015-06-23 4 views
2

Я пытаюсь использовать Tweepy, чтобы получить полный список подписчиков из аккаунта с последователями 500 тыс., И у меня есть код, который дает мне имена пользователей для небольших учетных записей, например, до 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

API twitter позволяет одновременно искать только 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 минут, а затем продолжается. Это гарантирует, что он не столкнется с проблемами. Это, очевидно, займет возраст для крупных счетов, но, как сказал Леб,

API twitter позволяет одновременно искать 100 пользователей ... [так], что вам нужно будет сделать, это перебрать каждый 100 пользователей, но оставаясь в пределах лимита.

Вам просто нужно оставить программу запущенной, если вы хотите следующий набор. Я не знаю, почему мой дает 300 за один раз вместо 100, но, как я уже упоминал о своей программе раньше, он давал мне и 100 ранее.

Надеюсь, это поможет кому-то еще, у кого была такая же проблема, как и я, и выкрикивать Лебу, чтобы напомнить мне, чтобы сосредоточиться на лимите скорости.

+1

Я хотел бы рассмотреть чуть более 15 минут, чтобы удалить любую возможную задержку между вашим компьютером и twitter API. У меня нет фактического числа, может быть, 16? Я не уверен, насколько строгий твиттер с их «15 монетами», будет ли «14: 35» хорошим? Просто чтобы быть в безопасности и обеспечить, чтобы программа работала с наименьшими помехами. – Leb

4

Продлить на это:

Вы можете собрать 3000 пользователей за 15 минут, добавив параметр Count:

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

Это будет вызывать интерфейс Твиттера 15 раз согласно вашей версии, но вместо того, по умолчанию count = 20, каждый вызов API вернет 200 (т.е. вы получите 3000, а не 300).

Смежные вопросы