php - 如何获得超过 20 个结果,即。 60 将 google place API 与 PHP 结合使用?

标签 php google-places-api

我正在开发一个 Google Places API 应用程序,我的目标是获取特定查询的所有可用详细信息。但据我所知,google places API 一次只返回 20 个结果。但我需要所有可用的地点详细信息。

如果我多次使用搜索关键字搜索,它总是给出相同的结果。所以我想知道每次使用相同的关键字搜索时有什么方法可以得到不同的结果。

 <?php 
        $placeSearchURL = 'https://maps.googleapis.com/maps/api/place/textsearch/json?query=' . $query . '&sensor=true' . '&key=' . API_KEY;

        $placeSearchJSON = file_get_contents($placeSearchURL);
        $dataArray = json_decode($placeSearchJSON);
        $references = array();
        $detailsOfPlaces = array();

        if (isset($dataArray->status)) {
            switch ($dataArray->status) {
                case 'OK' :
                    foreach( $dataArray->results as $details) {
                        $references[] = $details->reference;
                    }
                    break;
                default:
                    echo "Something wrong";
            }
        }

        foreach ($references as $reference) {
            $placeDetailsURL = 'https://maps.googleapis.com/maps/api/place/details/json?reference=' . $reference . '&sensor=true&key=' . API_KEY;
            $placeDetails =file_get_contents($placeDetailsURL);
            $placeDetailsAsArray = json_decode($placeDetails);

            switch ($dataArray->status) {
                case 'OK' :
                    $detailsOfPlace['business_name'] = isset($placeDetailsAsArray->result->name) ? $placeDetailsAsArray->result->name : '';
                    $detailsOfPlace['address'] = isset($placeDetailsAsArray->result->formatted_address) ? $placeDetailsAsArray->result->formatted_address : '';                      

                    $detailsOfPlaces[] = $detailsOfPlace;
                    break;
                default:
                    echo "Something went wrong";
            }
        }

这是我的代码。它为每个查询返回 20 个结果。谁能告诉我应该做哪些调整才能为每个查询获得 60 个结果。

谢谢

最佳答案

Google Places API 每次搜索最多可以返回 60 个结果,如果可以分成三页,最多 20 个结果。如果有超过 20 个结果可用,您可以通过将 next_page_token 传递给新搜索请求的 pagetoken 参数来访问其他结果。

有关加法结果的详细信息,请参阅 Accessing Addition Results文档中地方搜索页面的部分。

如果您只需要地点位置,您可以使用 Places API Radar Search返回多达 200 个地点。

编辑: 在您的示例中,您无需为每个地点发送详细信息请求即可访问地点名称和地址。此信息在初始响应中返回,可以像下面的示例一样访问:

foreach($dataArray->results as $place) {
  echo '<p><b>' . $place->name . '</b>, ' . $place->formatted_address . '</p>';
}

如果返回 next_page_token,您可以了解是否有其他页面可用于附近搜索请求。这可以像下面这样检查:

if (isset($dataArray->next_page_token)) {
  //get next page
}

如果返回 next_page_token,您可以通过将 next_page_token 传递给新搜索请求的 pagetoken 参数来获取下一页结果或将其附加到原始请求的末尾。下面是使用新请求的示例:

$placeSearchURL = 'https://maps.googleapis.com/maps/api/place/textsearch/json?nextpage=' . $dataArray->next_page_token . '&sensor=true' . '&key=' . API_KEY;

作为 documentation状态:

Each page of results must be displayed in turn. Two or more pages of search results should not be displayed as the result of a single query.

因此,从发出 next_page_token 到它生效之间存在短暂的延迟。

关于php - 如何获得超过 20 个结果,即。 60 将 google place API 与 PHP 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13814494/

相关文章:

php - AFNetworking JSON请求不起作用

php - MySQL Join查询贷方余额

android - 道路 googleapi : Some places missing and lines passing through edifices

ios - iOS 版 Google Places API 不允许我取消或选择

php - 如何使用youtube API从首页获取预告片和播放列表

PHP 多个 cookie 在 iPad/iPhone 浏览器上不起作用

ios - 在 tableView 中显示用户评论

javascript - 如何使用 SKU :Basic with google places api?

swift - GMSMapView 上未显示业务 POI,未调用 didTapPOIWithPlaceID

php - 仅显示 mysql 行的最后一个结果