2013-12-06 5 views
3

У меня есть несколько ключей для twitter, которые я использую, чтобы получить подписчиков из списка ручек. Есть два способа сделать это, но у меня проблема с обоими. Первая:Получить твиттер-последователей с помощью tweepy и нескольких ключей API

try: 
    .... 
    for user in tweepy.Cursor(api.followers, screen_name=screenName).items(): 
    .... 
except tweepy.TweepError as e: 

    errorCode = e.message[0]['code'] 
     if errorCode == 88: 
      print "Rate limit exceeded." 
      rotateKeys() 

Проблема здесь в том, что каждый раз, когда я повернуть ключи, то цикл начинается с нуля и начинает получать последователь снова. Я пытался обойти эту проблему, но разделив для цикла:

try: 
    items = tweepy.Cursor(api.followers, screen_name=s).items() 

Я тогда Перебери их вручную с помощью next(items)

Однако вращающихся ключей API не работает, как первоначальный вызов был сделан с первым кодом API и всегда будет пытаться использовать его.

Мне нужен способ повернуть ключи и продолжить с предыдущего слева.

+0

Вы хотите сделать это в режиме реального времени или работать в пакетном режиме? В случае пакетной загрузки, как насчет выборки разных пользователей в разных контекстах/ключах приложения (возможно, с помощью отдельных потоков?) И спящих требуемых 15 минут в одном и том же контексте приложения, в то время как последователи для данного пользователя извлекаются? – Vishal

+0

Нет стандартного способа AFAIK. Вы можете реализовать кэширование результатов метода или обработать инициализацию курсора руками, сохраняя/вручную восстанавливая переменную 'self.current_page'. – alko

+0

Кэширование звучит интересно. Как сохранить текущую страницу/элемент, а затем повторно инициализировать из этого курсора? – Martyn

ответ

2

Вы можете получить курсор, который использовался, когда предел скорости произошел через переменную next_cursor на используемом итераторе. Когда вы создаете новый курсор с использованием нового экземпляра API, вы можете передать предыдущий курсор в качестве параметра:

current_cursor = cursor.iterator.next_cursor 
# re-create the cursor using the new api instance 
cursor = tweepy.Cursor(api.followers, screen_name=s, cursor=current_cursor) 
+0

К сожалению, я получаю это сообщение: 'AttributeError: объект ItemIterator 'не имеет атрибута' iterator'' – saitam

+0

@saitam Правильное имя: ** cursor.page_iterator.next_cursor * * и работает, как сказал Аарон. – Nucklear

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