2014-05-12 12 views
5

Sto cercando di trovare un modo per creare limiti di restrizione in tweepy, al fine di gestire i limiti di errore rimanenti inviati dall'API di Twitter. Sto usando il seguente codice:Errore limiti rimanenti

limits = myapi.rate_limit_status() 
remain_search_limits = limits['resources']['search']['/search/tweets']['remaining'] 
print remain_search_limits 
print limits 

In realtà le stampe di codice di cui sopra:

179 
{u'rate_limit_context': {u'access_token': u'179927437-vtHojLnksgUD3FfnueTWVag62Kx5mvAA3uhX7qd7'}, u'resources': {u'account': {u'/account/verify_credentials': {u'reset': 1399886205, u'limit': 15, u'remaining': 0}, u'/account/settings': {u'reset': 1399886857, u'limit': 15, u'remaining': 15}}, u'blocks': {u'/blocks/list': {u'reset': 1399886857, u'limit': 15, u'remaining': 15}, u'/blocks/ids': {u'reset': 1399886857, u'limit': 15, u'remaining': 15}}, u'users': {u'/users/contributors': {u'reset': 1399886857, u'limit': 15, u'remaining': 15}, u'/users/lookup': {u'reset': 

La questione strana, è che ogni volta che si stampa remain_search_limits sto ottenendo 179 come risposta. Cosa dovrei usare per aspettare fino a quando non sarò in grado di recuperare dati da Twitter?

mio codice finale è il seguente:

limits = api.rate_limit_status() 
remain_follower_limits = limits['resources']['followers']['/followers/ids'] ['remaining'] 

with open("ids.txt") as f: 
    content = f.readlines() 

ids = [] 
for page in tweepy.Cursor(api.followers_ids, user_id="dankanter").pages(): 
while remain_follower_limits >4: 
    limits = api.rate_limit_status() 
    remain_follower_limits = limits['resources']['followers']['/followers/ids']['remaining'] 
    ids.extend(page) 
else: 
    time.sleep(60) 

print ids 
print len(ids) 

comunque qualche volta stucks nei limiti linea = api.rate_limit_status() all'interno while. Nel caso in cui un utente abbia milioni di utenti, restituisce solo un sottoinsieme che in realtà è molto piccolo.

+0

ottengo lo stesso valore, anche ... a meno che/finché io abbia fatto una chiamata a myapi.search, dopo di che viene restituito un valore inferiore. Potresti trovare alcune informazioni utili in questa discussione: http://stackoverflow.com/questions/23653432/return-the-number-of-remaining-hits-tweepy – gumption

+0

Poiché "remain_search_limits" rappresenta le chiamate di ricerca _remaining_ che puoi effettuare, puoi continuare a effettuare ulteriori chiamate di ricerca purché questo numero sia maggiore di zero. – gumption

+0

Sto cercando di ottenere i follower degli utenti, ma devo cambiare per ottenere i veri limiti per questo caso? –

risposta

2

[Riassumendo, chiarire ed elaborare sul thread commento nel post iniziale]

ottengo lo stesso valore, anche ... a meno che/finché io abbia fatto una chiamata a myapi.search, dopo di che un valore inferiore viene restituito.

limits['resources'] contiene un elenco di dizionari per le diverse famiglie di risorse (tipi di chiamate API):

['account', 'blocks', 'users', 'friends', 'help', 'saved_searches', 'lists', 'search', 'application', 'trends', 'followers', 'favorites', 'friendships', 'geo', 'direct_messages', 'statuses', 'mutes'].

Ciascuno dei dizionari associati a una famiglia di risorse include una o più chiavi che rappresentano i metodi specifici associati a tale famiglia. I valori di ciascuna di queste chiavi, a loro volta, sono dizionari con chiavi per 'limit', 'remaining' e 'reset'.

La documentazione per application/rate_limit_status metodo descrive questi come segue:

Questo metodo risponde con una mappa dei metodi appartenenti alle famiglie specificati dal parametro risorse, gli altri usi attuali per ciascuna di tali risorse all'interno di l'attuale finestra di limitazione della velocità e la sua scadenza in epoch time. Include anche un campo rate_limit_context che indica il token di accesso corrente o il contesto di autenticazione di sola applicazione .

Dal limits['resources']['search']['/search/tweets']['remaining'] rappresenta la ricerca restante chiama si può fare, si può continuare a fare ulteriori search chiamate finché questo numero è maggiore di zero; quando raggiunge lo zero, è necessario attendere per effettuare chiamate aggiuntive fino al raggiungimento del tempo reset (in Epoch format).

Per quanto riguarda un commento followup, la risorsa famiglia limits['resources']['followers'] contiene le chiavi per i metodi '/followers/ids' e '/followers/list', e le 'remaining' chiamate possono essere gestite tramite lo stesso schema per search.

si possono trovare alcune utili informazioni aggiuntive in questa discussione: Return the number of remaining hits tweepy