【问题标题】:Google Places API in PythonPython 中的 Google Places API
【发布时间】:2018-05-24 08:47:17
【问题描述】:

我正在使用 Python 中的 Google Places API 在城市/城镇/地点(作为位置)中查找任何东西(作为查询给出)。以下是我的代码中的一个 sn-p:

from googleplaces import GooglePlaces, types, lang


YOUR_API_KEY = 'xxxx'
google_places = GooglePlaces(YOUR_API_KEY)

query_result = google_places.text_search(
        query='Play Schools', location = 'Mumbai, India')
print(len(query_result.places))
for place in query_result.places:
    print (place.name)
    print (place.place_id)
    print('\n')

if (query_result.has_next_page_token):
query_result_next_page = google_places.text_search(
        pagetoken=query_result.next_page_token)

现在的问题是我的代码将结果数限制为 20 个,并且 Google 地图在同一查询中返回了 20 多个结果。如何检索所有结果?

编辑:我添加了最后 3 行代码以尝试在下一页获取结果,但我遇到了 INVALID_REQUEST 错误。

感谢您阅读我的问题。

【问题讨论】:

  • 阅读文档@developers.google.com/places/web-service/search。默认情况下,每个附近搜索或文本搜索每个查询最多返回 20 个建立结果。如果您的搜索将返回超过 20 个,则搜索响应将包含一个附加值 — next_page_token。将next_page_token 的值传递给新搜索的pagetoken 参数以查看下一组结果。
  • 我尝试写这个并且被系统抛出一个 INVALID_REQUEST ......如果 query_result.has_next_page_token: query_result_next_page = google_places。 text_search(pagetoken=query_result.next_page_token)

标签: python google-maps google-api


【解决方案1】:

默认情况下,每个附近搜索或文本搜索最多返回 20 个 每个查询的建立结果;但是,每次搜索都可以返回为 多达 60 个结果,分为三页。如果您的搜索将 返回超过 20,则搜索响应将包含 附加值——next_page_token。传递值 next_page_token 到 pagetoken 参数的新搜索下查看 下一组结果。如果 next_page_token 为 null,或者不是 返回,则没有进一步的结果。有短暂的延迟 在发出 next_page_token 和何时变为 有效的。在下一页可用之前请求下一页将返回 INVALID_REQUEST 响应。用同样的方法重试请求 next_page_token 将返回下一页结果。

查看此网址:HERE

添加 PagerToken,作为 HTTP 请求 URL 的附加参数,如下所示

https://maps.googleapis.com/maps/api/place/nearbysearch/json?pagetoken=CpQCAgEAAFxg8o-eU7_uKn7Yqjana-HQIx1hr5BrT4zBaEko29ANsXtp9mrqN0yrKWhf-y2PUpHRLQb1GT-mtxNcXou8TwkXhi1Jbk-ReY7oulyuvKSQrw1lgJElggGlo0d6indiH1U-tDwquw4tU_UXoQ_sj8OBo8XBUuWjuuFShqmLMP-0W59Vr6CaXdLrF8M3wFR4dUUhSf5UC4QCLaOMVP92lyh0OdtF_m_9Dt7lz-Wniod9zDrHeDsz_by570K3jL1VuDKTl_U1cJ0mzz_zDHGfOUf7VU1kVIs1WnM9SGvnm8YZURLTtMLMWx8-doGUE56Af_VfKjGDYW361OOIj9GmkyCFtaoCmTMIr5kgyeUSnB-IEhDlzujVrV6O9Mt7N4DagR6RGhT3g1viYLS4kO5YindU6dm3GIof1Q&key=YOUR_API_KEY

将此网址复制粘贴到浏览器上并仔细检查。另外,请仔细阅读文档网址。干杯!

【讨论】:

  • 感谢您的回答。我尝试包含 pagetoken,但在 INVALID_REQUEST 中被抛出。我已在 cmets 中包含上述问题下方的代码。
  • @DoItRightNow,您需要将 pageToken 值更改为您的值,并在 url 末尾添加 your_api_key。页面令牌值位于您来自 google 的数据负载中。
  • 是的,这是有道理的。但问题是我如何在我的脚本中做到这一点?以下代码行引发错误:query_next_page = google_places.text_search(pagetoken=query_result.next_page_token)
  • 我试过你所说的,它确实给了我浏览器中的位置列表。我需要能够使用我的脚本来做到这一点。
  • 老兄,将 query_result 包装成一个条件,只要值为 pageToken 是有效的。并修改您的 text_search 函数以不断调用下一页。我没有看到你的代码。我不知道你在那个函数下到底做了什么!
【解决方案2】:

我发现出了什么问题。系统抛出 INVALID_REQUEST 是因为 next_page_token 无效(在发出 next_page_token 和它变为有效之间有一个小的延迟 b/w)。我编译了代码的前半部分(除了最后三行),然后编译了最后三行,它工作了!!因此,据我所知,延迟导致了错误。

所以现在我要做的就是在最后一个 if 条件之前设置一个 1-2 秒的计时器。

感谢所有评论和回复此问题的人。你是这个社区的英雄。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2014-03-18
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    相关资源
    最近更新 更多