使用tweepy流用户时间线和过滤推文
我几天前开始研究tweepy这个工具,成功地实时获取了带有关键词的推文。现在我想不仅获取过滤后的推文,还想获取几个特定Twitter用户的推文。请问用tweepy可以做到吗?看起来stream.userstream()只能获取我自己Twitter账号的实时推文,而不能获取其他特定用户的推文,对吧?我还用我为了测试而创建的另一个Twitter账号试过,但完全没有获取到我发的新推文。
如果可以的话,我能同时使用stream.userstream()和stream.filter()来下载推文吗?如果不行,那我该如何同时获取过滤后的推文和特定用户的实时推文呢?
顺便说一下,我用了@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()
非常感谢你的帮助!谢谢。
3 个回答
2
你可以按照下面的代码示例,实时获取某个用户的推文。
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],)
2
如果你想要查看某个特定用户的动态:
1) 你可以通过这个网站找到他们的ID,或者在网上搜索如何找到Twitter ID。
2) 然后使用下面的代码:
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