从 twitter 流中排除回复 - tweepy

Posted

技术标签:

【中文标题】从 twitter 流中排除回复 - tweepy【英文标题】:Exclude replies from twitter streaming - tweepy 【发布时间】:2020-12-12 00:12:23 【问题描述】:

我正在使用 tweepy 从 twitter 的流媒体 API 中提取推文。然后我用它来自动回复那个用户。

例如,如果我想从中提取实时推文,然后回复唐纳德特朗普,我会使用:

import tweepy
from tweepy import Stream
from tweepy.streaming import StreamListener

import json

class StdOutListener(StreamListener):
    def on_data(self, data):
        clean_data = json.loads(data)
        tweetId = clean_data["id"]
        tweet = "YOUR MESSAGE HERE"
        respondToTweet(tweet, tweetId)

def setUpAuth():
    auth = tweepy.OAuthHandler("consumer_token", "consumer_secret")
    auth.set_access_token("access_token", "Access_token_secret")
    api = tweepy.API(auth)
    return api, auth

def followStream():
    api, auth = setUpAuth()
    listener = StdOutListener()
    stream = Stream(auth, listener)
    stream.filter(follow=["25073877"], is_async=True)

def respondToTweet(tweet, tweetId):
    api, auth = setUpAuth()
    api.update_status(tweet, in_reply_to_status_id=tweetId, auto_populate_reply_metadata=True)

if __name__ == "__main__":
    followStream()

如果你运行我上面的代码,你会注意到它确实回复了唐纳德·特朗普,但也回复了他推文的所有新回复

我需要添加什么才能从流中排除对他的推文的回复?

提前感谢您的帮助。

【问题讨论】:

我假设你已经阅读了automation rules for using the Twitter API 是的 - 我想解决这个问题的原因是它会生成大量被视为垃圾邮件的回复。 【参考方案1】: 您可以添加一个条件以仅直接从follow id 回复推文。 这应该只允许响应所关注的帐户。 所以在这种情况下,只有当被关注的帐户回复时,才会回复tweetId。 对于多个用户,使用in 测试遏制: if user_id in [25073877, id2, id3,...]:
class StdOutListener(StreamListener):
    def on_data(self, data):
        clean_data = json.loads(data)
        tweetId = clean_data["id"]
        user_id = clean_data['user']['id']
        tweet = 'Trying to figure out this code to answer a question on SO, just ignore this'
        if user_id == 25073877:
            print('Tweeting a reply now')  # optional
            respondToTweet(tweet, tweetId)

【讨论】:

以上是关于从 twitter 流中排除回复 - tweepy的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Twitter API 完整存档搜索中排除转发和回复

使用 Tweepy 从用户 Twitter 关注者那里获取用户 ID 列表

在 Tweepy Streaming API 中包含过滤条件

使用 tweepy 获取用户整个 Twitter 时间线

如何在搜索 api 中排除转发和回复?

Tweepy1——抓取Twitter数据