web-dev-qa-db-ja.com

Tweepy-リツイートを除外する

最終的な目標は、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()

Error Message

14
hansolo

したがって、TweetはJSONやdictではなくオブジェクトです。Tweet['retweeted']Tweet['text']のようにアクセスしないでください。

代わりに次の行を使用します。

if not Tweet.retweeted:

またはあなたのユースケースについて:

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

APIレベルでのフィルタリング

q='your_search -filter:retweets'

これについてもっと読む ここ

21
harshil9968

承認された回答に加えて、行うリクエストをq="docker"からq="docker -filter:retweets"に変更することをお勧めします

これにより、ほとんどのリツイートが結果に表示されることもなくなります。

17
Efferalgan