Проблема с ограничением скорости Twython

Мне интересно, как я могу автоматизировать свою программу для получения твитов с максимальной скоростью 180 запросов за 15 минут, что эквивалентно максимальному количеству 100 запросов на общую сумму 18 000 твитов. Я создаю эту программу для самостоятельного исследования в школе.

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

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

import logging
import time
import csv
import twython
import json

app_key = ""
app_secret = ""
oauth_token = ""
oauth_token_secret = ""

twitter = twython.Twython(app_key, app_secret, oauth_token, oauth_token_secret)

tweets = []
MAX_ATTEMPTS = 1000000
# Max Number of tweets per 15 minutes
COUNT_OF_TWEETS_TO_BE_FETCHED = 18000 

for i in range(0,MAX_ATTEMPTS):

    if(COUNT_OF_TWEETS_TO_BE_FETCHED < len(tweets)):
    break

    if(0 == i):
        results = twitter.search(q="$AAPL",count='100',lang='en',)

    else:
        results = twitter.search(q="$AAPL",include_entities='true',max_id=next_max_id)

    for result in results['statuses']:
        print result

        with open('tweets.txt', 'a') as outfile:
             json.dump(result, outfile, sort_keys = True, indent = 4)

    try:
        next_results_url_params = results['search_metadata']['next_results']
        next_max_id = next_results_url_params.split('max_id=')[1].split('&')[0]
    except:

        break

person Justin6493    schedule 19.02.2015    source источник


Ответы (1)


Вы должны использовать API потоковой передачи Twitter.

Это позволит вам получать информацию о вашем поиске почти в реальном времени. Вы можете записать эти твиты в файл так же быстро, как они приходят.

Используя параметр отслеживания, вы сможете получать только те твиты, которые вы интересует.

Вам нужно будет использовать Twython Streamer, и ваш код будет выглядеть примерно так. нравится:

from twython import TwythonStreamer

class MyStreamer(TwythonStreamer):
    def on_success(self, data):
        if 'text' in data:
            print data['text'].encode('utf-8')

    def on_error(self, status_code, data):
        print status_code

stream = MyStreamer(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
stream.statuses.filter(track='$AAPL')
person Terence Eden    schedule 20.02.2015
comment
Спасибо за код. У меня уже есть запрограммированный стример. Что я хочу сделать, так это вернуться на 7-9 дней, которые позволяет Twitter REST API, и получить твиты, в которых упоминается запрос, или, в данном случае, $AAPL. - person Justin6493; 21.02.2015