Несколько способов определить примерное местоположение пользователя по IP-адресу.
Sypex Geo – продукт для определение местоположения посетителя по IP-адресу, распространяется по лицензии BSD, т. е. является абсолютно бесплатным. Получив IP-адрес, Sypex Geo выдает информацию о местоположении посетителя – страну, регион, город, географические координаты из локальной базы данных, которая периодически обновляется.
Пример использования:
<?php
include_once __DIR__ . '/SxGeo/SxGeo.php';
$SxGeo = new SxGeo(__DIR__ . '/SxGeo/SxGeoCity.dat', SXGEO_BATCH | SXGEO_MEMORY);
$res = $SxGeo->getCityFull($_SERVER['REMOTE_ADDR']);
print_r($res);
Результат:
Array
(
[city] => Array
(
[id] => 4207400
[lat] => 3284069
[lon] => -8363240
[name_ru] => Макон
[name_en] => Macon
)
[region] => Array
(
[id] => 4197000
[name_ru] => Джорджия
[name_en] => Georgia
[iso] => US-GA
)
[country] => Array
(
[id] => 225
[iso] => US
[lat] => 3976
[lon] => -9850
[name_ru] => США
[name_en] => United States
)
)
IP Geolocation API – бесплатен для некоммерческого использования, ключ к API не требуется. Сервис возвращает данные в формате JSON, XML, CSV, Newline, PHP (serialize) по GET-запросу.
Ограничения
45 запросов в минуту с одного IP-адреса, при превышении лимита будет отдаваться 429-я ошибка до тех пор, пока не будет сброшено ограничение. Если вы постоянно превышаете лимит, ваш IP-адрес будет заблокирован на 1 час.
Пример использования:
<?php
$ch = curl_init('http://ip-api.com/json/' . $_SERVER['REMOTE_ADDR'] . '?lang=ru');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
$res = json_decode($res, true);
print_r($res);
Результат:
Array
(
[status] => success
[country] => США
[countryCode] => US
[region] => VA
[regionName] => Виргиния
[city] => Ашберн
[zip] => 20149
[lat] => 39,0438
[lon] => -77,4874
[timezone] => America/New_York
[isp] => BellSouth.net Inc.
[org] => AWS EC2 (us-east-1)
[as] => AS14618 Amazon.com, Inc.
[query] => 98.80.143.34
)
Среди разделов сайта «DaData.ru» есть сервис «Город по IP-адресу», после регистрации по ключу можно получить детальную информацию о городе, в том числе почтовый индекс.
Бесплатен до 10 000 запросов в сутки, максимум 20 запросов в секунду.
<?php
$ch = curl_init('https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address?ip=' . $_SERVER['REMOTE_ADDR']);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
$res = json_decode($res, true);
print_r($res);
Результат:
Array
(
[location] =>
)