una - usar mysql y php con google maps
Cómo obtener más de 20 resultados ie. 60 usando la API de Google Place con PHP? (2)
Como Chris Green dice en su respuesta, tendrá que usar la paginación para obtener más de 20 resultados. Además, como Chris Green también indica que debe tomar la dirección que realmente no necesita para hacer otra llamada a la referencia de cada lugar. Supongo que necesitará más información, por lo que acabo de crear 2 funciones que implementan lo que Chris dice en su respuesta. No ha sido probado, por lo que puede haber algunos errores pero puede tener la sensación
<?php
function getAllReferences($query, $maxResults= 60, $nextToken = false) {
$references = array();
$nextStr = "";
if ($nextToken)
$nextStr = "nextpage=$nextToken";
$placeSearchURL = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=$query&sensor=true&key=".API_KEY."&$nextStr";
$placeSearchJSON = file_get_contents($placeSearchURL);
$dataArray = json_decode($placeSearchJSON);
if (isset($dataArray->status) &&$dataArray->status == "OK") {
foreach( $dataArray->results as $details) {
array_push($references, $details->reference);
}
if (!empty($dataArray->next_page_token) && count($references) < $maxResults ) {
$nextArray = getAllReferences($query, $maxResults-20 , $dataArray->next_page_token);
$references = array_merge($references, $nextArray);
}
return $references;
}
}
function getPlaceFromReference($reference) {
$placeDetailsURL = ''https://maps.googleapis.com/maps/api/place/details/json?reference='' . $reference . ''&sensor=true&key=''.API_KEY;
$placeDetailsContent =file_get_contents($placeDetailsURL);
$placeDetails = json_decode($placeDetailsContent);
if ($placeDetails->status == "OK")
return $placeDetails;
else return false;
}
$references = getAllReferences("test");
if (count($references) == 0)
echo "no results";
else {
foreach ($references as $reference) {
$placeDetails = getPlaceFromReference($reference);
print_r($placeDetails);
}
}
Estoy desarrollando una aplicación de API de Google Places donde mi objetivo es obtener todos los detalles disponibles de una consulta específica. Pero como sé, la API de Google Places solo devuelve 20 resultados a la vez. Pero necesito todos los detalles de las ubicaciones disponibles.
Si busco con una palabra clave de búsqueda más de una vez, siempre da los mismos resultados. Así que quiero saber que hay alguna manera de obtener resultados diferentes cada vez que busco con la misma palabra clave.
<?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";
}
}
Este es mi código. Devuelve 20 resultados por cada consulta. ¿Alguien puede decirme qué ajuste debo hacer para obtener 60 resultados para cada consulta?
Gracias
La API de Google Places puede devolver hasta 60 resultados por búsqueda si está disponible dividida en tres páginas de hasta 20 resultados. Si hay más de 20 resultados disponibles, puede acceder a los resultados adicionales pasando el next_page_token
al parámetro pagetoken
de una nueva solicitud de búsqueda.
Para obtener más información sobre los resultados adicionales, consulte la sección Acceso a los resultados de la adición en la página Búsqueda de lugares en la documentación.
Si solo necesita ubicaciones de lugares, puede utilizar la Búsqueda por radar de API de Lugares para devolver hasta 200 ubicaciones de lugares.
EDITAR: En su ejemplo, no necesita enviar una solicitud de detalles por cada lugar para acceder al nombre y la dirección del lugar. Esta información se devuelve en la respuesta inicial y se puede acceder a ella como en el siguiente ejemplo:
foreach($dataArray->results as $place) {
echo ''<p><b>'' . $place->name . ''</b>, '' . $place->formatted_address . ''</p>'';
}
Puede averiguar si hay páginas adicionales disponibles para una solicitud de búsqueda next_page_token
se devuelve next_page_token
. Esto se puede comprobar como a continuación:
if (isset($dataArray->next_page_token)) {
//get next page
}
Si se devuelve next_page_token
, puede obtener la siguiente página de resultados al pasar next_page_token
al parámetro pagetoken
de una nueva solicitud de búsqueda o anexarlo al final de su solicitud original. A continuación se muestra un ejemplo utilizando una nueva solicitud:
$placeSearchURL = ''https://maps.googleapis.com/maps/api/place/textsearch/json?nextpage='' . $dataArray->next_page_token . ''&sensor=true'' . ''&key='' . API_KEY;
Como indica la documentación :
Cada página de resultados debe mostrarse a su vez. Dos o más páginas de resultados de búsqueda no deben mostrarse como resultado de una sola consulta.
Por lo tanto, hay un breve retraso entre el momento en que se emite next_page_token
y cuándo será válido.