当使用python tweepy
库从twitter的流媒体API中提取推文时,是否可以排除转推?
例如,如果我只想要特定用户ex:twitterStream.filter(follow = ["20264932"])
发布的推文,但这会返回转推,我想排除它们。我怎样才能做到这一点?
提前谢谢。
答案 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