Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov

Скрипт геотаргетинга. Геотаргетинг для сайта

Когда Вам понадобится геотаргетинг для сайта, т.е. когда Вам будет нужно определить откуда ваш посетитель, чтобы предложить ему зависимые от его города условия, Вы можете воспользоваться представленным здесь скриптом геотаргетинга.

Для получения гео-положения посетителя Вы можете воспользоваться следующим скриптом геотаргетинга на основе API

<?
echo file_get_contents('http://htmlweb.ru/geo/api.php?html&ip='.get_ip().'&api_key=API_KEY_из_профиля');

function get_ip(){
    $ipa=[];
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))$ipa[] = trim(strtok($_SERVER['HTTP_X_FORWARDED_FOR'], ','));
    if(isset($_SERVER['HTTP_CLIENT_IP']))$ipa[] = $_SERVER['HTTP_CLIENT_IP'];
    if(isset($_SERVER['REMOTE_ADDR']))$ipa[] = $_SERVER['REMOTE_ADDR'];
    if(isset($_SERVER['HTTP_X_REAL_IP']))$ipa[] = $_SERVER['HTTP_X_REAL_IP'];
    // проверяем ip-адреса на валидность начиная с приоритетного.
    foreach($ipa as $ips) //  если ip валидный обрываем цикл, назначаем ip адрес и возвращаем его
    if(is_valid_ip($ips)) return $ips;
    return false;
}
function is_valid_ip($ip=null){
    //if( !empty( $ip ) && filter_var( $ip, FILTER_VALIDATE_IP ) )
    if(preg_match("#^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$#", $ip))
        return true; // если ip-адрес попадает под регулярное выражение, возвращаем true
    return false; // иначе возвращаем false
}

?>

Большинство API функций сервиса htmlweb.ru совершенно бесплатны. Идентификация нужна для исключения злоупотреблений и позволяет разделить количество запросов от разных пользователей. Ограничения на бесплатные запросы и тарификация описана здесь.

Для идентификации используется API_KEY из_профиля. API_KEY может быть передан как GET так и POST запросом.
Не размещайте ключ API_KEY в открытом доступе и в javascript. Он фактически заменяет ваши логин пароль и дает возможность использовать весь функционал нашего сайта от вашего аккаунта, включая платные функции.

Ключи выбора формата:

  1. html - HTML-формат.
  2. json - JSON-формат
  3. xml - XML-формат

Для указания кодирования ответа в нужном вам формате добавьте в запрос параметр html или json или xml, например:

http://htmlweb.ru/geo/api.php?ip=IP_АДРЕС&html&charset=utf-8&api_key=xxxx

При возврате в формате JSON возврашается заголовок header('Access-Control-Allow-Origin: *') - разрешающий кроссдоменные запросы.

Ключ выбора кодировки charset=:

  1. windows-1251 по умолчанию всё отдается в кодировке utf-8
  2. utf-8 unicode - кодировка UTF-8. Пример: charset=utf-8
  3. а также другие: koi-8, ISO-8859-1, ISO-8859-15, cp866, cp1252, KOI8-R

fields - какие поля включать в ответ, например:
http://htmlweb.ru/geo/api.php?ip=IP_АДРЕС&sql=pb_city&fields=id,name,english,area,rajon,country

Если Вам нужен другой формат или другая кодировка, а также обо всех найденных проблемах и пожеланиях сообщайте нам.



Структура API запроса для получения информации по ip адресу:

http://htmlweb.ru/geo/api.php?html&ip=IP_АДРЕС&api_key=API_KEY_из_профиля

Структура API запроса для получения информации по ip адресу в json-формате:

http://htmlweb.ru/geo/api.php?json&ip=IP_АДРЕС&api_key=API_KEY_из_профиля

Для получения информации о текущем ip укажите пустое значение ip:

http://htmlweb.ru/geo/api.php?html&ip&api_key=API_KEY_из_профиля

Для получения краткой информации укажите параметр short:

http://htmlweb.ru/geo/api.php?html&short&ip&api_key=API_KEY_из_профиля

Для получения дополнительной информации из регистрационной базы данных(Whois) укажите параметр whois:

http://htmlweb.ru/geo/api.php?html&whois&ip&api_key=API_KEY_из_профиля

Пример для получения информации в html-формате с Вашим API_KEY:

http://htmlweb.ru/geo/api.php?html&ip&api_key=НЕДОСТУПНО_БЕЗ_РЕГИСТРАЦИИ

Ответ для html:

Город: Ростов-на-Дону (rostov-na-donu) Wiki
Регион: Ростовская область Wiki, Областной центр: Ростов-на-Дону
Округ: Южный федеральный округ
Страна: Россия RU Wiki(Российская Федерация, Russia, ISO:643) , Столица Москва 1
Часть света: Европа
Код страны(2): RU
Код страны(3): RUS
Широта: 47.233189
Долгота: 39.715000
Телефонный код страны: +7
Телефонный код города: 863
Автомобильный код региона: 61,161
Временная зона(Time Zone,UTC,GMT): +4
Осталось 50 запросов до 21:05:58 09.10.2013

Краткий (short) html-ответ:

Город: Ростов-на-Дону
Регион: Ростовская область
Округ: Южный федеральный округ
Страна: Россия

Ответ для json:

{   'ip':'93.178.64.171',
'country_id':'RU',
'country':'Россия',
'region_id':49,
'region':'Ростовская область',
'region_iso':'',
'okrug':'Южный федеральный округ',
'rajon':'',
'rajon_id':0,
'city_id':1711,
'city':'Ростов-на-Дону',
'city_english':'rostov-na-donu',
'city_telcod':863,
'latitude':'47.233189',
'longitude':'39.715000',
'autocod':'61,161',
'capital2_id':1711,
'capital2':'Ростов-на-Дону',
'fullname':'Российская Федерация',
'english':'Russia','country_code3':'RUS',
'iso':643,'country_telcod':7,
'location':'Европа','capital_id':1,
'capital':'Москва','time_zone':4,
'upd':'1373297221',
'limit':50
}

Краткий (short) json-ответ:

{   'country_id':'RU',
'country':'Россия',
'region_id':49,
'region':'Ростовская область',
'okrug':'Южный федеральный округ',
'rajon_id':0,
'rajon':'',
'city_id':1711,
'city':'Ростов-на-Дону',
'limit':50
}

Параметр limit - определяет количество оставшихся запросов до конца суток


.