【问题标题】:Exclude retweets from twitter streaming api using tweepy使用 tweepy 从 twitter 流 api 中排除转推
【发布时间】:2016-02-12 16:43:29
【问题描述】:

当使用 python tweepy 库从 twitter 的流 API 中提取推文时,是否可以排除转发?

例如,如果我只想要特定用户前发布的推文:twitterStream.filter(follow = ["20264932"]) 但这会返回转推,我想排除它们。我怎样才能做到这一点?

提前谢谢你。

【问题讨论】:

    标签: api twitter streaming tweepy


    【解决方案1】:

    仅仅检查推文的文本以查看它是否以“RT”开头并不是一个真正可靠的解决方案。您需要决定您将考虑转推什么,因为它并不十分明确。 Twitter API docs 解释说,推文中带有“RT”的推文不是正式转推。

    有时人们在推文的开头输入 RT 以表明他们正在重新发布其他人的内容。这不是官方 Twitter 命令或功能,但表示他们引用了其他用户的推文。

    如果您使用“官方”定义,那么如果推文的转推属性具有 True 值,则您希望过滤掉推文,如下所示:

    if not tweet['retweeted']:
        # do something with standard tweets
    

    如果你想更具包容性,包括“非官方”转发,你应该检查字符串中的子字符串“RT @”,而不仅仅是它是否以“RT”开头,因为前者更干净、更快并消除了更多以“RT”开头的推文但不是转推的极端情况(那里有很多数据,我相信这是可能的)。下面是一些代码:

    if not tweet['retweeted'] and 'RT @' not in tweet['text']:
        # do something with standard tweets
    

    后一个条件获取集合中常规推文的推文子集,并与推文文本中没有“RT @”的集合中推文子集进行交集,从而为您留下推文。定期推文。

    【讨论】:

      【解决方案2】:

      是的,有一些可能的方法,其中之一是检查推文的文本是否以RT开头,为此我们可以轻松地在字符串上使用.startswith()方法,为此您需要更改您的流媒体类中on_data() 方法的代码,可以这样完成:

      class TwitterStreamListener(tweepy.StreamListener):
          def on_data(self, data):
              # Twitter returns data in JSON format - we need to decode it first
              decoded = json.loads(data)
              if  not decoded[`text`].startswith('RT'):
                  #Do processing here 
                  print decoded['text'].encode('ascii', 'ignore')
              return True
      

      【讨论】:

        猜你喜欢
        • 2016-11-07
        • 2020-12-12
        • 1970-01-01
        • 2016-12-16
        • 2015-12-31
        • 2014-03-12
        • 1970-01-01
        • 2020-10-12
        • 2015-03-06
        相关资源
        最近更新 更多