Twython для извлечения твитов

Я использую Twython twitter API для извлечения твитов. Но я получаю только 100 твитов. Я хочу извлечь твиты с 10 декабря 2013 года по 10 марта 2014 года. Я упомянул count=1000 в функции поиска.

Ограничение скорости составляет 100, я понимаю. Есть ли способ получить эти твиты между заданным периодом времени без ограничения скорости.

 from twython import Twython
 import csv
 from dateutil import parser
 from dateutil.parser import parse as parse_date
 import datetime
 from datetime import datetime
 import pytz

 utc=pytz.UTC

 APP_KEY = 'xxxxxxxxxxx'    
 APP_SECRET = 'xxxxxxxxxxx'
 OAUTH_TOKEN = 'xxxxxxxx'  # Access Token here
 OAUTH_TOKEN_SECRET = 'xxxxxxxxxxx'  

 t = Twython(app_key=APP_KEY, app_secret=APP_SECRET, oauth_token=OAUTH_TOKEN,      oauth_token_secret=OAUTH_TOKEN_SECRET)

 search=t.search(q='AAPL', count="1000",since='2013-12-10')
 tweets= search['statuses']


 for tweet in tweets:
     do something

person blackmamba    schedule 17.03.2014    source источник


Ответы (2)


Есть ограничение на доступ к твитам через Search API. Ознакомьтесь с этой документацией.

Search API обычно показывает твиты только за последнюю неделю.

Поскольку вы пытаетесь получить твиты за последние 3/4 месяца, вы не получаете старые твиты.

person Yuva Raj    schedule 17.03.2014
comment
Есть ли другой выход? - person blackmamba; 17.03.2014

В Twython API поиска ограничен, но я добился успеха, просто используя get_user_timeline.

Я решил аналогичную проблему, когда я хотел получить последние X твитов от пользователя.

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

В вашем случае вам просто нужно изменить цикл while, чтобы он остановился на каком-то условии для 'created_at'. Что-то вроде этого может работать:

# Grab the first 200 tweets
last_id = 0
full_timeline = 200
result = t.get_user_timeline(screen_name='NAME', count = full_timeline)

for tweet in result:
    print(tweet['text'], tweet['created_at'])
    last_id = tweet['id']

# Update full timeline to see how many tweets were actually received
# Full timeline will be less than 200 if we read all the users tweets
full_timeline = len(result)

# 199 cause result[1:] is used to trim duplicated results cause of max_id
while full_timeline >= 199:
    result = t.get_user_timeline(screen_name='NAME', count = 200, max_id = last_id)

    # Since max_id is inclusive with its bound, it will repeat the same tweet we last read, so trim out that tweet
    result = result[1:]
    for tweet in result:
        print(tweet['text'], tweet['created_at'])
        last_id = tweet['id']

    # Update full_timeline to keep loop going if there are leftover teweets
    full_timeline = len(result)
person C.Baron    schedule 23.04.2019