使用tweepy从twitter流式api中排除转发

时间:2015-04-17 03:09:31

标签: api twitter streaming tweepy

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

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

提前谢谢。

2 个答案:

答案 0 :(得分:13)

只是查看推文的文本,看看它是否以“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 @”,从而留下据称的推文常规推文。

答案 1 :(得分:3)

是的,有可能这样做,其中一种方法是检查推文的文本是否以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