логин: 
<< предыдущая заметкаследующая заметка >>
20 апреля 2014
geoip

Восстановил полезную фичу, бывшую когда-то в моем старом движке (еще тех времен, когда он не был публичным движком-проектом, а работал как скрипты /dnevnik) - это геоопределение комментаторов. Теперь в комментариях появились обозначения типа Санкт-Петербург или Los Angeles

Определение происходит при приеме нового комментария, и использую я для этого две фичи: открытый сервис http://ipgeobase.ru/geo?ip=123.456.789.123 и (если он не смог определить страну и город) - то вызов консольной утилиты whois (проверьте, чтоб на вашем сервере она стояла, иначе apt-get install whois) с дальнейшей попыткой определить город. Это сложно, потому что редкий админ настолько дисциплинирован, чтобы указать тэг City: Moscow, обычно пишут тэг Address как бог на душу положит.

Все полученные результаты по диапазону IP, чтоб лишний раз не грузить вопросами внешние ресурсы, записываются в базы geoip и geoipd (в /install позвольте движку их создать).

В комментах отображается флажок страны и (если удалось) город. Для старых комментов есть возможность вручную на ссылку whois и заставить систему принудительно провести проверку IP, отныне записав в базу комментариев уточненные данные по этому IP. Пусть этим развлекаются посетители.

Нюанс: если вы обновляете движок с корневой системы (например, home.lleo.me), а у вас движок не корневой (например, установлен в папку /blog), то вам придется руками (я использую в меню админа "фотоальбом") поправить адрес картинки флажков в /css/sys.css - например в моем случае я ищу конструкцию background: url("/design/flags.png") и исправляю на background: url("/blog/design/flags.png")

PS: Если у вас есть какие-то другие идеи, как точно узнать город для любого IP мира, поделитесь. Разумеется, метод имеется в виду простой, открытый и бесплатный типа вышеупомянутого ipgeobase.ru Потому что концепция движка не предполагает импортировать скачанные в торрентах внешние базы, инсталлировать новый бинарный софт на свой сервер и прочие системные операции руками, которые многим владельцам движка недоступны на их хостинге.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
Страницы, которые привлекли мое внимание за последние дни, рекомендую:
2017-11-22 В июне 1982
архив ссылок
Оставить комментарий
Linux Safari Chrome
 Пермь
0
0
Сергей (#4193956)
Я небось из швеции?
Linux Safari Chrome
 Пермь
0
0
Сергей (#4193956)
Нет флажка. Будем считать отладкой. Можешь удалять
Linux Firefox
 Самара
0
0
mail/ivn86 (ivn86)
Привет из Самары!
Windows Safari Chrome
 Германия
0
0
тест (#4207291)
трест
Windows Firefox
 Австралия
0
0
Читатель (#4207417)
трест-2
Linux Ubuntu Safari Chrome
 New York
1
0
Ыыын (#4195945)
Палево. Каждый сможет узнать то, чего узнать не должен был.
Windows Firefox
 Кения
0
0
Читатель (#4207417)
Да нет никакого палева :)
Я вот только что из Австралии в Кению перелетом.
Windows Firefox
 Москва
0
0
имя (#3630694)
проверка, проверка, разраз
Windows Firefox
 Thornhill
0
0
имя (#3630694)
и ещё раз
Linux Safari Chrome
 Израиль
2
0
braintunic
> apt-get install whois

Ох, сейчас это прочтёт Фыва и разразится полустраничным комментом о врождённой ущербности Линукса на базе Дебиан и о фантастических преимуществах Линукса на базе RPM ;)
Linux Opera
 Москва
1
0
Mike Novikoff
Можно я за него? :) Сформулирую помягче: в самом деле некорректно говорить о дистро-специфичных вещах как о чём-то повсеместном и дефолтном. А вдруг на сервере вообще не линукс, а какой-нибудь BSD? Тем более в данном конкретном случае — утилита с названием whois бывает в нескольких совершенно разных реализациях даже в рамках линукса. Не говоря уже, что знакомство с любым софтом лучше начинать с документации, а не с установки на сервер.
Windows Opera
 Москва
0
0
lleo.me/[email protected] Vlasov
Можно использовать не внешний сервис, а системный пакет geoip, в котором база уже идёт в комплекте (заодно можно будет отказаться от кэширования). Для PHP, судя по мануалу, есть соответствующее расширение:
http://www.php.net/manual/ru/function.geoip-record-by-name.p[...]
И даже если оно не установлено, и установить нельзя, можно просто дёрнуть утилиту geoiplookup, которая по локальной базе выдаст всю инфу.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Тоска. Я же объяснял: представьте, что мой хостинг-провайдер разрешил только скрипты PHP и дал доступ к MySQL объемом до 200мб для моего тарифного плана.
Windows Opera
 Москва
0
0
lleo.me/[email protected] Vlasov
Видимо, пропустил это объяснение.

Только я не уловил, почему запустить whois можно, а geoiplookup — нельзя? Или whois — это только для счастливых владельцев щедрых хостеров с незарезанными правами, к каковым вы не относитесь? И, кстати, стоит всё-таки проверить наличие PHP-расширения: зачастую хостер предоставляет систему с набором расширений, не входящих в умолчальный пакет (как раз на тот случай, когда пользователю хостинга что-то понадобится, а поставить самому — никак).
Linux Firefox
 Москва
0
0
Leonid Kaganov
whois - простой и необязательный сервис, его может у владельца движка не быть, движок продолжит работу.
Windows Firefox
 Нидерланды
0
0
Vitaly (#4250421)
Для базы GeoIP есть официальный php-класс, для работы которого необходимо и достаточно только самого PHP версии 5.2 и выше.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Что-то мне сомнительно, что PHP 5.2 на любом хостинге включает в себя гигантские геобазы всех IP мира.

Кроме того, мой движок работает с PHP от 4. Зачем мне получить сбой движка при попытке оставить коммент о обратиться к геобазе?
Linux Firefox
 Нидерланды
0
0
> Что-то мне сомнительно, что PHP 5.2 на любом хостинге включает в себя гигантские геобазы всех IP мира.

База GeoIP может быть как установлена на сервере в виде пакета geoip, так и загружена вручную в любой каталог на сервере (в т.ч. внутри $document_root), доступный для чтения PHP.

После импорта класса через #include нужно указать размещение файла geoip.dat и затем можно вызывать соответствующие методы в нужных местах.

Преимущество: IP адрес не передаётся на удалённые серверы, а также ускоряется работа основного движка за счёт того, что проверка осуществляется локально.

> Кроме того, мой движок работает с PHP от 4. Зачем мне получить сбой движка при попытке оставить коммент о обратиться к геобазе?

1. Возможно, класс работает и на PHP 4, я не проверял.
2. Серверов с PHP 4 не осталось ибо эта версия давно устарела и имеет сотни критических уязвимостей.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Как мило. И сколько весит база GeoIP в гигабайтах? Сколько будет стоить ее размещение абоненту хостинга?
Linux Firefox
 Нидерланды
0
0
> Как мило. И сколько весит база GeoIP в гигабайтах? Сколько будет стоить ее размещение абоненту хостинга?

[[email protected] geo]$ ls -l
итого 17012
-rw-rw-r-- 1 user user 668134 May 2 19:10 GeoIP.dat
-rw-rw-r-- 1 user user 16745367 May 2 19:10 GeoLiteCity.dat

~652 КБ база по странам, и ~16 МБ - по городам.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Что-то верится с трудом...
Linux Firefox
 Нидерланды
0
0
> Что-то верится с трудом...

Официальный сайт с прямыми ссылками на архивы для загрузки: http://dev.maxmind.com/geoip/legacy/geolite/

У них имеется также новая версия - 2.0, однако я её в своих проектах не использовал ни разу.
Windows IE
 Днепропетровск
0
0
Z (#4207761)
Игдея?
Opera
 Исландия
0
0
Z (#4207786)
Иктоя
Linux Safari
 Днепропетровск
0
0
Z (#4207802)
Изачемя
Linux Safari
 Киев
0
0
Z (#4207802)
Такида
Linux Ubuntu Firefox
 Белоруссия
0
0
meequz
опередил
мой город не распознаётся похоже
Linux Ubuntu Firefox
 Белоруссия
0
0
meequz
и зачем
Windows Firefox
 Санкт-Петербург
0
0
zeboper (#4207915)
попробуем попрыгать я наверное из питера ?
Windows Firefox
 Providence
0
0
zeboper (#4207915)
а теперь - из штатоф ?
Windows IE
 Великобритания
0
0
zeboper (#4207915)
а теперь откуда ? И браузер внезапно(ТМ) сменилсо ...
Windows Firefox
 Санкт-Петербург
0
2
zeboper (#4207915)
а здорово я умею телепортироваться ?
Firefox
 Новосибирск
0
0
test (#4208137)
test
Firefox
 Новосибирск
0
0
test (#4208179)
test2 test3
Firefox
 Montreal
0
0
test (#4208179)
test4
Windows Firefox
 Нижний Новгород
0
0
Проба
Windows Firefox
 Кстово
0
0
Проба
Linux Safari
 Израиль
0
0
Где я?
Linux Safari Chrome
 Washington
0
0
А теперь - через моего провайдера. Заметьте - я честно работаю. Ни каких прокси с моей стороны. Только происки провайдера.
Linux Safari Chrome
 Израиль
0
0
Ну, а здесь что покажет?
Windows Safari Chrome
 Mountain View
0
0
забылотец (#4208396)
Но зачем это все? :)
Windows Safari Chrome
 Самара
0
0
Сергей (#4208486)
Где я?
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
:)
Ты гляди ж, работает :)
Linux Firefox
 Германия
0
0
andpath (#4208515)
Я из Германии?
Linux Firefox
 Германия
0
0
andpath (#4208515)
Леонид, планируется разный контент в зависимости от страны?
Linux Firefox
 Москва
0
0
Leonid Kaganov
При чем тут контент, это комментаторы: IP определяется в момент оставления комментария.
Linux Firefox
 Германия
0
0
andpath (#4208515)
Что страна определяется для комментатора это понятно. Вопрос просто про планы дальнейшего развития, чтоб меньше связываться с разными отечественными Комитетами Контроля Всего и Вся.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Никак не связано.

Поскольку я не занимаюсь противоправной деятельностью, то не вижу никакой необходимости заниматься подпольем. Любая блокировка моего сайта Комитетами Контроля (как и две предыдущие блокировки) снова будет анекдотической и по смехотворному поводу, снова дам ей огласку.
Windows Safari Chrome
 Краснодар
0
0
lleo.me/[email protected]барисыч
должен показать город-курорт Москва
Linux Safari
 Краснодар
0
0
lleo.me/[email protected]барисыч
А вот фиг,ватоматом вашпе не определился, только через who is
Windows Safari Chrome
 Белоруссия
0
0
я не робот. (#4208824)
test
Linux Firefox
 Киев
0
0
[email protected]Дмитрий (kastaneda)
Привет из Киева.
Windows Safari Chrome
 Mississauga
0
0
Сам ты впервые на сайте (#4209212)
Тест
Windows Safari Chrome
 Mississauga
0
0
Сам ты впервые на сайте (#4209212)
Близко но не совсем оно.
Linux Ubuntu Firefox
 Мариуполь
0
0
Владимир Кузьминых
Тест же
Сработало
Windows Firefox
 Франция
0
0
Test (#4209680)
Test
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
Offtop:
ещё один баг прокрался? Тэги не запоминаются при создании заметки... В старых заметках - наличествуют.
Linux Firefox
 Москва
0
0
Leonid Kaganov
это да, беда, я там чуть поменял. будем править
Linux Firefox
 Москва
0
0
Leonid Kaganov
Не, я бы уточнил!

Да, я поправил тэги. Раньше тэги в многопользовательских движках были общие. Теперь - у каждого собственные. Как и положено бы с самого начала.

Для этого добавилась в таблицу тэгов переменная ipn - инсталлятор движка ее попросит создать.

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

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

PS: Поправил сейчас заодно всякие мелкие ошибки и глюки, которые выбрасывали ошибку во время создания новой заметки или не давали подгрузить и раскрыть ленту комментов, если в url была прямая адресация к комменту (типа 2014/04/02.html#123).
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
Ага, после того, как инсталлятор создал поле в таблице - заработало.
Правда по прежнему только один тег на заметку прописывается.
Linux Safari Chrome
 Франция
0
0
toster (#4210167)
Hello world
Linux Ubuntu Firefox
 ATlanta
0
0
Жека (#4210186)
Ну-ка, ну-ка...
Windows Opera
 Johnstown
0
0
Юрий (#4210308)
Все проверяют...
Windows Opera
 Johnstown
0
0
Юрий (#4210308)
Все проверяют...
Windows Opera
 Johnstown
0
0
Юрий (#4210308)
Все проверяют...
Windows Firefox
 Ottawa
0
0
sly2m
Хочу поглядеть на кленовый листок.
Windows Firefox
 Ottawa
0
0
sly2m
Ну, хрен с ним. Оттава так Оттава.
Windows Firefox
 Молдова
0
0
Viktor (#4210352)
Одна страна, один город.
Windows Firefox
 Калуга
0
0
aikr
Ну как тут не попробовать.
Windows Safari Chrome
 Днепропетровск
0
0
lleo.me/[email protected]Толик
Кто сказал "Мяу"?
Windows
 Каменск-Уральский
0
0
D.iK.iJ
Э...
Windows Firefox
 Москва
0
0
p (#4210663)
ping
Windows Firefox
 Казахстан
0
0
кто, я? (#4211044)
Тест
Linux Safari Chrome
 Mountain View
0
0
я (#4211227)
Тест
Windows Safari Chrome
 Santa Clara
0
0
alexeybobkov
тест
Mac Safari
 Москва
0
0
виктор (#4213604)
А ну-ка ?
Mac Safari
 Великобритания
0
0
zakharov75
London, uk
Windows Firefox
 Schaumburg
0
0
МЕЯ ВИДО?
Windows Safari Chrome
 Санкт-Петербург
0
0
тест (#4192529)
тест
Linux Ubuntu Firefox
 Москва
0
0
another user (#4092984)
test
Windows Firefox
 Подольск
0
0
а12 (#4242208)
просто тест
Windows Firefox
 Германия
0
0
а12 (#4242208)
просто еще тест
Windows Safari Chrome
 Львов
0
0
Ш. (#4250496)
А здесь ленточка ещё есть…
Linux Firefox
 Москва
0
0
Leonid Kaganov
И здесь уберем из темплейта {_MAY9:_}
Windows Firefox
 Россия
0
0
трямпампам (#4253955)
.
Windows Firefox
 Москва
0
0
Vitalij (witalij)
test

Нахабино
Linux Safari Chrome
 Санкт-Петербург
0
0
Константин (#4256634)
Есть еще сервис http://freegeoip.net/xml/217.66.157.119
Есть ограничение - 10 тысяч запросов с одного хоста в час. Можно поднять свою собственную копию сервиса, программа открыта https://github.com/fiorix/freegeoip
Linux Firefox
 Москва
0
0
Leonid Kaganov
О! Спасибо!
Linux Firefox
 Москва
0
0
Leonid Kaganov
А, нет, сорри, совершенно бесполезная вешь. В большинстве случаев не дает никакой ценой информации - город не определяет, вдобавок не показывает диапазон адресов (а значит, я не смогу закэшировать результат в своей локальной базе дабы в дальнейшем не бегать по чужим серверам).

http://freegeoip.net/xml/85.250.117.196

<Response><Ip>85.250.117.196</Ip><CountryCode>IL</CountryCode><CountryName>Israel</CountryName>
<RegionCode/>
<RegionName/>
<City/>
<ZipCode/>
<Latitude>31.5</Latitude>
<Longitude>34.75</Longitude>
<MetroCode/>
<AreaCode/>
</Response>

Смысл? Узнать код страны я и без этой бормотушки могу.
Linux Safari Chrome
 Кипр
0
0
ccc (#4059671)
test
Windows Safari Chrome
 Исландия
0
0
arkub (#4282868)
Определяю местонахождение по IP адресу: Исландия. А я с Урала, из Екатеринбурга. В чем прикол?
Linux Safari Chrome
 Mountain View
0
0
Test

всего комментариев: 92

<< предыдущая заметка следующая заметка >>