[ Сообщений: 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

5915

25 июн 2011, 10:16

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

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

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

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

16

SergeZ

15987

27 ноя 2008, 13:19

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

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

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

8

maslov

8246

03 май 2011, 20:37

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

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

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

0

ignadmis

488

09 апр 2016, 13:23

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

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

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

0

Odaria

5977

24 ноя 2014, 16:33

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



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


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