Автоопределение города пользователя на основе GeoIP - версия 3.0

#
Автоопределение города пользователя на основе GeoIP - версия 3.0
Добрый день всем )

Предлагаю вашему вниманию сиквел еще одного старого хита - GeoIp v.2 для HostCMS

Спасибо he100885ldv и BorisK, которые замотивировали меня на портирование этой разработки на HostCMS API v.6

В качестве сервиса для определения по-прежнему используется ipgeobase.ru, формат вызова и возвращаемого результата схожи со старой разработкой, но немного изменены в стилистике нового API. Также, в новом модуле реализовано два уровня кеширования, для предотвращения излишней нагрузки на сервис.

Код модуля, традиционно, размещен в репозитарии на BitBucket - https://bitbucket.org/JamesKotov/geoip-for-hostcms-v.6/overview

Увидеть работу модуля можно на демо-сайте

Скачать последнюю версию - по ссылке https://bitbucket.org/JamesKotov/geoip-for-hostcms-v.6/get/tip.zip

Для установки просто распакуйте скачанный архив в корень вашей системы.

Пример кода для использования модуля:

<?
$sIp = Core_Array::get($_SERVER, 'REMOTE_ADDR', Core_Array::get($_SERVER, 'HTTP_X_FORWARDED_FOR', '127.0.0.1'));
echo 'Ваш IP ' . $sIp;
$oGeoData = Core_Geoip::instance()->getGeoData($sIp);
if (!is_null($oGeoData))
{
   echo 'Ваш город ' . Core_Entity::factory('Shop_Country_Location_City', $oGeoData->cityId)->name;
   echo 'Ваш регион ' . Core_Entity::factory('Shop_Country_Location', $oGeoData->locationId)->name;
   echo 'Ваша страна ' . Core_Entity::factory('Shop_Country', $oGeoData->countryId)->name;
}
else
{
   echo 'Для вашего IP определить регион не удалось';
}
?>
Заказов не беру. Консультирую редко.
#
Re: Автоопределение города пользователя на основе GeoIP - версия 3.0
сегодня сайт http://ipgeobase.ru не работает

и на сайтах данный модуль выдает ошибки

https://yadi.sk/i/nmKvNYLO3GRDcw

как это обойти?
Email: golden-puma@yandex.ru; Skype: golden_puma; Telegram: @GoldenPuma; Сайт: https://goldenpuma.ru
#
Re: Автоопределение города пользователя на основе GeoIP - версия 3.0
Puma, в месте вызова модуля временно заменить строчку
$oGeoData = Core_Geoip::instance()->getGeoData($sIp);

на
$oGeoData = null; //Core_Geoip::instance()->getGeoData($sIp);
Заказов не беру. Консультирую редко.
#
Re: Автоопределение города пользователя на основе GeoIP - версия 3.0
а лучше подключаться через cURL
$oCore_Http = Core_Http::instance('curl')

чтобы не было ошибок, и тогда если нет соединения будет null, а если есть то все ок
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Автоопределение города пользователя на основе GeoIP - версия 3.0
$oCore_Http = Core_Http::instance('curl')

Примечание: корректно работает с версии 6.6.4
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Автоопределение города пользователя на основе GeoIP - версия 3.0
Доброго дня всем. Осмелюсь спросить нет ли у кого решение поиска по локальной базе не обращаясь на http://ipgeobase.ru:7020/geo?ip=194.135.98.198
Уж больно сайт тормозит аж на 3-4 секунды как подключаю пример. Хочется держать у себя локальную базу адресов и по нему вытащить данные.
Вдруг как написал Puma перестанет работать сайт ipgeobase.ru или начнет долго отдавать данные. Что плачевно сайт не откроется тогда во время.
Пробовал сделать поиск как тут https://github.com/rossvs/ipgeobase.php но к сожалению уже база  http://ipgeobase.ru/cgi-bin/Archive.cgi другая.
Буду рад любым подсказкам и решением данного вопроса.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Автоопределение города пользователя на основе GeoIP - версия 3.0
Seri,
что значит база другая, скачиваете архив, там 2 файла (cidr_optim.txt и cities.txt), пример скрипта для поиска по этим файлам тут https://github.com/rossvs/ipgeobase.php/blob/master/ipgeobase.php
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Автоопределение города пользователя на основе GeoIP - версия 3.0
alexpimnev,
Спасибо, с первого раза быстрым обходом не заметил что пример реализован на основе поиска из *.txt файлов. Файлы перевел в БД MySQL стало более понятно, и конечно результат выдачи намного быстрее все же локально.
Интересует вопрос реализовать алфавитный указатель например как на примере например от А до Я по клику на букву выводим фильтром города выбранной страны.
Знаю есть querybuilder и DISTINCT  хочется понять как бы выделить только первые буквы городов в XSL или прямо в MySQL запросе .

Вопрос снят:
SELECT DISTINCT LEFT(`name`, 1) AS name FROM shop_country_location_cities WHERE shop_country_location_id = 175
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Автоопределение города пользователя на основе GeoIP - версия 3.0
Seri,
Будет пустой результат (если конечно вы не переделали таблицу), т.к. shop_country_location_id - это id областей, а 175 это id страны
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Автоопределение города пользователя на основе GeoIP - версия 3.0
alexpimnev писал(а):
Будет пустой результат

Результат
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Авторизация