web-dev-qa-db-fra.com

Gestion de la recherche API Tweepy

S'il vous plaît, pardonnez-moi s'il s'agit d'une répétition grossière d'une question précédemment répondue ailleurs, mais je ne sais plus trop comment utiliser la fonction de recherche de l'API tweepy. Existe-t-il une documentation disponible sur la recherche de tweets à l'aide de la fonction api.search()?

Existe-t-il un moyen de contrôler des fonctionnalités telles que le nombre de tweets renvoyés, le type de résultats, etc.?

Les résultats semblent atteindre un maximum de 100 pour une raison quelconque.

l'extrait de code que j'utilise est le suivant

searched_tweets = self.api.search(q=query,rpp=100,count=1000)

23
user3075934

A l'origine, j'avais mis au point une solution basée sur suggestion de Yuva Raj pour utiliser des paramètres supplémentaires dans recherche/tweets GET - le paramètre max_id en conjonction avec la id du dernier Tweet renvoyé dans chaque itération d'une boucle qui vérifie également l'occurrence d'une TweepError.

Cependant, j'ai découvert qu'il existe un moyen beaucoup plus simple de résoudre le problème en utilisant un tweepy.Cursor (voir le tutoriel tweepy Cursor pour plus d'informations sur l'utilisation de Cursor). 

Le code suivant récupère les 1 000 dernières mentions de 'python'.

import tweepy
# assuming Twitter_authentication.py contains each of the 4 oauth elements (1 per line)
from Twitter_authentication import API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET

auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

api = tweepy.API(auth)

query = 'python'
max_tweets = 1000
searched_tweets = [status for status in tweepy.Cursor(api.search, q=query).items(max_tweets)]

Mise à jour: en réponse au commentaire de Andre Petre sur tweepy.Cursor concernant les problèmes de consommation de mémoire potentiels, j'inclurai ma solution d'origine en remplaçant la compréhension de liste d'instructions unique utilisée ci-dessus pour calculer searched_tweets par ce qui suit:

searched_tweets = []
last_id = -1
while len(searched_tweets) < max_tweets:
    count = max_tweets - len(searched_tweets)
    try:
        new_tweets = api.search(q=query, count=count, max_id=str(last_id - 1))
        if not new_tweets:
            break
        searched_tweets.extend(new_tweets)
        last_id = new_tweets[-1].id
    except tweepy.TweepError as e:
        # depending on TweepError.code, one may want to retry or wait
        # to keep things simple, we will give up on an error
        break
29
gumption

Il y a un problème dans votre code. Basé sur la documentation Twitter pour Recherche GET/tweets ,

The number of tweets to return per page, up to a maximum of 100. Defaults to 15. This was   
formerly the "rpp" parameter in the old Search API.

Votre code devrait être,

CONSUMER_KEY = '....'
CONSUMER_SECRET = '....'
ACCESS_KEY = '....'
ACCESS_SECRET = '....'

auth = tweepy.auth.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
search_results = api.search(q="hello", count=100)

for i in search_results:
    # Do Whatever You need to print here
12
Yuva Raj

Les autres questions sont anciennes et l'API a beaucoup changé.

Manière simple, avec Cursor (voir le tutoriel Cursor ). Pages renvoie une liste d’éléments (vous pouvez limiter le nombre de pages qu’il renvoie. .pages(5) ne renvoie que 5 pages):

for page in tweepy.Cursor(api.search, q='python', count=100, Tweet_mode='extended').pages():
    # process status here
    process_page(page)

q est la requête, count combien va-t-il en apporter pour les demandes (100 étant le maximum pour les demandes) et Tweet_mode='extended' pour avoir le texte intégral (sans cela, le texte est tronqué à 140 caractères) Plus d'infos ici . Les RT sont tronqués comme confirmé jaycech3n .

Si vous ne voulez pas utiliser tweepy.Cursor, vous devez indiquer max_id pour apporter le morceau suivant. Voir pour plus d'informations. 

last_id = None
result = True
while result:
    result = api.search(q='python', count=100, Tweet_mode='extended', max_id=last_id)
    process_result(result)
    # we subtract one to not have the same again.
    last_id = result[-1]._json['id'] - 1
0
Lucas