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.
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).
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.
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).
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.
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
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],)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With