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

Dan*_*iel 4 api twitter streaming tweepy

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

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

先感谢您.

fou*_*ing 13

只需查看推文的文本,看看它是否以"RT"开头,实际上并不是一个强大的解决方案.你需要决定你将转推什么,因为它不是很明确.Twitter API 文档解释说,推文文本中带有"RT"的推文并非正式转推.

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

如果您按照"官方"定义进行操作,那么您希望过滤推文,如果它们具有True转发属性的值,就像这样:

if not tweet['retweeted']:
    # do something with standard tweets
Run Code Online (Sandbox Code Playgroud)

如果你想要更具包容性,包括'非官方'重新推文,你应该检查子串"RT @"的字符串,而不仅仅是它是否以'RT'开头,因为前者更清洁,更快,消除更多边缘情况,推文以"RT"开头,但不是转推(有很多数据,我确信这是可能的).这是一些代码:

if not tweet['retweeted'] and 'RT @' not in tweet['text']:
    # do something with standard tweets
Run Code Online (Sandbox Code Playgroud)

后一个条件采用你的集合中的推文子集,这些推文是常规推文,并且与你的集合中的推文子集交叉,这些推文在推文文本中没有"RT @",留下了推文,这些推文可能是普通的推文.


Zda*_*daR 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
Run Code Online (Sandbox Code Playgroud)