Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using tweepy to stream users' timeline and filtered tweets

I started exploring tweepy a couple days ago and was able to stream filtered (with keywords) tweets at real time. Now I want to stream not only filtered tweets but also tweets from several specific twitter users. Is this possible by using tweepy? It seems stream.userstream() only fetches real-time tweets from my twitter account NOT from other specific users, right? I have tried it with another twitter account that I created for testing but it does not fetch any new tweets that I tweeted, at all.

But if it works, can I download tweets using stream.userstream() and stream.filter() at the same time? If not then how can I get both filtered tweets and users' real time tweets?

Btw I used the example code from @alexhanna.

api      = tweepy.API(auth)

def main( mode = 1 ):
follow = []
track  = ['Houston Rockets','Lakers','Chicago Bulls']

listen = SListener(api, 'test')
stream = tweepy.Stream(auth, listen)

try: 
    stream.userstream('NBA','ESPN')
    stream.filter(track = track, follow = follow)

except:
    print "error!"
    stream.disconnect()

Would really appreciate your help! Thanks.

like image 808
Blue482 Avatar asked Mar 26 '14 23:03

Blue482


People also ask

How can I get more than 100 tweets on tweepy?

If you need more than 100 Tweets, you have to use the paginator method and specify the limit i.e. the total number of Tweets that you want. Replace limit=1000 with the maximum number of tweets you want. Replace the limit=1000 with the maximum number of tweets you want (gist).

How do you use the tweepy Paginator?

The tweepy. Paginator is very easy to use. Basically, you give it the method and the arguments that you want to use, and you then just have to iterate through it. And if you want as much tweets as possible, you can remove the limit.

Does tweepy work with v2?

If you want to retweet a Tweet with Tweepy using the Twitter API v2, you will need to make sure that you have your consumer key and consumer secret, along with your access token and access token secret, that are created with Read and Write permissions (similar to the previous example).


3 Answers

Try using the .filter(follow="") without .userstream() beforehand. Userstream is only the tweets from the account associated with your application. Here is a (very well-annotated) example.

If you want to get the user's tweets and filtered tweets at the same time you need to make two separate Stream() objects.

Edit: the page I linked to is now dead. The Internet Archive link should remain active indefinitely, but all the relevant information to solving the user's question is already contained within this answer. I have not copied and pasted the example from the linked page as I am not the author of it, and because it is only an example that illustrates the proper use of a Stream listener.

like image 63
Luigi Avatar answered Oct 01 '22 19:10

Luigi


If you want to stream specific user time-line:

1) Find his/her ID with this website or google for How to find twitter ID.

2) Use following code:

    from tweepy import OAuthHandler
    from tweepy import Stream
    from tweepy import StreamListener

    listener = StreamListener()
    auth = OAuthHandler(config.API_KEY, config.API_SECRET)
    auth.set_access_token(config.ACCESS_TOKEN, config.ACCESS_TOKEN_SECRET)
    stream = Stream(auth, listener)
    stream.filter(follow=['3511430425']) # user ID for random account
like image 23
Amir Avatar answered Oct 01 '22 19:10

Amir


You can fetch a particular users tweets in real time as per the below code sample.

import tweepy
from tweepy import OAuthHandler, Stream, StreamListener

username="maheshmnj" # Add your target users username here
userId=12345678 # Add target users userId 

class TweetListener(StreamListener):
    """ A listener handles tweets that are received in real time.  """

    def on_data(self, status):
        try:
            data = json.loads(status)
            user = data['user']['screen_name']
            tweet_id = data['id']
            if(user == f'{username}'):
                print(f'user tweeted, his tweetId=@{tweet_id} do something with the Tweet'); 
            else:
                print('found user',user)
        except Exception as e:
            print(e)
            print('failed to retweet')
        return True

    def on_error(self, status_code):
        if status_code == 420:
            # returning False in on_data disconnects the stream
            return False
        print(status_code)

if __name__ == '__main__':
    print(f'bot started listening to {username}')
    listen = TweetListener()
    auth = tweepy.OAuthHandler(APP_KEY, APP_SECRET)
    auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
    api = tweepy.API(auth)
    stream = Stream(auth, listen)
    stream.filter(follow=[userId],)
like image 43
Mahesh Jamdade Avatar answered Oct 01 '22 20:10

Mahesh Jamdade