如何使用谷歌地方和JavaScript API循环其他页面?

时间:2018-06-11 23:41:44

标签: javascript google-api google-places-api

我正在构建单页应用程序,并使用前端JavaScript API来访问谷歌地图和地点。我已成功生成谷歌地图并通过此API获取机构详细信息,但是,javascript API不会返回" next_page_token"这允许我在前20后搜索其他结果。

如何使用javascript API让next_page_token循环遍历多个结果页面?我很绝望,因为我无法在任何地方找到任何相关信息。

编辑 - 包含一些其他信息。

使用文档provided by Google here执行nearSearch只会返回一组20个结果,但响应中没有其他属性。

以下是我使用Javascript API发出的请求。我将该脚本包含在index.html文件中。

let map = new google.maps.Map(this.$refs.map, {
    center: this.location,
    zoom: 12,
    disableDefaultUI: true,
    scrollwheel: false
})

let request = {
    location: this.location,
  radius: 10000,
  type: ['restaurants'] 
}

let service = new google.maps.places.PlacesService(map)
service.nearbySearch(request, (results, status) => {
    console.log("Results", results)
    console.log("Status", status)
})

以下是google发回的内容。从devtools的控制台拿走。

Results (20) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]

来自nearbySearch请求第三个参数的结果。

a4 {f: ƒ, b: ƒ, l: "CqQCIAEAAPcNpixD40jA39VnP-WMOZT21nGCcfpK_smpYhG66W…UWk72OjPB1A7Mdudz6UhoUD_vqC-QSk7CKnoveUXK0IHnQ8es", j: 1528768999850, hasNextPage: true}

2 个答案:

答案 0 :(得分:2)

来自Google网页搜索API

访问其他结果:

  

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

所以简而言之就是来自一个电话的响应: https://maps.googleapis.com/maps/api/place/textsearch/xml?query=restaurants+in+Sydney&key=YOUR_API_KEY

-OR -

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&rankby=distance&type=food&key=YOUR_API_KEY

你会发现:

{
   "html_attributions" : [],
   "next_page_token" : "CpQCAgEAAFxg8o-eU7_uKn7Yqjana-HQIx1hr5BrT4zBaEko29ANsXtp9mrqN0yrKWhf-y2PUpHRLQb1GT-mtxNcXou8TwkXhi1Jbk-ReY7oulyuvKSQrw1lgJElggGlo0d6indiH1U-tDwquw4tU_UXoQ_sj8OBo8XBUuWjuuFShqmLMP-0W59Vr6CaXdLrF8M3wFR4dUUhSf5UC4QCLaOMVP92lyh0OdtF_m_9Dt7lz-Wniod9zDrHeDsz_by570K3jL1VuDKTl_U1cJ0mzz_zDHGfOUf7VU1kVIs1WnM9SGvnm8YZURLTtMLMWx8-doGUE56Af_VfKjGDYW361OOIj9GmkyCFtaoCmTMIr5kgyeUSnB-IEhDlzujVrV6O9Mt7N4DagR6RGhT3g1viYLS4kO5YindU6dm3GIof1Q",
   "results" : [{...}]
}

重要说明:如果没有要显示的其他结果,则不会返回next_page_token。可返回的最大结果数为60.发出next_page_token与何时生效之间会有短暂的延迟。

了解更多: https://developers.google.com/places/web-service/search#PlaceSearchPaging

答案 1 :(得分:1)

我在看the doc page for "nearbySearch",这个例子很明显:

// Perform a nearby search.
  service.nearbySearch(
      {location: pyrmont, radius: 500, type: ['store']},
      function(results, status, pagination) {
        if (status !== 'OK') return;

        createMarkers(results);
        moreButton.disabled = !pagination.hasNextPage;
        getNextPage = pagination.hasNextPage && function() {
          pagination.nextPage();
        };
      });

因为注意回调采用了第三个用于获取其他结果的参数。