Google Places API: проблема OVER_QUERY_LIMIT периодически - PullRequest
0 голосов
/ 23 января 2020

Я знаю, что этот вопрос задавался ранее, но мой немного отличается от других тем.

Я написал скрипт python для чтения случайных адресов и возврата их идентификатора места. Вот как выглядит мой файл Excel:

enter image description here

Это мой код:

from googleplaces import GooglePlaces
import pandas as pd
import time
import xlrd
YOUR_API_KEY = <my_key>

google_places = GooglePlaces(YOUR_API_KEY)
loc = r"C:\Users\user\Desktop\test.xlsx"

wb = xlrd.open_workbook(loc)
sheet = wb.sheet_by_index(0)

for i in range(1,sheet.nrows):
    read_address = sheet.cell_value(i,0)
    query_result = google_places.text_search(
        query=''+read_address)
    for place in query_result.places:
        print(place.name)
        print(place.place_id)

Вывод на консоль:

C:\Users\csjeemah\PycharmProjects\googleplaces\venv\Scripts\python.exe C:/Users/csjeemah/PycharmProjects/googleplaces/googleplaceID.py
777 Brockton Ave
ChIJmf-3TW6b5IkR1rx0eohvqPQ
30 Memorial Dr
ChIJXa_KpmGD5IkRYtpt2IsXmqg
Traceback (most recent call last):
  File "C:/Users/csjeemah/PycharmProjects/googleplaces/googleplaceID.py", line 27, in <module>
    query_result = google_places.text_search(
  File "C:\Users\csjeemah\PycharmProjects\googleplaces\venv\lib\site-packages\googleplaces\__init__.py", line 353, in text_search
    _validate_response(url, places_response)
  File "C:\Users\csjeemah\PycharmProjects\googleplaces\venv\lib\site-packages\googleplaces\__init__.py", line 175, in _validate_response
    raise GooglePlacesError(error_detail)
googleplaces.GooglePlacesError: Request to URL https://maps.googleapis.com/maps/api/place/textsearch/json?query=250+Hartford+Avenue%2C+Bellingham+MA+2019&radius=3200&language=en&key=mykey&sensor=false failed with response code: OVER_QUERY_LIMIT

На приведенном выше снимке экрана консоли возвращаются результаты для первых двух адресов, а затем возникает ошибка. Теперь я понимаю причину, по которой я получаю эту ошибку, из-за ограничения на количество запросов. можно сделать, но, как вы можете видеть на изображении выше:

  1. есть только 9 адресов.

enter image description here

Если я укоротю несколько адресов, как показано ниже:

enter image description here

Теперь он получает больше адресов, прежде чем он выходит из строя :

C:\Users\csjeemah\PycharmProjects\googleplaces\venv\Scripts\python.exe C:/Users/csjeemah/PycharmProjects/googleplaces/googleplaceID.py
777 Brockton Ave
ChIJmf-3TW6b5IkR1rx0eohvqPQ
30 Memorial Dr
ChIJt_pwFGsUc2sR-ve6pnT9DlA
30 Memorial Dr
ChIJJatf08pZIWsRr2u-ppt2CyI
250 Hartford Ave
ChIJk567q-Jx5IkRGxbCzkmYU7A
Traceback (most recent call last):
  File "C:/Users/csjeemah/PycharmProjects/googleplaces/googleplaceID.py", line 27, in <module>
    query_result = google_places.text_search(
  File "C:\Users\csjeemah\PycharmProjects\googleplaces\venv\lib\site-packages\googleplaces\__init__.py", line 353, in text_search
    _validate_response(url, places_response)
  File "C:\Users\csjeemah\PycharmProjects\googleplaces\venv\lib\site-packages\googleplaces\__init__.py", line 175, in _validate_response
    raise GooglePlacesError(error_detail)
googleplaces.GooglePlacesError: Request to URL https://maps.googleapis.com/maps/api/place/textsearch/json?query=700+Oak+Street&radius=3200&language=en&key=mykey&sensor=false failed with response code: OVER_QUERY_LIMIT

Я также пытался добавить сон на несколько секунд после каждого запроса, но он не работает, может кто-нибудь сказать мне, в чем проблема?

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Непосредственно из документации Ограничения использования для веб-служб Google Maps Platform

Вы можете превысить ограничения использования веб-служб Google Maps на:

  • Отправка слишком много запросов в день.
  • слишком быстрая отправка запросов, т. е. слишком много запросов в секунду.
  • слишком быстрая отправка запросов слишком долго или иным образом злоупотребление веб-службой.
  • Превышение других лимитов использования, например, баллов за запрос в Elevation API.

После получения ответа с кодом состояния OVER_QUERY_LIMIT ваше приложение должно определить, какой лимит использования был превышен. Это можно сделать, сделав паузу на 2 секунды и повторно отправив тот же запрос. Если код состояния по-прежнему OVER_QUERY_LIMIT, ваше приложение отправляет слишком много запросов в день. В противном случае ваше приложение отправляет слишком много запросов в секунду.

url = "MAPS_API_WEBSERVICE_URL"
attempts = 0
success = False

while success != True and attempts < 3:
  raw_result = urllib.urlopen(url).read()
  attempts += 1
  # The GetStatus function parses the answer and returns the status code
  # This function is out of the scope of this example (you can use a SDK).
  status = GetStatus(raw_result)
  if status == "OVER_QUERY_LIMIT":
    time.sleep(2)
    # retry
    continue
  success = True

if attempts == 3:
  # send an alert as this means that the daily limit has been reached
  print "Daily limit has been reached"
0 голосов
/ 23 января 2020

Ошибка json на изображении ясно указывает на то, что вы превысили суточную квоту запросов для API мест.

Если вы хотите продолжить sh, вам необходимо связать свой проект GCP с платежным аккаунтом.

...