2011-10-04 20 views
7

He escrito una secuencia de comandos para enviar una dirección a la API de Google Maps y recibir de vuelta Lat y Lng. Sin embargo, recibo mensajes de error que superaron el límite de velocidad de Google después de unas 20 consultas. ¿Hay algo que no estoy considerando?Límite de índice de golpe para la API de Google Maps, pero no sé por qué

Agradecería cualquier ayuda. Soy muy nuevo en el uso de API, así que es muy útil comprender mejor por qué alcanzo el límite de velocidad.

Después de leer las direcciones de un archivo csv llamado Ubicación, a continuación es mi código relevante.

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) 

Y mi mensaje de error está por debajo.

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 

Respuesta

8

Cada gmaps.address_to_latlng llamada envía una solicitud al servidor de Google, y sólo se puede hacer un número limitado de ellos.

documentos de Google en usage limits:

El uso de la API de codificación geográfica de Google está sujeto a un límite de consultas de 2.500 solicitudes de geolocalización por día. [...] Además, aplicamos un límite de tasa de solicitud para evitar el abuso del servicio.

Y el docs on G_GEO_TOO_MANY_QUERIES:

La clave dada ha pasado el límite de solicitudes en el plazo de 24 horas o ha presentado demasiadas peticiones en un período muy corto de tiempo. Si envía varias solicitudes en paralelo o en un bucle cerrado, use un temporizador o una pausa en su código para asegurarse de no enviar las solicitudes demasiado rápido.

Así, hacen exactamente lo que dicen que hagas:

import time 

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

Ajuste el “1” para un número apropiado de segundos para que no se quede fuera de peticiones permitidas.

+4

Creo que también hay un límite de 10 solicitudes por segundo, lo cual es probablemente el límite que está siendo golpeado aquí. –

+4

El límite para un límite diario de 2500 es uno cada 35 segundos. – Omnifarious

+1

Esto resolvió mi problema perfectamente, ¡gracias!Supuse erróneamente que solo había un límite diario. En caso de que alguien se esté preguntando, un retraso de 1 segundo funcionó sin problemas, por lo que definitivamente permite una velocidad superior a 1/seg. – Kevin

2

Tengo que darme cuenta de que la mayoría de los peope (como yo) omiten la parte en la API de google api que habla del 'límite de velocidad de solicitud' que es diferente del 'límite de página por día'.

por lo que el 'límite de velocidad de solicitud' es de 10 solicitudes por segundo.

Así que basado en que si se mostrará una página con 20 mapas estáticos ... y el usuario final tiene una conexión rápida a Internet (tal vez?) ...

entonces esas 20 solicitudes a la API de Google mapa sucede más rápido que en el lapso de 1 segundo ...

por lo que rompe su ryle y bloquean la visualización de la imagen.

esta es mi conclusión después de un momento de leer sobre ella aquí y allá

buena suerte

Cuestiones relacionadas