tweepy的stream.filter()方法无法正常工作

1 投票
2 回答
5862 浏览
提问于 2025-04-15 21:38

我在使用tweepy这个API的时候遇到了一些问题。

我想写一个小程序,能够获取一个用户(或者多个用户)的推文流,但先从一个用户开始就可以了 ;-)

现在我的代码是这样的:

    def main():
       config = ConfigParser.ConfigParser()
       config.read('twitter.cfg')

       username = config.get('Twitter', 'username')
       password = config.get('Twitter', 'password') 
           listener = StreamWatcherListener()

       stream = tweepy.Stream(username, password, listener, timeout=None)
       stream.filter('132897940')

在StreamWatcherListener里,我有一个叫“on_status”的方法,它会在每次收到新推文时打印出推文的内容(当我用stream.sample()而不是stream.filter()时,一切都正常)。

我用的ID是我的测试账号,所以每当我发推文时,控制台应该会有一些反应……但什么都没有发生。

当我在终端里尝试

curl -d @following http://stream.twitter.com/1/statuses/filter.json -uAnyTwitterUser:Password

根据我在Twitter API中找到的信息,一切都运行得很好。

所以可能是我对filter()方法的使用不对?

有什么建议吗?

-andy

2 个回答

0
class TweetListener(StreamListener):
    def on_status(self,status):           
        print "TWEET ARRIVED!!!"
        print "Tweet Text : %s" % status.text
        print "Author's name : %s" % status.author.screen_name
        print "Time of creation : %s" % status.created_at
        print "Source of Tweet : %s" % status.source    
        time.sleep(10)       
        return True

    def on_error(self, status):        
       print status
       if status == 420:
            print "Too soon reconnected, Exiting!!"
            return False
        sys.exit()

def search_tweets():
    twitterStream = Stream(connect().auth, TweetListener())        
    twitterStream.filter(track=['Cricket','Maths','Army','Sports'],languages = ["en"],async=True)

在这里,我用了一个叫做async的参数,这样每个数据流就会在不同的线程上运行。想了解更多信息,可以参考这个链接

8

我自己搞明白了

stream.filter() 这个方法需要一个数组

所以我不得不写了一些代码

stream.filter(['1234567'])

好了,问题解决了

撰写回答