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 - 排除转推的主要内容,如果未能解决你的问题,请参考以下文章