Abi*_*bin 7 python twitter tweepy
我试图使用Stream.filter()方法将Twitter数据流式传输一段时间,比如5分钟.我将检索到的推文存储在JSON文件中.问题是我无法从程序中停止filter()方法.我需要手动停止执行.我尝试使用时间包根据系统时间停止数据.我能够停止向JSON文件编写推文,但是流方法仍在继续,但它无法继续下一行代码.我正在使用IPython笔记本来编写和执行代码.这是代码:
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
Run Code Online (Sandbox Code Playgroud)
这些链接类似,但我没有直接回答我的问题
在持续时间参数(#lines,seconds,#Tweets等)之后停止Tweepy蒸汽
我使用此链接作为参考, http://stats.seandolinar.com/collecting-twitter-data-using-a-python-stream-listener/
ypr*_*rez 23
为了关闭流需要退货False的on_data(),或on_status().
因为tweepy.Stream()运行while循环本身,所以不需要while循环on_data().
初始化时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'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8345 次 |
| 最近记录: |