【发布时间】:2021-10-09 14:31:28
【问题描述】:
我有一个 Python 代码,它通过流 API 提取 Twitter 数据。我想每天使用单独的文件,所以我想让脚本运行 24 小时,然后杀死它并重新启动它,因为重新启动程序文件的名称会改变。
如何确保脚本在 00:00 停止并立即重新启动? 代码可以在下面找到。如果您对我如何每天创建一个新的文本文件有任何其他想法,那就更好了。
import tweepy
import datetime
key_words = ["xx"]
twitter_data_title = "".join([xx, "_", date_today, ".txt"])
class TwitterStreamer():
def __init__(self):
pass
def stream_tweets(self, twitter_data_title, key_words):
listener = StreamListener(twitter_data_title)
auth = tweepy.OAuthHandler(api_key, api_secret_key)
auth.set_access_token(access_token, access_secret_token)
stream = tweepy.Stream(auth, listener)
stream.filter(track=key_words)
class StreamListener(tweepy.StreamListener):
def __init__(self, twitter_data_title):
self.fetched_tweets_filename = twitter_data_title
def on_data(self, data):
try:
print(data)
with open(self.fetched_tweets_filename, 'a') as tf:
tf.write(data)
return True
except BaseException as e:
print("Error on_data %s" % str(e))
return True
def on_exception(self, exception):
print('exception', exception)
stream_tweets(twitter_data_title, key_words)
def on_error(self, status):
print(status)
def stream_tweets(twitter_data_title, key_words):
listener = StreamListener(twitter_data_title)
auth = tweepy.OAuthHandler(api_key, api_secret_key)
auth.set_access_token(access_token, access_secret_token)
stream = tweepy.Stream(auth, listener)
stream.filter(track=key_words)
if __name__ == '__main__':
twitter_streamer = TwitterStreamer()
twitter_streamer.stream_tweets(twitter_data_title, key_words)
【问题讨论】:
-
Python没有更好的内存释放方法,所以最好使用Shell脚本cronjobs来触发和杀死python。
-
Cronjobs / 计划任务取决于您的操作系统。理想情况下使用日志记录模块来设置日志并在重新启动时只需添加
_today日期作为文件名 -
使用
sys.exit(0)退出您的脚本。
标签: python python-3.x twitterapi-python