Tweety StreamListener" def on_status"没有执行

时间:2018-03-06 03:53:26

标签: python tweepy

我有以下代码来制作流监听器并从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.

中显示了这一点

3 个答案:

答案 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)

问题出现在错误的访问密钥中,错误代码由于某种原因没有打印。我通过重写类并使用新密钥创建新的流应用程序解决了这个问题。