#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