Python, Google Places API - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь получить все заведения типа ресторана в определенном месте в заданном радиусе, используя запрос python к API Google Places.Вот мой простой код:

import requests
import json

APIKEY = "AIzaSyBFx8hqftDOlrSWRTiOSowjwfeS1OQtBpw"

def findPlaces(loc=("51.1079","17.0385"),radius=3000, pagetoken = None):
   lat, lng = loc
   type = "restaurant"
   url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location={lat},{lng}&radius={radius}&type={type}&key={APIKEY}{pagetoken}".format(lat = lat, lng = lng, radius = radius, type = type,APIKEY = APIKEY, pagetoken = "&pagetoken="+pagetoken if pagetoken else "")
   print(url)
   response = requests.get(url)
   res = json.loads(response.text)
   print(res)
   for result in res["results"]:
      info = ";".join(map(str,[result["name"],result["geometry"]["location"]["lat"],result["geometry"]["location"]["lng"],result.get("rating",0),result["place_id"]]))
      print(info)
   pagetoken = res.get("next_page_token",None)
   return pagetoken


pagetoken = None
while True:
     pagetoken = findPlaces(pagetoken=pagetoken)
     if not pagetoken:
         break

Тем не менее, даже несмотря на то, что он работает хорошо для первой страницы результатов, он не может попасть на вторую страницу без видимой причины (он просто возвращает INVALID REQUEST из API),Более того, что интересно, поскольку я печатаю свой URL-адрес в консоли, я могу следовать этому очень конкретному URL-адресу, просто щелкнув по нему, и когда я это сделаю, он работает отлично, API возвращает желаемый список ресторанов.

Я подумал, что это проблема со строками кодирования для URL, и я заменил формат на urlencode python, однако - результат остался прежним.Поскольку у меня заканчиваются идеи, я спрашиваю: кто-нибудь как-то связан с такой проблемой?

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 29 мая 2018

Я проверил его с новой широтой и долготой и получил 3 страницы каждые 20, что, как говорится в документации Google, составляет до 60.

https://developers.google.com/places/web-service/search

next_page_token содержит токенэто может быть использовано для получения до 20 дополнительных результатов.Next_page_token не будет возвращен, если нет дополнительных результатов для отображения.Максимальное количество результатов, которое может быть возвращено, равно 60. Существует небольшая задержка между моментом выдачи next_page_token и его вступлением в силу.

import requests
import json

APIKEY = "AIzaSyBFx8hqftDOlrSWRTiOSowjwfeS1OQtBpw"

def findPlaces(loc=("35.701474","51.405288"),radius=4000, pagetoken = None):
   lat, lng = loc
   type = "restaurant"
   url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location={lat},{lng}&radius={radius}&type={type}&key={APIKEY}{pagetoken}".format(lat = lat, lng = lng, radius = radius, type = type,APIKEY = APIKEY, pagetoken = "&pagetoken="+pagetoken if pagetoken else "")
   print(url)
   response = requests.get(url)
   res = json.loads(response.text)
   # print(res)
   print("here results ---->>> ", len(res["results"]))

   for result in res["results"]:
      info = ";".join(map(str,[result["name"],result["geometry"]["location"]["lat"],result["geometry"]["location"]["lng"],result.get("rating",0),result["place_id"]]))
      print(info)
   pagetoken = res.get("next_page_token",None)

   print("here -->> ", pagetoken)

   return pagetoken

# pagetoken = "CpQFhwIAADQWOcVI1wll-B869Z24El48rXw18gKoab_keD65V18zFEvPjKIfrS79Pc_vXJcZQtOuF0RObQG20ph-GE3ssP3k1fu8zsYbw5g3UPbSjAvQLdXkdD1qAWztXj7hc5Kxc4pYRyGM1_ljVOHg3Py_zSlYscnoNjCvRua2MDQgusCsEquNqGREFdvhjDkbeMhEFYxHucTnIn96OxIJEpamePTHsBooYyPBaa_ejGZ_C99QeDjpSkSKBgEe3aL1uWKlYhsGKh7biQUR5rKsKPodwccLIrW8Gr5tag3NH0sLPExHHvqzlpkj--KIuydTVjPH7u2zHxmPByServ2S5xjXYUBRr-ly3e1xPsVMhZZH9TxfttCIHLscBvpvCswIfaGYdl3bEzsrFISfpp0rpKtlp9gWGY7Tbk2n6s3etCHQEHn2qmM8bsJwkZV81pUWN0j9C9RX-ywOyIKY2yp1w_Iq1mRwOwY4mckbicOoooHiV6JER4xe7Kizw9hbXOnezn_NMk15TLwRoXlfL1s73uwogo-VWE8c-V1HqRpWQSyudRhLwhOEclrICXIdxICOgTgYO1z57xCEerw3QUL_7MPDrlbbh_AlX8I6Jfe8IhQ1Fkqu_njatm6aBTjkp2CSqlvZJpI_Lrv330VcyFEqBkGn7NJew3I9xofSrBaXFa8ABi6DXQm6-yC32OEyf7GHNXINjT1IB0yh6KR6c0qzaqiqOzKcuuai9XqEMQNNKyi6EuhzH5TP9YA56N3JhnXRFhs2aWHZhLlieVI6_uqzpZSgYjUem8aQrMTlmHw0kIYU8I-Ca041C4Zm2gMezwygRrhzsOoAmbmu96nft0KuIWTB3A_xGVKYQ2qjb2KRM7nsglnSEhDoNs8EhvuIm0FQs30YSCp5GhRO3b3Tn5rsLuwiWgu8hwEGhL0S1A"
pagetoken = None

while True:
     pagetoken = findPlaces(pagetoken=pagetoken)
     import time
     time.sleep(5)

     if not pagetoken:
         break
...