Twython速率限制问题

时间:2015-02-19 17:32:25

标签: python api twitter tweets twython

我想知道如何自动化我的程序以每15分钟180个请求的最大速率获取推文,这相当于每个请求的最大数量为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

1 个答案:

答案 0 :(得分:0)

您应该使用Twitter's Streaming API

这样您就可以获得近乎实时的搜索Feed。您可以将这些推文尽可能快地写入文件。

使用track parameter,您只能收到您感兴趣的特定推文。

您需要使用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')