Часто для b2b-предпринимателей требуется найти потенциальных клиентов. Брать и перелопачивать справочники вручную больше похоже на наказание какого-нибудь сотрудника, который провинился. Попробуем автоматизировать.
Подключаемся к API google.maps
Регистрируемся на https://console.developers.google.com/.
Вводим платежные данные
Подключаем PlacesAPI
Копируем ключ доступа.
Разбираемся в работе
https://developers.google.com/places/web-service/search
Получается, чтобы получить первые 20 ответов по запросу нам надо обратиться по адресу:
https://maps.googleapis.com/maps/api/place/findplacefromtext/json?query=ВАШ_ЗАПРОС&key=YOUR_API_KEY
Чтобы получить следующие 20 ответов берем из полученного массива next_page_token и отправляем запрос по адресу:
https://maps.googleapis.com/maps/api/place/nearbysearch/json?pagetoken=next_page_token&key=YOUR_API_KEY
Таким образом мы получим информацию о названии места, координаты на карте, полный адрес, рейтинг. Но чтобы связаться с клиентом мы же не будем ходить пешком и впаривать наши услуги и товары? Да и вообще когда они работают? Для того чтобы получить эту информацию нам придётся обратиться к детальной информации о месте:
https://developers.google.com/places/web-service/details
Получается чтобы получить детальную информацию о месте нам достаточно обратиться с запросам по url:
https://maps.googleapis.com/maps/api/place/details/json?placeid=PLACE_ID&key=YOUR_API_KEY
PLACE_ID присутствует в search-запросе.
Т.к. search-запрос возвращает нам 20 результатов мы тут же можем попробовать реализовать запрос детальной информации прямо в цикле перебора результатов, 21 запрос в несколько секунд для google думаю не слишком критичен, а для нас существенно упрощает задачу.
Немного покодим
Создадим класс для работы с API:
Class Place{
private $key = 'YOUR_API_KEY';
private $type_data = 'json';
private $language='ru';
function get_detail($place_id){
$arGet=[];
$arGet['language']=$this->language;
$arGet['key'] = $this->key;
$url = 'https://maps.googleapis.com/maps/api/place/details/';
$arGet['placeid'] = $place_id;
return $this->query($url,$arGet);
}
function get_list($q){
$arGet=[];
$arGet['language']=$this->language;
$arGet['key'] = $this->key;
$arGet['fields'] ='opening_hours';
$url = "https://maps.googleapis.com/maps/api/place/textsearch/";
$arGet['query'] = $q;
return $this->query($url,$arGet);
}
function get_token($token){
$arGet=[];
$arGet['language']=$this->language;
$arGet['key'] = $this->key;
$url = "https://maps.googleapis.com/maps/api/place/textsearch/";
$arGet['pagetoken'] = $token;
return $this->query($url,$arGet);
}
function query($url, $arGet){
$sGet = http_build_query($arGet );
$url.=$this->type_data.'?'.$sGet;
$resp = file_get_contents($url);
$resp = json_decode($resp, true );
return $resp;
}
}
Таким образом мы можем создавать экземпляр класса Place и получать 3 типа результатов:
get_detail — получение детальной информации place_id.
get_token — выдача поиска по токену.
get_list — выдача по запросу.
Попробуем составить табличку по запросу ногти Екатеринбург:
$search = "ногти Екатеринбург";
$cPlace = new Place();
$resp = $cPlace->get_list($search);
<?if(isset($resp['status'])){?>
<? if($resp['status']=='OK'){?>
<table>
<? foreach($resp['results'] as $arPLace){?>
<tr>
<td>
<h3><img src="<?$arPLace['icon']?>"><?=$arPLace['name']?></h3>
<div>Рейтинг: <?=$arPLace['rating'];?></div>
<div><?=implode(',',$arPLace['types']);?></div>
<div><?=$arPLace['formatted_address']?></div>
<div><?=implode(',',$arPLace['geometry']['location'])?></div>
</td>
<td>
<? $arPlaceDetail = $cPlace->get_detail($arPLace['place_id']);
$arPlaceDetail = $arPlaceDetail['result'];
?>
<div><?=$arPlaceDetail['website']?></div>
<div><?=$arPlaceDetail['international_phone_number']?></div>
<? if(isset($arPlaceDetail['opening_hours'])){?>
<div>
<?foreach($arPlaceDetail['opening_hours']['periods'] as $period){?>
<?=$period['open']['time']?> — <?=$period['close']['time']?><br>
<?}?>
</div>
<?}?>
</td>
</tr>
<?}?>
</table>
<?}?>
<?}?>
Получаем следующую страничку:
Резюме
Теперь вы можете подключить БД или CRM, сохранить все необходимые данные и сразу же попробовать устроить SMS-рассылку, или всех обзвонить, почему нет?