Портал для веб-мастера
Вход пользователей
Поиск статей
WoWeb.ru » Статьи » Программирование для Web » PHP

Геотаргетинг
Агеев Сергей
03.10.2007г.
Вводная

Любому владельцу сайта интересно, откуда к нему приходят посетители, и эта статья, поможет ему в определении географии аудитории его сайта. Сервис выполняет привязку 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
Автор: Агеев Сергей · Добавлена: 2007-10-03 · Добавил: cimus
Просмотров: 2840 · Рейтинг: 4.5

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Категории раздела
Flash
Apache
WWW
PhotoShop
Веб-дизайн
Раскрутка и реклама
Базы данных
3D графика
Хостинг
Истории веб-мастеров
Web-технологии
Сетевая безопасность
Программирование для Web
Операционные системы

Новые статьи
Лучшие статьи
Популярные статьи
Комментируемые статьи
Разделы сайта
Скрипты
Статьи
Шрифты
Флэш исходники
HTML шаблоны
Партнерки
Клипарты
Смайлы
Фоны
Гифы
Иконки
Опрос сайта
Ведете ли вы блог?
Всего ответов: 59899
Наша кнопка
WoWeb.ru - портал для веб-мастера