Ваш IP: 54.82.73.21
К сожалению, не можем определить координаты.

Архив рассматриваемых подпрограмм доступен для скачивания по адресу: http://geoip.elib.ru/Clients/geoip_client_pl.zip

Этот архив содержит библиотеку на языке Perl (файл geoip_client.pl) для работы с нашими сервисами. Он содержит две подпрограммы и примеры их использования. Рассмотрим более детально:

geoip_client_mini

Определяет географическое местоположение пользователя по IP адресу с использованием сервиса mini. Подпрограмме передается IP адрес, для которого необходимо получить информацию и уникальный код сайта, полученный при регистрации сайта в «Личном кабинете«. После отправки запроса на сервер и получения ответа, подпрограмма возвращает массив данных содержащий:

Порядковый
номер
элемента
массива
Значение элемента
0 Код ошибки
1 Географическая широта [градусы]
2 Географическая долгота [градусы]
3 Название населенного пункта

 

Пример вызова:

require 'geoip_client.pl';
my $sid = '1A2B3C4D';
my $ip = $ENV{REMOTE_ADDR} || '213.252.105.46';
my ($err,$lat,$lon,$town) = &geoip_client_mini($ip,$sid);
print "ip=$ip :: ";
if ( $err ) { print "err=$err\n"; }
else { print "Вы находитесь $lat с.ш. $lon в.д. это $town\n"; }

В строке 1 подключаем файл библиотеки. В строке 2 задаем переменной $sid уникальный код сайта, полученный при регистрации в «Личном кабинете«. В строке 3 определяем IP адрес для которого будем запрашивать информацию (адрес клиента, либо некий адрес по-умолчанию) и помещаем его в переменную $ip. В строке 4 вызываем подпрограмму geoip_client_mini  и передаем ей в качестве параметра переменную $ip, определенную в строке 3, и переменную $sid, содержащую идентификатор сайта, заданный в строке 2.  После отправки запроса на сервер и получения ответа, подпрограмма возвращает массив данных, описанный выше, и помещает его в переменные ($err,$lat,$lon,$town). В строках 5-7 выводим полученные данные.

Ниже приведен исходный код подпрограммы geoip_client_mini

sub geoip_client_mini
{
use LWP::UserAgent;

my @data;
my $data;
my $err = 0; # код ошибки

my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->new(GET => "http://geoip.elib.ru/cgi-bin/getdata_mini.pl?ip=$_[0]&sid=$_[1]");
my $response = $ua->request($request);
if ( $response->is_success )
  {
   $data = $response->content;
   if ( $data =~ /^E.*/ ) { $err = substr($data,1); }
   else { @data = split(/\r*\n/,$data); }
  }
else { $err = 200; }
return ($err,@data);
}

 

geoip_client

Определяет географическое местоположение пользователя по IP адресу с использованием полноценного сервиса.

Пример вызова:

require 'geoip_client.pl';
my $opt = '1ffff';
my $sid = '1A2B3C4D';
my @ips = ('213.252.105.46','87.255.23.236','92.122.190.82');
my ($err,$addr) = geoip_client(\@ips,$opt,$sid);
while (($ip,$info) = each %{$addr})
  {
   %{$info}->{Error} ?
   printf "%-16s %24s\n","$ip","Error: ".%{$info}->{Error} :
   printf "%-16s %-10f %-10f %-20s %-25s %-10s %-10s\n","$ip",
     %{$info}->{Lat},%{$info}->{Lon},%{$info}->{Town};
  }

В строке 1 подключаем файл библиотеки. В строке 2 присваиваем переменой шестнадцатиричное значение информационных опций (подробное описание информационных опций приведено на странице «Описание основного сервиса«). В строке 3 задаем переменной $sid уникальный код сайта, полученный при регистрации в «Личном кабинете«.  В строке 4 задаем массиву @ips список IP адресов, для которых будем запрашивать информацию. В строке 5 осуществляем вызов подпрограммы geoip_client. Для этого подпрограмме передается ссылка на массив @ips, список информационных опций, заданных в виде шестнадцатиричного числа и переменная $sid, содержащая уникальный код сайта. После отправки запроса на сервер и получения ответа, подпрограмма возвращает массив данных из двух элементов содержащий код ошибки и ссылку на структуру представляющую собой хеш хешей (т.е. хеш содержащий ссылки на хеши с информацией по запрошенным IP адресам). В строках 6-12 перебираем полученный хеш с помощью функции each и выводим информацию по адресам.  В результате получаем массив из IP адреса и ссылку на хеш информации по этому адресу. Для вывода только одного значения, например названия региона для IP адреса 87.255.23.236, возможно использовать конструкцию вида:

%{$addr}->{'87.255.23.236'}->{Region};

Ниже приведен исходный код подпрограммы geoip_client

sub geoip_client
{
use LWP::UserAgent;

my $err = 0; # код ошибки
my $ips = join(",",@{$_[0]});

sub addr_info
{
my $block = $_[0]; my %addr_info;
$addr_info{$1} = $2 while ( $block =~ m{<(\w+)>(.+?)</\1>}gs );
return \%addr_info;
}

my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->new(GET => "http://geoip.elib.ru/cgi-bin/getdata.pl?ip=$ips&hex=$_[1]&sid=$_[2]");
my $response = $ua->request($request);
if ( $response->is_success )
  {
   $_=$response->content;
   if ( m{<GeoIP>\n<(Error)>(\d+)</\1>}gs ) { $err = $2 }
   else { while ( m{<(\w+) IP=\"([\d|\.]+)\">(.+?)</\1>}gs ) { $addr{$2} = &addr_info($3) } }
  }
else { $err = 200; }
return ($err,\%addr);
}

 

Работа по протоколу SOAP

Для работы с сервисом через протокол SOAP мы рекомендуем использовать модуль SOAP::Lite (доступен на CPAN.org). Для вызова метода GetDataMini, использующего mini-сервис, достаточно включить в Вашу программу следующий код:

Пример вызова:

use SOAP::Lite;

$service = SOAP::Lite
   -> uri  ('http://geoip.elib.ru/GeoIP')
   -> proxy('http://geoip.elib.ru/cgi-bin/getdata_soap.pl')
   -> GetDataMini('87.255.23.236');

print join(',',$service->paramsout);
print "\nERR: ".$service->result."\n\n";

В строке 1 подключаем модуль SOAP::Lite. В строках 3-6 вызываем метод GetDataMini для получения информации об IP адресе 87.255.23.236. В строке 8 выводим через запятую всю полученную информацию. В строке 9 выводим код ошибки.