我想知道如何自动化我的程序以每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
答案 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')