Tweepy streaming API: filtering on user

gogurt picture gogurt · Feb 25, 2015 · Viewed 7.6k times · Source

I'm trying to simply connect to the Twitter streaming API using tweepy (and python 3), and stream all tweets from a given single user.

I was under the impression this is possible, so I have the following simple code to do this:

from tweepy import StreamListener
from tweepy import Stream
import tweepy

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)

class StdOutListener(StreamListener):

    def on_data(self, data):
        # process stream data here
        print(data)

    def on_error(self, status):
        print(status)

if __name__ == '__main__':
    listener = StdOutListener()
    twitterStream = Stream(auth, listener)
    twitterStream.filter(follow=['575930104'])

When I run this from the command line, I just get back a bunch of 406 codes from Twitter. Is there something very obviously wrong with how I am trying to use tweepy, or is the "follow" parameter not designed to do what I think it does?

EDIT: I've also posted this on the tweepy discussion boards, FYI.

Answer

Martijn Pieters picture Martijn Pieters · Feb 27, 2015

I was able to reproduce your problem on Python 3.4 using Tweepy 3.2.0. Upgrading to 3.3.0 solved the problem:

$ bin/pip install -U tweepy==3.2.0
[...]
Successfully installed tweepy requests-oauthlib six requests
Cleaning up...
$ bin/python test.py 
406
^CTraceback (most recent call last):
[...]
KeyboardInterrupt
$ bin/pip install -U tweepy==3.3.0
[...]
Successfully installed tweepy requests requests-oauthlib six
Cleaning up...
$ bin/python test.py
{"created_at":"Fri Feb 27 14:02:02 +0000 2015","id":571309283217768448,"id_str":"571309283217768448",
[...]

The Tweepy 3.3.0 Changelog mentions several streaming improvements, although I did not see the 'freezing' problem they mention.