Tweepy - 排除转推

20

最终目标是使用tweepy api搜索聚焦于主题(例如docker)并排除转发。我查看了其他提到排除转发的帖子,但它们都不适用。我已经尝试将学到的内容整合到下面的代码中,但我认为"if not"部分的代码放错了位置。非常感谢任何帮助。

#!/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()

错误信息


你是否遇到了任何错误?还是只是在寻找代码优化? - harshil9968
@harshi9968 遇到了多个错误...语法不正确,'Status'对象没有属性'--getitem--'...从研究其他帖子中我知道if not tweet['retweeted'] and 'RT @' not in tweet['text']是我想要的,但我不确定在代码中确切的放置位置以获得我需要的内容。 - hansolo
你能发布一下错误的截图吗? - harshil9968
@harshil9968 刚刚在我的原始帖子中附加了一个错误消息。 - hansolo
2个回答

38

API级别的过滤:

q='your_search -filter:retweets'

在这里阅读更多相关信息:这里.

愚蠢的做法是在代码中筛选

因此tweet是一个对象而不是JSON或字典,您不应像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): - hansolo
是的,如果有帮助,请接受答案并点赞。 - harshil9968
有没有一种方法可以过滤被屏蔽的用户? - Daniel Zhang

25
除了已被接受的答案外,我建议您更改请求中的搜索关键词,将q="docker" 改为 q="docker -filter:retweets"
这样可以避免大多数转发的结果出现在搜索结果中。

1
这对我有用。您可以根据 Twitter 文档(https://developer.twitter.com/en/docs/tweets/rules-and-filtering/overview/standard-operators)为任何其他标准运算符执行相同的操作。 - carlos_cantana
直到这个答案,最好从API过滤而不是在代码中进行。从Twitter获取的数据更少,也不会超过API限制。 - Miquel Canal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接