[ Сообщений: 105 ] 
Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
СообщениеДобавлено: 11 дек 2008, 16:37 
Эксперт
Аватара пользователя

Сообщения: 235
Поблагодарили: 17 раз.
В общем решение найдено:
Код:
<?
$geoIP="88.215.136.0/23";   

$ip=explode("/",$geoIP);
$mask=0xFFFFFFFF;
for ($j=0;$j<32-$ip[1];$j++) $mask=$mask<<1;
$lip=ip2long($ip[0]);    

$ip_start=$lip&$mask;
$ip_end=($lip&$mask)+(~$mask);

echo $ip_start." - ".$ip_end;
// выдаст 1490520064 - 1490520575
?>


Таким образом диапозоны IP есть, коды насёлённых пунктов есть. Реализация задачи - как два пальца об асфальт )))

Последний раз редактировалось vitocool2 11 дек 2008, 16:49, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 16:48 
Эксперт
Аватара пользователя

Сообщения: 276
Поблагодарили: 16 раз.
Или так, кому как больше нравится, результаты одинаковые:
Код:
<?php
$geoIP="88.215.136.0/23";

list($firstip, $mask) = explode("/", $geoIP);
$firstip = sprintf("%u\n", ip2long($firstip));
$lastip = $firstip + pow(2, (32-$mask)) - 1;

print long2ip($firstip)." - ".long2ip($lastip);
?>


Для корректного вычисления
Код:
$firstip = ip2long($firstip);

заменен на
Код:
$firstip = sprintf("%u\n", ip2long($firstip));


Связано с тем, что , цитирую: Since PHP uses signed ints you got a negative number on X86 where signed ints are limited to 2147483647 and your result is >3 billion.

Теперь можно систематизировать эту информацию - как распарсить geo-nginx.map и получить id региона, и в хелп, задача ведь стандартная.

Последний раз редактировалось Евгений 14 дек 2008, 21:21, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 21:14 
Аватара пользователя

Сообщения: 104
Поблагодарили: 0 раз.
Код:
// geoip
function geoip($IP) {
if (preg_match_all("!^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$!si", $IP, $match)) {
$bits['a']=implode($match[1]);
$bits['b']=implode($match[2]);
$bits['c']=implode($match[3]);
$bits['d']=implode($match[4]);
} else return 0;
$error = 0;
if (!($bits['a'] >= '0' and $bits['a'] <= '255')){$error=1;}
if (!($bits['b'] >= '0' and $bits['b'] <= '255')){$error=1;}
if (!($bits['c'] >= '0' and $bits['c'] <= '255')){$error=1;}
if (!($bits['d'] >= '0' and $bits['d'] <= '255')){$error=1;}
if ($error == 0) {
$ADDRESS = $bits['a']*256*256*256+$bits['b']*256*256+$bits['c']*256+$bits['d'];
$master_file='cidr_ru_master_index.db';
$master_record=file($_SERVER['DOCUMENT_ROOT']."/lib/geoip/".$master_file);
$master_index=0;
foreach($master_record as $key=>$master_new_record) {
//$new_record=trim($new_record);
list($start,$stop,$inetnum,$country,$city,$region,$district,$status,$slave,$n_slave) = preg_split('!\t!', $master_new_record);
$master[$master_index] =array("start" => $start,"stop" => $stop,"inetnum" => $inetnum,"country" => $country,"city"=>$city,"region"=>$region,"district"=>$district,"status" => $status,"slave" => $slave,"n_slave" => $n_slave);$master_index++;
}
foreach($master as $key=>$new_master) {
if ($ADDRESS>=$new_master['start'] && $ADDRESS<=$new_master['stop']) $NEW_ADDRESS_0=$new_master;
}
if (!empty($NEW_ADDRESS_0)){
$slave_file='cidr_ru_slave_index.db';
$slave_record=file($_SERVER['DOCUMENT_ROOT']."/lib/geoip/".$slave_file);
$slave_index=0;
$min=$NEW_ADDRESS_0['slave'];
$max=$min+$NEW_ADDRESS_0['n_slave'];
while($min<$max){
$slave_record[$min]=trim($slave_record[$min]);
@list($start,$stop,$inetnum,$country,$city,$region,$district,$status,$rest) = preg_split('!\t!', $slave_record[$min]);
$_slave[$slave_index]=array("start" => $start,"stop" => $stop,"inetnum" => $inetnum,"country" => $country,"city"=>$city,"region"=>$region,"district"=>$district,"status"=>$status);$slave_index++;$min++;}
foreach($_slave as $key=>$new_slave) {
if ($ADDRESS>=$new_slave['start'] && $ADDRESS<=$new_slave['stop']) $NEW_ADDRESS_1=$new_slave;
}

if (!empty($NEW_ADDRESS_1)) return $NEW_ADDRESS_1; else return $NEW_ADDRESS_0;
}
return 0;
}
return 0;
}


вот такое работает, где
$master_file='cidr_ru_master_index.db';
$slave_file='cidr_ru_slave_index.db';

cidr_ru_master_index.db, cidr_ru_slave_index.db - базы диапазонов

на выходе, например, массив с страной Ru , регионом Москва итд
базы диапазонов хотел бы прикрепить но нет возможности..

Меня что коробит, вот представьте такую ситуацию, яндекс индексирует страничку, соответсвенно своим алгоритмам выдает в поиске результат по запросу, заинтересованный человечек переходит и что он видит? Где информация которую он ожидал увидеть? Он и слыхом не слыховал о геотаргетинге и ему наплевать на наши с вами заморочки. Закрывает сайт. И о каком повышении кач-ва площадки вы говорите?
Что-то данный геотаргетинг мне напоминает схему из черного сео,когда в зависимости от нужд поиску выдается одна информация ...юзерам другая...
Для начала я хотел бы увидеть возможность выставления заглушки средствами самой системы в случае если ип реферера не соотв геотаргетину, а не перекладывать все на партнеров. По остальному партнеры сами со временем решат, что им выгодней, удобней и тп.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 21:26 
Эксперт
Аватара пользователя

Сообщения: 2192
Поблагодарили: 2 раз.
Atomic писал(а):
заинтересованный человечек переходит и что он видит?

Видит он надпись типа «сорри, для вашего региона нет подходящих предложений; если интересно, можете посмотреть предложения для Москвы». Это например.

А по поводу клоакинга — так ведь представители поисковых систем сами неоднократно говорили о том, что уместный и полезный клоакинг допускается.

Atomic писал(а):
выставления заглушки средствами самой системы

Это как? Писать «сорри, это предложение не для тебя, вернись обратно»? Как мы это делаем, когда товар устарел?

_________________
Денис Иванов, экс-Миксмаркет
upyrj@ya.ru

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 21:29 
Эксперт
Аватара пользователя

Сообщения: 276
Поблагодарили: 16 раз.
Atomic, сдается мне, этот код будет тормозить и нагружать сервер. cidr_ru_slave_index.db весит 11 мб. Каждый раз перечитывать файлы не рационально. Или я что-то недопонял? :?

Может для обсуждения реализации алгоритма отдельную ветку в форуме создать?

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 21:40 
Сотрудник Миксмаркета
Аватара пользователя

Сообщения: 79
Поблагодарили: 1 раз.
Цитата:
cidr_ru_master_index.db, cidr_ru_slave_index.db - базы диапазонов

на выходе, например, массив с страной Ru , регионом Москва итд


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

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 21:47 
Аватара пользователя

Сообщения: 104
Поблагодарили: 0 раз.
Цитата:
Видит он надпись типа «сорри, для вашего региона нет подходящих предложений; если интересно, можете посмотреть предложения для Москвы». Это например.

...кликает, загружается страница, а там таких надписей, как грязи и нет информации. (если реклам понравится такой "таргетинг" и он пойдет в массы).
Цитата:
Это как? Писать «сорри, это предложение не для тебя, вернись обратно»? Как мы это делаем, когда товар устарел?

Все лучше, чем "халявные" переходы.

Цитата:
А по поводу клоакинга — так ведь представители поисковых систем сами неоднократно говорили о том, что уместный и полезный клоакинг допускается.

Ссыль на первоисточник в студию, будьте любезны.
Евгений при великой посещаемости можно запустить через базы, распарсив это добро, но думаю нагрузка, так или иначе, будет не маленькая. (Широка страна моя родная ;))

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 21:49 
Эксперт
Аватара пользователя

Сообщения: 276
Поблагодарили: 16 раз.
ilyaska писал(а):
Не забывайте, что приведенные файлы содержат информацию только про российские подсети. Соответственно для геотаргетирования Украины, Белоруссии и прочих стран этого недостаточно.

В хелпе они указаны как дополнительные источники, правильнее будет использовать http://mixmarket.biz/geo-full.xml и http://mixmarket.biz/geo-nginx.map.gz, на их основе уже что-то строить.

Atomic писал(а):
при великой посещаемости можно запустить через базы, распарсив это добро, но думаю нагрузка, так или иначе, будет не маленькая. (Широка страна моя родная Wink)

Нагружать будет по-любому, но если через базу, то нагрузка существенно снизится, главное не забыть создать индексы на соответствующих полях таблицы.
Кстати, в geo-nginx.map сейчас 261182 строки, столько же будет и в таблице. Ерунда какая.

Последний раз редактировалось Евгений 11 дек 2008, 22:03, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 21:56 
Сотрудник Миксмаркета
Аватара пользователя

Сообщения: 79
Поблагодарили: 1 раз.
Цитата:
в хелпе они указаны как дополнительные источники, правильнее будет использовать http://mixmarket.biz/geo-full.xml и http://mixmarket.biz/geo-nginx.map.gz, на их основе уже что-то строить


Верно!

Ну и повторюсь, при использовании nginx вы убьете двух зайцев.

1. Строить ничего не придется, все уже готово, только обновляй базу раз в месяц

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

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 22:00 
Эксперт
Аватара пользователя

Сообщения: 276
Поблагодарили: 16 раз.
ilyaska писал(а):
2. Нагрузка даже снизится, если дополнительно настроить его так, чтобы он отдавал всю статику, а за динамикой уже направлял пользователя к апачу

как установить nginx в качестве фронтэнд:
http://blog.kovyrin.net/2006/05/18/ngin ... y/lang/ru/
http://server-help.ru/?p=14

А в этой динамике появится переменная (допустим $_SERVER['HTTP_X_GEO']), которую устанавливает nginx в своем конфиге?

Последний раз редактировалось Евгений 11 дек 2008, 22:25, всего редактировалось 2 раз(а).
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 22:04 
Сотрудник Миксмаркета
Аватара пользователя

Сообщения: 79
Поблагодарили: 1 раз.
Цитата:
в этой динамике появится переменная (допустим $_SERVER['HTTP_X_GEO']), которую устанавливает nginx в своем конфиге?


Естественно, апач видит эту переменную окружения, иначе зачем бы это все нужно было :lol:

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 22:05 
Аватара пользователя

Сообщения: 104
Поблагодарили: 0 раз.
Евгений можно проверять скриптом на этапе клика...раз админы ставить заглушку не хотят, поставим сами ))) но опять же там проблемы с реферами могут начаться...проходили, знаем.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 22:34 
Эксперт
Аватара пользователя

Сообщения: 2192
Поблагодарили: 2 раз.
Atomic писал(а):
Ссыль на первоисточник в студию, будьте любезны.

Эмм... От Садовского это я лично слышал, кажется, на конференции. Про Гуглю — не помню источника.
Кстати, есть еще такой вариант: «неправильным» посетителям можно показывать все то же самое, но не давать ссылок. Просто писать «не доставляется в %user_region%».
Atomic писал(а):
Евгений можно проверять скриптом на этапе клика...раз админы ставить заглушку не хотят, поставим сами ))) но опять же там проблемы с реферами могут начаться...проходили, знаем.

При обычном серверном редиректе (ответ 301 или 302) никаких проблем с реферами не бывает.

_________________
Денис Иванов, экс-Миксмаркет
upyrj@ya.ru

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 22:34 
Эксперт
Аватара пользователя

Сообщения: 276
Поблагодарили: 16 раз.
Atomic писал(а):
можно проверять скриптом на этапе клика...раз админы ставить заглушку не хотят, поставим сами ))) но опять же там проблемы с реферами могут начаться...проходили, знаем.


В смысле отсекать неугодных рекламодателей? Да ну, посетители сайта ни в чем же не виноваты, зачем над ними так издеваться.
Офф
Вот эта хрень мне всегда не нравилась:
ivanov писал(а):
... «сорри, это предложение не для тебя, вернись обратно»? Как мы это делаем, когда товар устарел?

уж лучше бы отправляли на главную страницу магазина.
Правда лечится регулярным обновлением прайса.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 дек 2008, 22:43 
Эксперт
Аватара пользователя

Сообщения: 276
Поблагодарили: 16 раз.
ivanov писал(а):
такой вариант: «неправильным» посетителям можно показывать все то же самое, но не давать ссылок. Просто писать «не доставляется в %user_region%».

Ага, и вместо ссылки "не ссылка". Тупо покликали, а она не кликается, плюнули и закрыли сайт :)

_________________
видеорецепты

Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
 [ Сообщений: 105 ] 

   Похожие темы   Ответы   Автор   Просмотры   Последнее сообщение 
В этой теме нет новых непрочитанных сообщений. Геотаргетинг в "где купить"

в форуме Микс-Товары

2

Rabbit.93

6282

25 июн 2011, 10:16

Rabbit.93 Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Когда можно ждать реально работающий геотаргетинг?

[ На страницу: 1, 2 ]

в форуме Миксмаркет в развитии

16

SergeZ

16673

27 ноя 2008, 13:19

mager Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Геотаргетинг и партнеры с нероссийским АйПи (проблема) +

в форуме Микс-Юни

8

maslov

8660

03 май 2011, 20:37

maslov Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Хороший геотаргетинг здесь http://j.mp/adprofy_ru

в форуме Микс-Юни

0

ignadmis

790

09 апр 2016, 13:23

ignadmis Перейти к последнему сообщению

В этой теме нет новых непрочитанных сообщений. Снижена наценка за геотаргетинг для Москвы и Московской обл

в форуме Микс-Товары

0

Odaria

6472

24 ноя 2014, 16:33

Odaria Перейти к последнему сообщению



Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения


О проекте Новости Пресса о нас Сотрудничество Вакансии Контакты
2005–2011 Партнерская сеть Миксмаркет
Разработка сайта — iji-design / AdLabs
Powered by phpBB Group