Рано или поздно каждый из нас сталкивается с вопросом определения города посетителя. Например, чтобы выдавать пользователю цены или наличие товара только для его региона. Да что там посетителя – любого IP, и как раз для этих целей существуют разные базы IP адресов, некоторые из них (как в нашей функции) очень удобно предоставляют данные через API. Правда при этом можно столкнутся с проблемами. Например в некоторых случаях разные все подсетки принадлежат к Москве, а физически находятся в самых разных краях страны. Данный сервис обращается в базе данных Nic. Вот тут можно более подробно изучить информацию о возможных параметрах http://blog.ipgeobase.ru/?p=37 Стоит запрашивать информацию об одних и тех же ip постоянно. Это приведет к бану. Оптимальный вариант – кэш данных на неделю. Вы же не думаете, что провайдер будет переезжать из города чаще?
[sourcecode language=’php’]
function geo_info($ip)
{
$xml = “
. “
$ch = curl_init(“http://194.85.91.253:8090/geo/geo.html”);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
$result = curl_exec($ch);
if(curl_errno($ch) != 0)
die(“curl_errno(“.curl_errno($ch).”), curl_error(“.curl_error($ch).”)”);
curl_close($ch);
if (strpos($result, ‘
return false;
preg_match(“/
return $city[1];
}[/sourcecode]
Очень удобный API сервиса. Примеры применения:
[sourcecode language=’php’]/* Яндекс */
$city = geo_info(“213.180.204.8”); // Выдаст Москва
/* Новосибирский городской сайт */
$city = geo_info(“195.93.187.1”); // Новосибирск
/* Самарский инфопортал */
$city = geo_info(“195.128.128.21”); // Самара
/* Оф. сайт города Владивостока */
$city = geo_info(“93.88.6.150”); // Владивосток
/* “Санкт-Петербург.ру” */
$city = geo_info(“85.235.218.197”); // Санкт-Петербург
/* Неверный IP или данных нет в базе */
$city = geo_info(“000.000.000.000”); // Вернет false
/* IP адрес клиента */
$city = geo_info($_SERVER[“REMOTE_ADDR”]); // Вернет город посетителя
[/sourcecode]