it-swarm.com.de

Tweepy API-Suche verwalten

Bitte verzeihen Sie mir, wenn dies eine grobe Wiederholung einer Frage ist, die zuvor an anderer Stelle beantwortet wurde, aber ich weiß nicht, wie ich die Tweepy-API-Suchfunktion verwenden soll. Gibt es eine Dokumentation zur Suche nach Tweets mit der Funktion api.search()?

Kann ich Funktionen wie die Anzahl der zurückgegebenen Tweets, den Ergebnistyp usw. steuern?

Die Ergebnisse scheinen aus irgendeinem Grund bei 100 zu liegen.

das von mir verwendete Code-Snippet lautet wie folgt

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

23
user3075934

Ich habe ursprünglich eine Lösung entwickelt, die auf Yuva Raj s Suggestion basiert, um zusätzliche Parameter in GET search/tweets - dem max_id-Parameter in Verbindung mit der id des jeweils letzten Tweet zu verwenden Iteration einer Schleife, die auch das Auftreten einer TweepError prüft.

Ich habe jedoch herausgefunden, dass es einen viel einfacheren Weg gibt, das Problem mit einem tweepy.Cursor zu lösen (siehe tweepy Cursor-Tutorial für weitere Informationen zur Verwendung von Cursor). 

Der folgende Code ruft die letzten 1000 Erwähnungen von 'python' ab.

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)]

Update: Als Antwort auf Andre Petre s Kommentar zu möglichen Problemen mit dem Speicherverbrauch von tweepy.Cursor füge ich meine ursprüngliche Lösung hinzu und ersetze das Verständnis der einzelnen Anweisungsliste, das oben zur Berechnung von searched_tweets verwendet wurde, durch Folgendes:

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

Es gibt ein Problem in Ihrem Code. Basierend auf Twitter Dokumentation für GET-Suche/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.

Ihr Code sollte sein

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

Sie können die Tweets mit bestimmten Zeichenfolgen wie folgt durchsuchen:

tweets = api.search('Artificial Intelligence', count=200)
0
Ritesh Soni

Die anderen Fragen sind alt und die API hat sich sehr verändert.

Einfacher Weg mit dem Cursor (siehe Cursor-Tutorial ). Pages gibt eine Liste von Elementen zurück (Sie können die Anzahl der zurückgegebenen Seiten einschränken. .pages(5) gibt nur 5 Seiten zurück):

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

Wo q die Abfrage ist, count wie viele davon für Anfragen (100 maximal für Anfragen) und Tweet_mode='extended' den vollständigen Text enthalten soll. (sonst wird der Text auf 140 Zeichen gekürzt) Weitere Informationen hier . RTs werden als bestätigt jaycech3n abgeschnitten.

Wenn Sie tweepy.Cursor nicht verwenden möchten, müssen Sie max_id angeben, um den nächsten Abschnitt zu bringen. Siehe für weitere Informationen. 

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