Рано или поздно каждый из нас сталкивается с вопросом определения города посетителя. Например, чтобы выдавать пользователю цены или наличие товара только для его региона. Да что там посетителя – любого 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]