gpt4 book ai didi

python - 一分钟后无法停止串流播放

转载 作者:行者123 更新时间:2023-12-04 09:14:00 26 4
gpt4 key购买 nike

我正在尝试使用Stream.filter()方法流推特数据持续5分钟。我将检索到的推文存储在JSON文件中。问题是我无法从程序中停止filter()方法。我需要手动停止执行。我尝试使用时间包根据系统时间停止数据。我能够停止将推文写入JSON文件,但stream方法仍在进行,但无法继续进行下一行代码。
我正在使用IPython Notebook编写和执行代码。
这是代码:

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)

from tweepy import Stream
from tweepy.streaming import StreamListener

class MyListener(StreamListener):

def __init__(self, start_time, time_limit=60):
self.time = start_time
self.limit = time_limit

def on_data(self, data):
while (time.time() - self.time) < self.limit:
try:
saveFile = open('abcd.json', 'a')
saveFile.write(data)
saveFile.write('\n')
saveFile.close()
return True
except BaseException as e:
print 'failed ondata,', str(e)
time.sleep(5)
return True

def on_status(self, status):
if (time.time() - self.time) >= self.limit:
print 'time is over'
return false

def on_error(self, status):
if (time.time() - self.time) >= self.limit:
print 'time is over'
return false
else:
print(status)
return True

start_time = time.time()
stream_data = Stream(auth, MyListener(start_time,20))
stream_data.filter(track=['name1','name2',...list ...,'name n'])#list of the strings I want to track

这些链接是相似的,但我没有直接回答我的问题

Tweepy: Stream data for X minutes?

Stopping Tweepy steam after a duration parameter (# lines, seconds, #Tweets, etc)

Tweepy Streaming - Stop collecting tweets at x amount

我使用此链接作为引用,
http://stats.seandolinar.com/collecting-twitter-data-using-a-python-stream-listener/

最佳答案

  • 为了关闭流,您需要从Falseon_data()返回on_status()
  • 因为tweepy.Stream()本身运行while循环,所以不需要on_data()中的while循环。
  • 初始化MyListener时,您没有调用父类的__init__方法,因此未正确初始化。

  • 因此,对于您要尝试执行的操作,代码应类似于以下内容:
    class MyStreamListener(tweepy.StreamListener):
    def __init__(self, time_limit=60):
    self.start_time = time.time()
    self.limit = time_limit
    self.saveFile = open('abcd.json', 'a')
    super(MyStreamListener, self).__init__()

    def on_data(self, data):
    if (time.time() - self.start_time) < self.limit:
    self.saveFile.write(data)
    self.saveFile.write('\n')
    return True
    else:
    self.saveFile.close()
    return False

    myStream = tweepy.Stream(auth=api.auth, listener=MyStreamListener(time_limit=20))
    myStream.filter(track=['test'])

    关于python - 一分钟后无法停止串流播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33498975/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com