避免Twitter流断开连接

时间:2019-03-13 18:51:48

标签: python twitter oauth tweepy twitter-streaming-api

我有一个python脚本,可将推文流式传输为csv文件。我提供了46800秒的运行时参数,该参数等于13小时,该参数指示将tweet流式传输到该CSV的时间。在指定的持续时间(直到昨天)之前,它运行良好,但是昨天脚本仅运行7.5小时,此后便停止流式传输。我相信,在一段时间内我一直没有发送有关该主题的推文,因此断开了连接。因此,即使以后人们开始在有关该主题的推文中,该连接也没有得到重新建立,因此脚本也没有将这些推文流式传输到csv文件。因此,我不得不在另一个实例中重新启动脚本,并让脚本将推文流式传输到另一个csv文件中。同样今天,我遇到了类似的问题,流运行了6个小时后就断开了连接,因此我不得不重新启动。

但是我不确定是否是这种情况。以下是我使用的脚本,请告知可能发生的情况。如果是这样,那我该如何避免呢?

runtime = 46800

class listener(StreamListener):

def on_data(self,data):
 data1 = json.loads(data)
 time = data1["created_at"]
 tweet1 = BeautifulSoup(tweet, "lxml").get_text() 
 url = "https://twitter.com/{}/status/{}".format(data1["user"]["screen_name"], data1["id_str"])
 file = open('MARCH_DATA.csv', 'a')
 csv_writer = csv.writer(file)
 csv_writer.writerow([time, tweet1, url])
 file.close()

auth = OAuthHandler(consumer_key,consumer_secret) 
auth.set_access_token(access_token,access_token_secret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track=["MTA"], async = True)
time.sleep(runtime)
twitterStream.disconnect()

谢谢

1 个答案:

答案 0 :(得分:0)

这对我的流媒体练习很有用。

# the regular imports, as well as this:
from urllib3.exceptions import ProtocolError

auth = OAuthHandler(consumer_key,consumer_secret) 
auth.set_access_token(access_token,access_token_secret)
twitterStream = Stream(auth, listener())
while True:
        try:
            twitterStream.filter(track=["MTA"], async = True, stall_warnings=True)
        except (ProtocolError, AttributeError):
            continue