понедельник, 5 августа 2013 г.

Геолокация IP адресов и злобные хостеры

Случилось однажды такое, что мне надо было прикрутить к сайту определение региона (области/субъекта РФ/тд.) по IP. Первое что пришло в голову - это воспользоваться уже имеющимся сервисом. После некоторых поисков я остановился на этом замечательном сайте http://ipgeobase.ru/

У них имеются 2 реализации.
http://blog.ipgeobase.ru/?p=37
http://blog.ipgeobase.ru/?p=76

Вроде всё просто, Курлом, отправляем адрес, получаем результат, все довольны. Но после часа-полутора возни выяснилось что на хостинге где живёт нужный сайт, провайтер по каким-то причинам запретил Curl'ом ходить по нестандартным портам (а сервисы ipgeobase у нас висят на 8090 и 7020).

Практически моментально отказавшись от использования всяких прокси, было решено сделать всё на стороне клиента, (а что серверу и так нелегко, ещё и ответ курловый ждать =) ).
А чтобы не дёргать по пустякам сервис, результат сохраняется в куках на неделю.

Код решения.
function get_region(){
 //get_cookie - не стандартная функция и не часть jquery =) при отсутствии нужной куки возвращает null
 var region = get_cookie('region');
 if (region !== null) {
  //делаем свои важные дела
  set_region(region);
 }
 //ip нам услужливо печатает сервер.
 var ip = $("#ip").val();
 $.ajax({
  type: "GET",
  url: "http://ipgeobase.ru:7020/geo?ip="+ip,
  dataType: "xml",
  success: function(xml) {
   $(xml).find('ip').each(function(){
    var reg = $(this).find('region').text();
    //делаем свои важные дела
    set_region(reg);
   });
  }
 });
}


Комментариев нет:

Отправить комментарий