• Страница 1 из 1
  • 1
Геотаргетинг
otpmДата: Пятница, 09.Янв.2009, 23:28 | Сообщение # 1
Admin
Сообщений: 554
« 3 »
Статус: :-(
Вводная

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

Первым делом надо зарегистрировать в системе свой сайт, с которого будут исходить запросы к базе данных. Регистрация по этому адресу http://geo.stat-info.ru/reg.html.
После регистрации на указанный e-mail будет выслан код доступа к базе данных, который нужно указывать при каждом запросе к http://geo.stat-info.ru.

Скрипт

Данный сервис имеет один неприятный момент, а именно ограничение на количество запросов с одного сайта, на момент написания этой статьи можно было послать не более 500 запросов в 1 час. Скорей всего это ограничение сделано для экономии трафика, но нам оно не помешает, т.к. мы будем сохранять результаты обращения к http://geo.stat-info.ru в своей базе данных.
И так, создадим таблицу в MySQL

Code
CREATE TABLE `geo_ip` (
`ip` BIGINT( 10 ) NOT NULL ,
`country` VARCHAR( 35 ) NOT NULL ,
`city` VARCHAR( 35 ) NOT NULL ,
UNIQUE (
`ip`   
)
) TYPE = MYISAM ;

В данной таблице будут храниться IP адреса с привязкой к стране и городу, поле IP имеет тип BIGINT т.к. выгоднее хранить не сам IP адрес, а результат работы функции sprintf('%u',ip2long($ip)).
Получаем IP адрес пользователя

Code
$ip=$_SERVER['REMOTE_ADDR'];

Преобразуем IP адрес

Code
$ip_revers=sprintf('%u',ip2long($ip));

Код, полученный при регистрации на сайте http://geo.stat-info.ru/

Code
$code='хххххххххххххххххххххххххххххххх';

Подключаемся к MYSQL серверу

Code
if(!(@$dblink = mysql_connect('localhost' , 'root' , '')))
   {
   print 'Невозможно подключиться к базе данных!<br>';
   exit();
   }
   

Выбираем кодировку MYSQL сервера

Code
if(!($dbresult=mysql_query("SET NAMES cp1251;", $dblink)))
   {
   print 'Невозможно установить кодировку соединения с базой данных!<br>';
   exit();
   }

Выбираем базу данных

Code
if(!($dbresult=mysql_query("USE TEST" , $dblink)))
   {
   print 'Невозможно выбрать базу данных!<br>';
   exit();
   }

Пытаемся получить информацию по IP адресу из MYSQL

Code
$zapros="SELECT * FROM `geo_ip` where `ip` = $ip_revers";
   if(!($dbresult = mysql_query($zapros, $dblink)))
   {
   print 'Невозможно выполнить запрос к базе данных!<br>';
   exit();
   }
   

Проверяем результат запроса

Code
if(!($result=mysql_fetch_assoc($dbresult)))
   {

Информация о IP адресе в базе данных отсутствует
Создаём XML парсер

Code
$parser=xml_parser_create();

Посылаем запрос к сайту http://geo.stat-info.ru/ и принимаем целый файл (XML)

Code

   $data=file_get_contents("http://geo.stat-info.ru/xml/$ip/$code/");

Обрабатываем результат

Code
  xml_parse_into_struct($parser,$data,$structure,$index);

Удаляем XML парсер

Code
  xml_parser_free($parser);

В цикле обрабатываем структуру XML и получаем нужные данные (город и страну),
т.к. ответ сервера в кодировке UTF-8 то сразу перекодируем в WINDOWS-1251

Code
foreach($structure as $key)
   {
   if($key['tag']=='CITY')
   $result['city']=iconv('UTF-8','WINDOWS-1251',$key['value']);
   elseif($key['tag']=='COUNTRY')
   $result['country']=iconv('UTF-8','WINDOWS-1251',$key['value']);
   }

Далее записываем данные в свою базу данных

Code
  $zapros="INSERT INTO `geo_ip` (`ip`,`country`,`city`) VALUES ($ip_revers,'{$result['country']}','{$result['city']}')";
   if(!($dbresult = mysql_query($zapros, $dblink)))
   {
   print 'Невозможно сохранить результат в базе данных!<br>';
   exit();
   }
   }

В массиве $result содержатся необходимые данные

Code
print '<pre>';
print_r($result);
print '</pre>';

Удачного геотаргетинга wink


Заработок для веб-мастеров
 
  • Страница 1 из 1
  • 1
Поиск:

Счетчик тИЦ и PR