使用tweepy流用户时间线和过滤推文

9 投票
3 回答
14565 浏览
提问于 2025-04-18 00:04

我几天前开始研究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
5

试着使用 .filter(follow=""),而不是先用 .userstream()Userstream 只会获取与你的应用程序关联的账户的推文。这里有一个(注释很详细的)例子。

如果你想同时获取用户的推文和过滤后的推文,你需要创建两个不同的 Stream() 对象。

编辑: 我之前提到的页面现在已经无法访问了。互联网档案馆的链接应该会一直有效,但解决用户问题的所有相关信息已经包含在这个回答里。我没有复制和粘贴链接页面上的例子,因为我不是它的作者,而且那只是一个展示如何正确使用 Stream 监听器的例子。

撰写回答