Tweepy - 排除转推

Posted

技术标签:

【中文标题】Tweepy - 排除转推【英文标题】:Tweepy - Exclude Retweets 【发布时间】:2016-12-16 18:23:22 【问题描述】:

最终目标是使用 tweepy api 搜索来关注主题(即 docker)并排除转发。我查看了其他提到不包括转发的线程,但它们完全适用。我试图将我学到的东西合并到下面的代码中,但我相信“如果不是”这段代码是在错误的地方。任何帮助是极大的赞赏。

#!/usr/bin/python
import tweepy
import csv #Import csv
import os

# Consumer keys and access tokens, used for OAuth
consumer_key = 'MINE'
consumer_secret = 'MINE'
access_token = 'MINE'
access_token_secret = 'MINE'

# OAuth process, using the keys and tokens
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)


api = tweepy.API(auth)
# Open/Create a file to append data
csvFile = open('docker1.csv', 'a')
#Use csv Writer
csvWriter = csv.writer(csvFile)


ids = set()
for tweet in tweepy.Cursor(api.search, 
                    q="docker", 
                    Since="2016-08-09", 
                    #until="2014-02-15", 
                    lang="en").items(5000000):
if not tweet['retweeted'] and 'RT @' not in tweet['text']:
    #Write a row to the csv file/ I use encode utf-8
    csvWriter.writerow([tweet.created_at, tweet.text.encode('utf-8'), tweet.favorite_count, tweet.retweet_count, tweet.id, tweet.user.screen_name])
    #print "...%s tweets downloaded so far" % (len(tweet.id))
    ids.add(tweet.id) # add new id
    print ("number of unique ids seen so far: ",format(len(ids)))
csvFile.close()

【问题讨论】:

您遇到任何错误吗?或者您只是在寻找代码优化? @harshi9968 出现多个错误...语法不正确,“状态”对象没有属性“--getitem--”...通过研究其他帖子,我知道if not tweet['retweeted'] and 'RT @' not in tweet['text'] 是我的想要,但我不确定将它放在代码中的确切位置以获得我需要的东西 你能发一张错误截图吗? @harshil9968 刚刚在我的原始帖子中附加了一条错误消息 【参考方案1】:

API 级别的过滤

q='your_search -filter:retweets'

阅读更多关于here的信息。

笨方法是在代码中过滤

所以tweet 是一个不是 JSON 或 dict 的对象,你不应该像 tweet['retweeted']tweet['text'] 那样访问它

改用这一行:

if not tweet.retweeted:

或者对于您的用例:

if (not tweet.retweeted) and ('RT @' not in tweet.text):

【讨论】:

非常有用。再次感谢你。一个简短的问题来补充这个......如果我想将其他参数传递到 if 语句中,这可能吗?例如,如果我只想引入 tweet.favorite_count 或 tweet.retweet_count > 0 的推文,我可以这样做:if (not tweet.retweeted) and ('RT @' not in tweet.text) and (tweet.favorite_count > 0): 是的,就是这样,如果有帮助,请接受答案并投票。 有没有办法过滤被屏蔽的用户?【参考方案2】:

除了接受的答案之外,我建议您将您提出的请求从q="docker" 更改为q="docker -filter:retweets"

这将阻止大多数转发甚至出现在结果中。

【讨论】:

这对我有用。根据 Twitter 文档,您可以对任何其他标准运算符执行相同操作:developer.twitter.com/en/docs/tweets/rules-and-filtering/… 直到这个答案。最好从 API 而非代码中过滤。从 Twitter 获取的数据更少,不会超出 API 限制。

以上是关于Tweepy - 排除转推的主要内容,如果未能解决你的问题,请参考以下文章

从 twitter 流中排除回复 - tweepy

从 Tweepy 流中获取转推和最喜欢的计数

如何使用 Tweepy 转发评论

如何忽略已在 Tweepy 中转发的推文?

在 Tweepy Streaming API 中包含过滤条件

maven 依赖排除 是排除低版本的还是高版本