2011-10-04 5 views
7

Ho scritto uno script per inviare un indirizzo all'API di Google Maps e ricevere indietro Lat e Lng. Tuttavia, sto ricevendo messaggi di errore che ho superato il limite di velocità di Google dopo circa 20 query. C'è qualcosa che non sto considerando?Limite di velocità per l'API di google maps, ma non so perché

Apprezzerei qualsiasi aiuto. Sono molto nuovo nell'usare le API, quindi capire meglio perché sto raggiungendo il limite di frequenza sarebbe molto utile.

Dopo aver letto gli indirizzi da un file csv denominato Location, di seguito è riportato il mio codice rilevante.

for row in locations: 
     address = 'XXX, New Haven, CT' 
     first = re.search('^(.*),',row[0]) 
     address = re.sub('XXX',first.group(), address) 
     lat, lng = gmaps.address_to_latlng(address) 

E il mio messaggio di errore è qui sotto.

Traceback (most recent call last): 
    File "<input>", line 5, in <module> 
    File "/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/googlemaps-1. 
    0.2-py2.7.egg/googlemaps.py", line 310, in address_to_latlng 
     return tuple(self.geocode(address)['Placemark'][0]['Point']['coordinates'][1 
    ::-1]) 
     File "/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/googlemaps-1. 
    0.2-py2.7.egg/googlemaps.py", line 262, in geocode 
     raise GoogleMapsError(status_code, url, response) 
    GoogleMapsError: Error 620: G_GEO_TOO_MANY_QUERIES 

risposta

8

Ogni gmaps.address_to_latlng chiamata invia una richiesta al server di Google, e si può fare solo un numero limitato di quelli.

documenti di Google su usage limits:

utilizzo delle API di Google Geocoding è soggetta ad un limite di query di 2.500 richieste di geolocalizzazione al giorno. [...] Inoltre, applichiamo un limite tariffario per impedire l'abuso del servizio.

E il docs on G_GEO_TOO_MANY_QUERIES:

La data chiave è andato oltre il limite le richieste nel periodo di 24 ore o ha presentato troppe richieste in un periodo troppo breve di tempo. Se invii più richieste in parallelo o in un circuito chiuso, utilizza un timer o metti in pausa il codice per assicurarti di non inviare le richieste troppo rapidamente.

Quindi, fanno solo quello che dicono di fare:

import time 

# And then in the loop, pause: 
time.sleep(1) 

Regolare la “1” per un congruo numero di secondi in modo da non rimanere senza di richieste accettate.

+4

penso che ci sia anche un limite di 10 richieste al secondo, che è probabilmente il limite che viene colpito qui. –

+4

Il limite per un limite giornaliero di 2500 è uno ogni 35 secondi. – Omnifarious

+1

Questo ha risolto il mio problema perfettamente, grazie!Ho erroneamente pensato che esistesse solo un limite giornaliero. Nel caso qualcuno se lo stesse chiedendo, un ritardo di 1 secondo ha funzionato senza problemi, quindi consente sicuramente un tasso superiore a 1/sec. – Kevin

2

Ho dovuto rendermi conto che la maggior parte delle persone (come me) omettono la parte nella google map api che parla del "limite di velocità della richiesta" che è diverso dal "limite della pagina al giorno".

quindi il 'limite di velocità di richiesta' è di 10 richieste al secondo.

Quindi, sulla base che se si visualizza una pagina con 20 mappe statiche ... e l'utente finale ha una connessione internet veloce (forse?) ...

poi quei 20 richieste al mappa API di Google Accade più velocemente poi nel lasso di 1 secondo ...

così da questo si interrompe il loro ryle e bloccano la visualizzazione dell'immagine.

questa è la mia conclusione dopo solo ora leggendo su di esso qui e là

buona fortuna