Python、googleplacesapi

Python、googleplacesapi,python,request,google-places-api,Python,Request,Google Places Api,我正在尝试使用python对GooglePlacesAPI的请求来获取给定半径内特定位置的所有餐馆类型。以下是我的简单代码: import requests import json APIKEY = "AIzaSyBFx8hqftDOlrSWRTiOSowjwfeS1OQtBpw" def findPlaces(loc=("51.1079","17.0385"),radius=3000, pagetoken = None): lat, lng = loc type = "rest

我正在尝试使用python对GooglePlacesAPI的请求来获取给定半径内特定位置的所有餐馆类型。以下是我的简单代码:

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
然而,即使它对结果的第一页工作得很好,但它在没有明显原因的情况下无法到达第二页(它只是从API返回无效的请求)。此外,有趣的是,由于我将我的url打印到控制台,我只需单击它就可以跟踪这个非常特定的url,当我这样做时,它工作得很好,API返回所需的餐厅列表

我认为这是URL字符串编码的问题,我用python的urlencode替换了格式,但是结果保持不变。既然我的想法已经没有了,我就要问:有人和这样的问题有关系吗


提前感谢您的帮助。

我用新的纬度和经度对它进行了测试,得到了3个页面,每个页面20页,正如谷歌文档所说,总计60页

下一页\令牌包含一个令牌,可用于返回多达20个 其他结果。如果存在,则不会返回下一个\u页面\u令牌 没有要显示的其他结果。结果的最大数目 可以退回的是60美元。在以下时间之间有一个短暂的延迟: 下一个\u页面\u令牌将被发出,以及它将在何时生效


谢谢!我承认,我个人从来没有想过会有这样的延迟,需要这样处理。我真的很感谢你的努力,再次感谢!你也有3页吗@MichałKaczanowiczYes我做了,3页,60个结果我使用了完全相同的代码,但我在下一页上得到了一个键错误
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