2013-06-28 11 views
5

Sto utilizzando la funzione di ricerca con Tweepy per Twitter e per qualche ragione i risultati della ricerca sono limitati a 15. Ecco il mio codiceTweepy (Twitter API) non tornare tutti Ricerca Risultati

results=api.search(q="Football",rpp=1000) 

for result in results: 
    print "%s" %(clNormalizeString(result.text)) 

print len(results) 

e solo il 15 i risultati vengono restituiti. Ha qualcosa a che fare con diverse pagine di risultati o qualcosa del genere?

+0

Sembra che ci sia un parametro di conteggio che controlla il numero di risultati, ma c'è un modo per mostrare solo tutti i risultati? – user1893354

risposta

17

La domanda riguarda più le API di Twitter invece di tweepy.

Secondo la documentation, count parametro definisce:

Il numero di tweets per tornare per pagina, fino a un massimo di 100. Default a 15. Questo è stato in precedenza il parametro "rpp" nel vecchio API di ricerca.

FYI, è possibile utilizzare tweepy.Cursor per ottenere risultati impaginati, in questo modo:

import tweepy 


auth = tweepy.OAuthHandler(..., ...) 
auth.set_access_token(..., ...) 

api = tweepy.API(auth) 
for tweet in tweepy.Cursor(api.search, 
          q="google", 
          count=100, 
          result_type="recent", 
          include_entities=True, 
          lang="en").items(): 
    print tweet.created_at, tweet.text 

Vedi anche: https://github.com/tweepy/tweepy/issues/197.

Spero che questo aiuti.

2

Ecco un esempio di funzionamento minimo (una volta sostituite le chiavi false con quelle reali).

import tweepy 
from math import ceil 

def get_authorization(): 

    info = {"consumer_key": "A7055154EEFAKE31BD4E4F3B01F679", 
      "consumer_secret": "C8578274816FAEBEB3B5054447B6046F34B41F52", 
      "access_token": "15225728-3TtzidHIj6HCLBsaKX7fNpuEUGWHHmQJGeF", 
      "access_secret": "61E3D5BD2E1341FFD235DF58B9E2FC2C22BADAD0"} 

    auth = tweepy.OAuthHandler(info['consumer_key'], info['consumer_secret']) 
    auth.set_access_token(info['access_token'], info['access_secret']) 
    return auth 


def get_tweets(query, n): 
    _max_queries = 100 # arbitrarily chosen value 
    api = tweepy.API(get_authorization()) 

    tweets = tweet_batch = api.search(q=query, count=n) 
    ct = 1 
    while len(tweets) < n and ct < _max_queries: 
     print(len(tweets)) 
     tweet_batch = api.search(q=query, 
           count=n - len(tweets), 
           max_id=tweet_batch.max_id) 
     tweets.extend(tweet_batch) 
     ct += 1 
    return tweets 

Nota: ho provato usando un ciclo for, ma il Twitter API restituisce talvolta meno di 100 risultati (pur essendo chiesto 100, e 100 disponibili). Non sono sicuro del motivo per cui questo è, ma questo è il motivo per cui non ho incluso un controllo per interrompere il ciclo se tweet_batch è vuoto: potresti voler aggiungere tu stesso un controllo come se fosse un query rate limit.

Un altro Nota: è possibile evitare di colpire il limite di velocità invocando wait_on_rate_limit=True in questo modo

 api = tweepy.API(get_authorization(), wait_on_rate_limit=True) 
Problemi correlati