2011-10-04 65 views
7

Tôi đã viết một tập lệnh để gửi địa chỉ đến API của Google Maps và nhận lại Lat và Lng. Tuy nhiên, tôi nhận được thông báo lỗi rằng tôi đã vượt quá giới hạn tốc độ của Google sau 20 truy vấn. Có cái gì tôi không xem xét?Giới hạn tốc độ truy cập cho API bản đồ google, Nhưng không biết tại sao

Tôi đánh giá cao bất kỳ trợ giúp nào. Tôi rất mới sử dụng API để hiểu rõ hơn lý do tại sao tôi đạt đến giới hạn tốc độ sẽ rất hữu ích.

Sau khi đọc địa chỉ từ tệp csv có tên Vị trí, bên dưới là mã có liên quan của tôi.

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) 

Và thông báo lỗi của tôi ở bên dưới.

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 

Trả lời

8

Mỗi gmaps.address_to_latlng gọi gửi một yêu cầu đến máy chủ của Google, và bạn chỉ có thể làm cho một số lượng hạn chế của những người.

tài liệu của Google trên usage limits:

Sử dụng API của Google Geocoding là đối tượng của một giới hạn truy vấn của 2.500 yêu cầu định vị mỗi ngày. [...] Ngoài ra, chúng tôi thực thi giới hạn tốc độ yêu cầu để ngăn chặn việc lạm dụng dịch vụ.

docs on G_GEO_TOO_MANY_QUERIES:

Mấu chốt nhất định đã vượt quá giới hạn yêu cầu trong khoảng thời gian 24 giờ hoặc đã gửi quá nhiều yêu cầu trong một khoảng thời gian quá ngắn thời gian. Nếu bạn gửi nhiều yêu cầu song song hoặc trong vòng lặp chặt chẽ, hãy sử dụng bộ hẹn giờ hoặc tạm dừng trong mã của bạn để đảm bảo bạn không gửi yêu cầu quá nhanh.

Vì vậy, làm chỉ là những gì họ cho bạn biết phải làm:

import time 

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

Điều chỉnh “1” đến một số lượng thích hợp giây, do đó bạn không chạy ra yêu cầu cho phép.

+4

Tôi nghĩ đó cũng là một hạn 10 yêu cầu mỗi giây, mà có lẽ là giới hạn mà là bị trúng đây. –

+4

Giới hạn cho giới hạn hàng ngày là 2500 mỗi 35 giây. – Omnifarious

+1

Điều này giải quyết được vấn đề của tôi một cách hoàn hảo, cảm ơn!Tôi lầm tưởng rằng chỉ có giới hạn hàng ngày. Trong trường hợp bất cứ ai đã tự hỏi, một sự chậm trễ 1 giây làm việc với không có vấn đề, do đó, nó chắc chắn cho phép một tỷ lệ cao hơn 1/giây. – Kevin

2

Tôi đã đồng ý với tôi rằng hầu hết mọi người (như tôi) bỏ qua phần trong bản đồ google api nói về 'giới hạn tốc độ yêu cầu' khác với 'giới hạn trang mỗi ngày'.

để 'giới hạn tốc độ yêu cầu' là 10 yêu cầu mỗi giây.

Vì vậy, trên cơ sở đó nếu bạn hiển thị một trang với 20 bản đồ tĩnh ... và người dùng cuối có kết nối internet nhanh (có thể bạn?) ...

sau đó những 20 yêu cầu đối với bản đồ google API xảy ra nhanh hơn sau đó trong khoảng thời gian 1 giây ...

do đó bạn phá vỡ ryle của chúng và chúng chặn hiển thị hình ảnh.

đây là kết luận của tôi sau khi chỉ là bây giờ đọc về nó ở đây và ở đó

may mắn

Các vấn đề liên quan