2014-01-10 7 views
4

Twitter возвращает только 100 твитов на «страницу» при возврате результатов поиска по API. Они предоставляют max_id и since_id в возвращаемом search_metadata, которые могут использоваться в качестве параметров для получения ранних/поздних твитов.Как вернуть более 100 результатов поиска в Twitter с помощью Twython?

Twython 3.1.2 документации предполагает, что эта модель является «старым способом» для поиска:

results = twitter.search(q="xbox",count=423,max_id=421482533256044543) 
for tweet in results['statuses']: 
    ... do something 

и что это «new way»:

results = twitter.cursor(t.search,q='xbox',count=375) 
for tweet in results: 
    ... do something 

Когда я последний , он, кажется, бесконечно перебирает те же результаты поиска. Я пытаюсь подтолкнуть их к CSV-файлу, но он подталкивает тонну дубликатов.

Каков правильный способ поиска большого количества твитов с помощью Twython и повторение множества уникальных результатов?

Редактировать: Еще одна проблема заключается в том, что когда я пытаюсь выполнить итерацию с генератором (for tweet in results:), он циклически повторяется, не останавливаясь. Ah - это ошибка ... https://github.com/ryanmcgrath/twython/issues/300

ответ

0

Согласно official Twitter API documentation.

Граф опциональный

Количество твитов, чтобы вернуться на страницу, до максимум 100

+0

Я знаю об этом. Как мне вернуть, например, 425 результатов поиска с помощью Twython? Мое понимание заключалось в том, что формат '.cursor' в Twython будет перебирать страницы результатов поиска с помощью' max_id', чтобы избежать дублирования, но это, похоже, не происходит. – Clay

0

Вам нужно сделать повторные вызовы метода питона. Тем не менее, нет никакой гарантии, что это будет следующий N, или если твиты действительно придут, это может пропустить некоторые.

Если вы хотите, чтобы все твиты во временном интервале вы могли использовать потоковое api: https://dev.twitter.com/docs/streaming-apis и объединить это с модулем oauth2.

How can I consume tweets from Twitter's streaming api and store them in mongodb

python-twitter streaming api support/example

Отказ от ответственности: я не на самом деле пытались это

+0

Фактически, согласно документу Twitter [работа с временными рамками] (https://dev.twitter.com/docs/working-with-timelines), вы можете контролировать то, что получаете при поиске.Конечно, преимущество поиска заключается в том, что вы мгновенно можете вернуть большое количество твитов для поискового запроса с низким объемом (для сбора через поток может потребоваться несколько часов). Мне было просто любопытно, как использовать Twython для этого. – Clay

1

У меня была такая же проблема, но мне кажется, что вы должны просто перебрать сроки пользователя в пакетном режиме, используя max_id параметр , Пакеты должны быть 100 в соответствии с ответом Теренции (но на самом деле, для user_timeline 200 - максимальное количество), и просто установите max_id на последний id в предыдущем наборе возвращенных твитов минус один (поскольку max_id включен). Вот код:

''' 
Get all tweets from a given user. 
Batch size of 200 is the max for user_timeline. 
''' 
from twython import Twython, TwythonError 
tweets = [] 
# Requires Authentication as of Twitter API v1.1 
twitter = Twython(PUT YOUR TWITTER KEYS HERE!) 
try: 
    user_timeline = twitter.get_user_timeline(screen_name='eugenebann',count=200) 
except TwythonError as e: 
    print e 
print len(user_timeline) 
for tweet in user_timeline: 
    # Add whatever you want from the tweet, here we just add the text 
    tweets.append(tweet['text']) 
# Count could be less than 200, see: 
# https://dev.twitter.com/discussions/7513 
while len(user_timeline) != 0: 
    try: 
     user_timeline = twitter.get_user_timeline(screen_name='eugenebann',count=200,max_id=user_timeline[len(user_timeline)-1]['id']-1) 
    except TwythonError as e: 
     print e 
    print len(user_timeline) 
    for tweet in user_timeline: 
     # Add whatever you want from the tweet, here we just add the text 
     tweets.append(tweet['text']) 
# Number of tweets the user has made 
print len(tweets) 
+2

Одна из проблем заключается в том, что новый подход «курсор», рекомендованный в документации, бесконечно проходит через результаты и никогда не использует 'max_id' для продолжения поиска. – Clay

+0

@ Клей, и почти четыре года спустя это все еще кажется правдой. Гах. – alttag

0

В качестве решения проблемы возвращения 100 твитов для поискового запроса с использованием Twython, вот ссылка показывает, как это можно сделать с помощью «старому»:

Twython search API with next_results

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

  • Нет связанных вопросов^_^