Несколько способов определить примерное местоположение пользователя по 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] => 4834157
[lat] => 4114121
[lon] => -73,26373
[name_ru] => Феърфилд
[name_en] => Fairfield
)
[region] => Array
(
[id] => 4831725
[name_ru] => Коннектикут
[name_en] => Connecticut
[iso] => US-CT
)
[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] => OH
[regionName] => Огайо
[city] => Дублин
[zip] => 43017
[lat] => 40,0992
[lon] => -83,1141
[timezone] => America/New_York
[isp] => Amazon.com, Inc.
[org] => AWS EC2 (us-east-2)
[as] => AS16509 Amazon.com, Inc.
[query] => 3.21.231.245
)
Среди разделов сайта «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] =>
)