我有以下代码来制作流监听器并从Twitter API获取推文。
class MyStreamListener(tweepy.StreamListener):
#class constructor
def __init__(self,api=None):
super(MyStreamListener,self).__init__()
#creates class variables and instantiates to file and number
self.num_tweets = 0
self.file = open("tweets.txt",'w')
#function to collect tweets and add to file
def on_status (self,status):
tweet = status._json
print("Tweet: " + tweet)
print("STATUS: " + status.text)
self.file.write(json.dumps(tweet)+'\n')
print(status)
self.num_tweets+=1
if self.num_tweets < 100:
return True
else:
return False
self.file.close()
l = MyStreamListener()
stream = tweepy.Stream(auth,l)
stream.filter(track=[])
虽然此代码没有错误,但程序不会打印任何内容,因为行中的投影输出
print("Tweet: " + tweet)
print("STATUS: " + status.text)
我试过调整行
stream.filter(track=[])
包括
stream.filter(track=['trump','clinton'])
但我仍然没有收到任何输出。
帮助解决为什么会出现此问题或者可能的解决方案。
编辑:未来的调试显示on_status函数在任何时候都没有运行,尽管tweepy docs.
中显示了这一点答案 0 :(得分:0)
如果您想使用Tweepy的StreamListener仅通过像特朗普或克林顿这样的关键字来过滤推文,我认为您最好改为覆盖on_data
方法。您应该收到类似于您期待的数据。
我仔细检查了这一点,但似乎他们的docs已经关闭了?
答案 1 :(得分:0)
为什么不使用json.loads()
函数获取所有数据?这提供了一种更好的格式:
def on_status (self, status):
all_data = json.loads(status)
tweet = all_data['text']
print("Tweet: " + tweet)
print("STATUS: " + all_data + '\n')
self.file.write(tweet) + '\n')
现在,您可以在all_data
中获得字典格式的状态,以便查找推文和所有其他变量。
答案 2 :(得分:0)
问题出现在错误的访问密钥中,错误代码由于某种原因没有打印。我通过重写类并使用新密钥创建新的流应用程序解决了这个问题。