GeoIP — Блог Валерия Леонтьева https://valera.ws Место публикации личных заметок. Технологии, управление, бизнес, жизнь Sun, 26 Dec 2010 18:04:20 +0000 ru-RU hourly 1 https://wordpress.org/?v=5.6.2 https://valera.ws/wp-content/uploads/2020/02/favicon.png GeoIP — Блог Валерия Леонтьева https://valera.ws 32 32 Информер погоды от Яндекса с определение города по IP (обновление 2) https://valera.ws/2010.12.26~weather-informer-3/ https://valera.ws/2010.12.26~weather-informer-3/#comments Sun, 26 Dec 2010 18:02:35 +0000 http://valera.ws/?p=518 Читать далее Информер погоды от Яндекса с определение города по IP (обновление 2) ]]> Вчера я вновь обновил свой старый сервис, который позволяет показывать пользователям сайта информер погоды в том городе, где они находятся. Все подробности по этому поводу в старой записи.

Недавно Яндекс поменял формат кода информера, который он выдает на странице http://weather.yandex.ru/informer.xml. После этого сервис перестал обрабатывать новые коды. И вот сейчас все вновь работает в штатном режиме.

Полученные ранее информеры продолжают работать без перебоев.

А вот в файле настроек, который нужно размещать на том сервере, где размещается информер, исправлена ошибка в JS коде. В связи с этим, файл настроек необходимо обновить.

Спасибо всем, кто писал свои замечания по поводу работы сервиса. Именно благодаря одному из пользователей удалось заметить, что Яндекс обновил формат кода.

Обо всех замечаниях по работе проекта просьба писать мне на e-mail: feedbee@gmail.com.

]]>
https://valera.ws/2010.12.26~weather-informer-3/feed/ 5
Информер погоды от Яндекса с определение города по IP (обновление) https://valera.ws/2010.11.21~informer-pogody-ot-yandeksa-s-opredelenie-goroda-po-ip-obnovlenie/ https://valera.ws/2010.11.21~informer-pogody-ot-yandeksa-s-opredelenie-goroda-po-ip-obnovlenie/#respond Sun, 21 Nov 2010 20:59:59 +0000 http://valera.ws/?p=432 Читать далее Информер погоды от Яндекса с определение города по IP (обновление) ]]> Сегодня обновил свой старый сервис, который позволяет показывать пользователям сайта информер погоды в том городе, где они находятся. Все подробности в старой записи по этому поводу.

Обновлено:

  • исправлена ошибка, которая в последнее время неприятно сказывалась на работе сервиса;
  • все переведено на UTF-8
  • обновлены списки городов и стран Яндекс.Погоды

Если вы используете старый файл настрое (полученный до 22 ноября), его необходимо обновить.

Сам сервис: http://ru.commontools.net/geoip/ya.weather.get.html

UPD. Было проведено еще одно обновление сервиса.

]]>
https://valera.ws/2010.11.21~informer-pogody-ot-yandeksa-s-opredelenie-goroda-po-ip-obnovlenie/feed/ 0
Информер погоды от Яндекса с определение города по IP (готовый код) https://valera.ws/2008.04.05~weather-informer/ https://valera.ws/2008.04.05~weather-informer/#comments Sat, 05 Apr 2008 18:39:57 +0000 http://valera.ws/2008.04.05~weather-informer/ Читать далее Информер погоды от Яндекса с определение города по IP (готовый код) ]]> Недавно я заинтересовался темой отображения информера от Яндекс.Погоды посетителю сайта в соответствии с его местоположением. Сам информер Яндекса показывает погоду только в том городе, который выбрал веб-мастер сайта. На практике смысла в таком информере мало (описано в предыдущей статье). Следовательно надо саому определять город, в котором находится посетитель, и выводить ему нужный информер. В процессе изучения темы, я пришел к выводу, что кроме GeoLite City от MaxMind и CNGeoIP нормальных world-wide баз IP->Город нет. Однако, для взаимодействия с сервисом Яндекса база GeoLite City не подходит.

Таким образом, пришлось остановиться на базе CNGeoIP. Была куплена версия базы и на ней был построен алгоритм получения кода города для информера по IP посетителя. Написанный скрипт работает тут: http://ru.commontools.net/geoip/ya.w.js. Определяется город по IP пользователя, проводится сравнение с базой Яндекса и выводится id города и страны для информера в виде: var yaCountry=20;var yaCity=26850; Скрипт естественно работает на стороне сервера и выводит только id для JS. А на странице с информером скрипт включается в HTML-код страницы через <script src=»…»>. Далее другой незамысловатый скриптик подставляет переменные в код вызова информера и на картинке отображается погода в городе, в котором находится посетитель сайта. Под ней ссылка на настройки информера, где посетитель сможет выбрать другой город, а информация сохранится в cookies.

Итак, результат трудов доступен в виде оттестированной stable-версии. Страничка получения кода находится здесь: http://ru.commontools.net/geoip/ya.weather.get.html. Это страница для получения кода информера. На ней описано, как код получить и прикрутить к сайту.

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

Посмотреть, как информер работает, можно уже сейчас в моем блоге.

P.S. Для любопытных. Домен commontools.net является исключительно вспомогательным, на нем никогда не были и не будут никакие сайты. Только сервисы для собственного и общественного потребления.

UPD. Стадия бета-тестирования завершена. Уже более 7 месяцев информер успешно работает на множестве сайтов, по этому заявляю о стабильности версии. Обновлений пока не планируется, потому что обновлять-то нечего. Если Яндекс поменяет свой алгоритм, тогда-то и будем обновлять.

Постоянно обновляется база IP. На декабрь 2008 работает ноябрьская версия.
UPD2. Сервис обновлен.

]]>
https://valera.ws/2008.04.05~weather-informer/feed/ 14
Использование базы IP по городам от MaxMind https://valera.ws/2008.04.01~ip-to-city/ Tue, 01 Apr 2008 18:02:04 +0000 http://valera.ws/2008.04.01~ip-to-city/ Читать далее Использование базы IP по городам от MaxMind ]]> Используем базу IP по городам GeoLite City от MaxMind. Зона покрытия этой базы описана здесь. Лицензия проста как кактус: пользуйтесь на здоровье, даже в коммерческих целях, но все рекламные материалы и документация к продукту должны содержать фразу: «This product includes GeoLite data created by MaxMind, available from http://maxmind.com/». Ну и как обычно — никаких гарантий. От платной версии free-базу отличает чуть-чуть худшее покрытие. Но нам это не мешает.

Данная библиотека существует в виде PECL-расширения, которое не идет в стандартном наборе с PHP. Если модуль у вас на сервере установлен, пользуйтесь им, если нет — используйте библиотеку отдельно. Кстати, API базы есть для разных языков.

В репозитории PEAR находится библиотека для доступа к файлу базы. А сам файл базы необходимо скачать с сервера и ежемесячно обновлять. Скачали базу, скачали API. Распаковали базу (файл GeoLiteCity.dat и каталог GeoIP). Каталог GeoIP нужно положить в каталог Net (последний создать), или изменить строку 663 строку в файле GeoIP.php.

База готова к эксплуатации. Посмотрите, как работает пример отпределения IP посетителя сайта по базе. Вот код примера (index.php):

<?php 
    print "Search Started<br \>\r\n";    

    require('GeoIP.php'); 
    $geoip = Net_GeoIP::getInstance('GeoLiteCity.dat', Net_GeoIP::STANDARD); 
    $data = $geoip->lookupLocation( 
        isset($_SERVER['HTTP_REMOTE_ADDR']) ? $_SERVER['HTTP_REMOTE_ADDR'] : $_SERVER['REMOTE_ADDR'] //nginx? 
    );   

    if ( is_null($data) ) 
        print "Region wasn't found!<br \>\r\n"; 
    else 
        print "Found! You are from {$data->city}, {$data->countryName}<br \>\r\n";   

    print "© 2008, <a href=\"https://valera.ws/\">feedbee</a><br />\r\n";   

    print "This product includes GeoLite data created by MaxMind, available from <a href=\"http://www.maxmind.com/\">http://www.maxmind.com/</a>.";   

?>

Обратите внимание, что если не найден IP в базе, будет возвращен NULL. Но вомзможен случай, когда не будет найден только город, а страна найдется. В этом случае $data->city вернет NULL.

]]>
Коды городов Яндекс.Погоды https://valera.ws/2008.03.31~ya-weather/ Mon, 31 Mar 2008 19:21:45 +0000 http://valera.ws/2008.03.31~ya-weather/ Читать далее Коды городов Яндекс.Погоды ]]> На сайте Яндекс.Погода существует сервис информеров. При установке к себе на сайт информера, необходимо выбрать город, который будет на информере отображаться. А как показать на информере не выбранный город, а город, в котором находится посетитель?

Прогноз на сервисе от Яндекса довольно точный. Я пользуюсь им постоянно. Потому и выбрал информер на свои сайты именно от этого сервиса. Он красивый, информативный, стабильный (Яндекс падает крайне-…-крайне редко).

Однако, при установке к себе на сайт информера, необходимо выбрать город, погода в котором будет на информере отображаться. Хорошо, если вся тусовка на сайте — посетители из одного города. А что если нет (наверное 98% случаев)? Например, аудитория блогов обычно абсолютно разбита по разным странам, не говоря уже о городах. Тогда такой информер не очень практичен, ведь мало кому интересна погода в вашем регионе.

Выхода из ситуации три. Первый проще, но решает только половину проблемы. При регистрации пользователя в системе, заставляйте его вводить город. И если город совпадет со списком Яндекса, который я подготовил в текстовом виде, то выводите ему соответствующий информер. Можно тот же список использовать и в качестве автоподстановки в поле ввода города при регистрации. Половину проблемы решает, потому что работает только после регистрации.

Второй выход — использование базы городов по IP-адресам. Но следуюет учитывать, что базы такие платные, их надо постоянно обновлять и данные в них точны лишь с какой-то степенью (например, 90%). Ну и не стоит забывать, что некоторые используют анонимные прокси. Базы: MaxMind GeoIP® City DatabaseCNGeoipIP2City.

Третий выход самый простой, но у него есть большой недостаток. Собственно, по порядку. Вы вешаете информер с каким-то городом по умолчанию. Под ним (или над ним) делает ссылку «Настроить регион». Или даже вместо самого информера по умолчанию можно разместить эту ссылку. Человек на нее кликает, ему выдается список городов от Яндекса. Посетитель выбирает свой город, информация сохраняется в cookie пользователю. А при следующей загрузке страницы сайта информация из куков подставляется в информер, и посетитель видит погоду с родном городе. Большой минус этого способа в том, что он применим только на сайте с постоянной аудиторией. Т.к. посетители тех же блогов обычно быстро уходят с сайта и редко к нему возвращаются, поэтому давать им настройку информера просто нет смысла. (Поэтому я в своем блоге не стал это делать.)

01.04.08: Рализация для 2+3 варианта уже написана. Предсталена страница с работающим кодом на JS, который сохраняет настройки в cookies. Вы можете использовать страницу на своих сайтах (открывайте HTML-код и внедряйте его себе).

Пример кода информера (красным выделен код города — подставляется в 2 места):

<a href=»http://www.yandex.ru/redir?dtype=stred&pid=7&cid=1228&url=http://weather.yandex.ru/index.xml?city=7737«><img src=»http://info.weather.yandex.net/informer/175×114/7737.png» border=»0″ alt=»Яндекс.Погода»/><img width=»1″ height=»1″ src=»http://www.yandex.ru/redir?dtype=stred&pid=7&cid=1227&url=http://img.yandex.ru/i/pix.gif» mce_src=»http://www.yandex.ru/redir?dtype=stred&pid=7&cid=1227&url=http://img.yandex.ru/i/pix.gif» alt=»» border=»0″/></a>

Список городов брал с сайта Яндекс.Погоды. Выловилось почему-то только 1676 из 1681 заявленого на сайте. Перевод сделан через Переводчик Google. Файл состонит из 3 столбцов: 1) код города по Яндексу, 2) название города по Яндексу (на русском), 3) перепод по Гуглу на английский. В переводе есть спец-символы в UTF, вместо которых в csv-версии символы вопроса. Сохранен в 4-х вариантах: 1) файл Excel, 2) текст с разделителем табуляция (UTF-16), 3) текст с разделителем табуляция (UTF-8), 4) CSV в cp1251. Только не спрашивайте, почему сделал так, просто выберите себе подходящий формат и конвертируйте его как угодно.

По наличию времени я реализую несколько способов, описанных выше и выложу в блог код. Но пока решил выложить список городов и рассказать идеи, на случай, если кто-то еще подхватит написание кода и добьется успеха в реализации, а потом поделится кодом со всеми ;) Да и сам-то код можно написать на разных языках программирования.

]]>