Как получить имена результатов из Google Maps Api Search в PHP

1

У меня есть такой url, который ищет что-то в месте:

https://maps.google.com/maps?q=dentist+Austin+Texas&hl=en&mrt=yf=l

Мне нужен список первых двух результатов, таких как ("Dentist Mr.Example1", "Dentist Ex.2").

Наблюдение за этим вопросом: какие параметры следует использовать в URL-адресе Google Maps для перехода на lat-lon? , Я думаю, что URL правильный.

И наблюдая за этим: Получите широту и долготу автоматически, используя php, API. Я пробую эти два варианта:

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($data);

а также это:

 $content= file_get_contents($url);
preg_match_all("|<span class=\"pp-place-title\">(.*?)</span></span>|",$content,$result);

В обоих случаях у меня нет никаких результатов. Заранее спасибо!

Теги:
google-maps

1 ответ

2
Лучший ответ

У меня есть такой url, который ищет что-то в месте:

https://maps.google.com/maps?q=dentist+Austin+Texas&hl=en&mrt=yf=l

Мне нужен список первых двух результатов, таких как ("Dentist Mr.Example1", "Dentist Ex.2").

Это запрос API Карт Google.

Ну вот:

$searchTerm = 'dentist+austin+texas';

$url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $searchTerm;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);

$array = json_decode($response, true);

// var_dump($array);

// Output

$array = $array['results'];

foreach($array as $index => $component)
{
    echo '#' . $index . ' ' . $component['formatted_address'] . '<br>';

    // show only the first 2 items (#0 & #1)
    if($index === 1) {
        break;
    }
}

Некоторые примечания:

  • Ваш поисковый запрос - "dentist Austin textas", который становится "дантистом + austin + texas", когда он является частью URL-адреса.
  • SearchTerm привязан к URL-адресу API.
  • Этот URL-адрес используется для запроса cURL.
  • Необработанный ответ - $ response.
  • Он превращается в массив $, устанавливая второй параметр json_decode() в true.
  • Вы можете var_dump() массив увидеть ключи. Или просто назовите этот URL-адрес в браузере: https://maps.googleapis.com/maps/api/geocode/json?address=dentist+austin+texas
  • Для части дисплея: это просто итерация массива. Вы можете избавиться от массива "результатов" верхнего уровня, переназначив значения в массив $.
  • Результатом является нумерованный список стоматологов

Ссылка: https://developers.google.com/maps/documentation/geocoding/


Это почти идеально, но я хотел бы получить также номер телефона и рейтинг (звезды для обзоров).

Первоначальный вопрос состоял в том, чтобы перечислить первые результаты для стоматологов в austin, tx, используя API Карт Google.

Это дополнительное требование изменяет API/webservice для использования, чтобы получить богатые данные. Вы хотите получить более подробную информацию об адресах. Элементы данных "phone_number" и "рейтинг" являются частью веб-сервиса Google Places (сведения о месте). Чтобы получить доступ к этой службе, вам необходимо добавить свой ключ к URL-адресам запроса (&key=API_KEY).

https://developers.google.com/places/webservice/details#PlaceDetailsRequests

Это запрос на детали места:

1) С первого запроса вы извлекаете "place_id".

2) С последующими запросами вы получаете информацию о каждом месте через веб-сервис "Детали места".

Пример: здесь я использую placeid для первой записи:

Новый код:

<?php

// Google GeoCode API
$address = 'dentist+austin+texas';

$array = getGoogleGeoCode($address);
$array = $array['results'];

//var_dump($array);

foreach($array as $index => $component)
{
    echo '#' . $index . ' ' . $component['formatted_address'] . ', ' ;

    // subsequent request for "Place Details"
    $details = getGooglePlaceDetails($component['place_id']);
    $details = $details['result'];
    //var_dump($details);

    echo 'Phone: ' . $details['formatted_phone_number']. ', ' ;

    // rating contains the place rating, from 1.0 to 5.0, based on aggregated user reviews.
    if(isset($details['rating'])) {
        echo 'Rating: ' . $details['rating'];
    }

    // show only the first two entries
    /*if($index === 1) {
        break;
    }*/

    echo '<br>';
}

function getGooglePlaceDetails($placeid)
{
    // your google API key
    $key = 'AIzaSyCj9yH5x6_5_Om8ebAO2pBlaqJZB-TIViY';
    $url = 'https://maps.googleapis.com/maps/api/place/details/json?placeid=' . $placeid . '&key=' . $key;

    return curlRequest($url);
}

function getGoogleGeoCode($address)
{
    $url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $address;

    return curlRequest($url);
}

function curlRequest($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

Результат:

Изображение 174551

  • rating элемента массива не всегда присутствует, потому что он проверяется на основе. Просто используйте var_dump($details); чтобы увидеть, что там, и выбрать то, что вам нужно.
  • Чтобы уменьшить список, удалите комментарии вокруг оператора break.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню