使用tweepy从twitter流api中排除转推

8
当使用Python的`tweepy`库从Twitter的流API中拉取推文时,是否可以排除转发?
例如,如果我只想获取特定用户发布的推文,如:`twitterStream.filter(follow = ["20264932"])`但是这会返回转发的推文,我想要排除它们。我该怎么做?
提前感谢您。
2个回答

17

仅检查推文的文本是否以“RT”开头并不是一个很健壮的解决方案。你需要对什么算作转推做出决策,因为它并不是非常清晰明确的。Twitter API 文档 解释说,在推文文本中包含“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 @”的子集进行交集运算,从而留下了据说是普通推文的推文。


4

是的,有可能实现这个功能的方法。其中之一是检查推文的文本是否以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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接