Избегайте отключения потока Twitter

#python #twitter #oauth #tweepy #twitter-streaming-api

#python #Twitter #oauth #tweepy #twitter-streaming-api

Вопрос:

У меня есть скрипт на Python, который передает твиты в CSV-файл. Я предоставил параметр времени выполнения 46800 секунд, который равен 13 часам, это определяет, как долго твиты должны передаваться в этот 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:

Это сработало для моего упражнения по потоковой передаче.

 # 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