web-dev-qa-db-fra.com

Tweepy - Exclure les retweets

Le but ultime est d'utiliser la recherche API tweepy pour se concentrer sur des sujets (c'est-à-dire docker) et pour EXCLURE les retweets. J'ai regardé d'autres fils qui mentionnent l'exclusion des retweets mais ils étaient complètement applicables. J'ai essayé d'incorporer ce que j'ai appris dans le code ci-dessous mais je crois que le morceau de code "sinon" est au mauvais endroit. Toute aide est grandement appréciée.

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

Donc Tweet est un objet pas un JSON ou dict, vous ne devez pas y accéder comme Tweet['retweeted'] et Tweet['text']

Utilisez plutôt cette ligne:

if not Tweet.retweeted:

Ou pour votre cas d'utilisation:

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

Filtrage au niveau de l'API :

q='your_search -filter:retweets'

en savoir plus ici .

21
harshil9968

En plus de la réponse acceptée, je vous suggère de modifier la demande que vous faites, de q="docker" à q="docker -filter:retweets"

Cela empêchera même la plupart des retweets d'apparaître dans les résultats.

17
Efferalgan