代码之家  ›  专栏  ›  技术社区  ›  jaguar

Tweepy StreamListener“def on\u status”未执行

  •  0
  • jaguar  · 技术社区  · 8 年前

    我有以下代码来创建流侦听器并从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\u status功能在任何时候都没有运行,尽管在 tweepy docs.

    3 回复  |  直到 8 年前
        1
  •  0
  •   lieblos    8 年前

    如果你想使用Tweepy的StreamListener通过特朗普或克林顿这样的关键词过滤推文,我认为你最好覆盖 on_data 方法。您应该会收到预期的数据。

    我想再检查一下,但看起来 docs 都坏了?

        2
  •  0
  •   Oliver    8 年前

    你为什么不使用 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 您可以访问它来查找推特和所有其他变量。

        3
  •  0
  •   jaguar    8 年前

    问题似乎出在不正确的访问密钥上,错误代码由于某种原因没有打印出来。我通过重写类并使用新键创建一个新的流应用程序来解决这个问题。