Погода по ip на Joomla. jWeather by IP

12
[Удален]
672

Просматривая топики серча, пришел к выводу, что наибольшей популярностью здесь пользуется WordPress... да, но и джумлаводов на форуме немало. Возможно, именно их заинтересует краткая аннотация очередного релиза jWeather by ip; это Joomla-модуль, предоставляющий веб-администратору сайта гибкие возможности управления показом текущего состояния погоды, актуальной для геотаргетинга посетителя сайта. Собсно, получился виджет, при создании кода которого старался руководствоваться соответствием MVC Joomla (возможно, не все в курсе, но по доке Joomla - это MVC-фреймворк), и общепринятому в среде разработки code style. В итоге (хотя про итог рано, модуль находится в перманентном развитии) получилось симпатичное поделие, вполне в духе (надеюсь) идеологии Joomla.

На данный момент модуль поддерживает интеграцию с тремя погодными станциями: WorldWeatherOnline, OpenWeatherMap и Dark Sky. Ранее был еще и американский Weather Underground, но публичный доступ к его API, к сожалению, недавно был закрыт.

Сразу про условия доступа к API weather stations:

1. WWO предоставляет бесплатный триал на 60 дней, после которых, кхм... никто и ничто вам не помешает открыть, при желании, новый (позвольте я уж сразу открытым текстом и без экивоков? - только что в очередном письме получил в очередной раз "Sorry Alex, its a bit hazy for me. If my 60 days trial will end, I'll have to start paying them? Or will jWeather somehow keeps on working without paying them?").

2. У OpenWeatherMap один из самых щедрых, вероятно, API: до 60 запросов в минуту бесплатно. Думаю, для начала неплохо? Про качество погодных данных OpenWeatherMap написано немало, если будет интерес - без проблем сможете составить собственное мнение. Имхо, скажем так, на крепкую троечку.

3. Только что дописал клиента API Dark Sky, тестирую его погодный forecast у себя в блоге. Впечатления хорошие. Dark Sky считается весьма неплохой погодной станцией: 1000 бесплатных запросов в день, конечно, не торт, но для блога сойдет. Интересная деталь: в отличие от двух других погодных станций, Dark Sky не предоставляет собственных изображений, иллюстрирующих состояние погоды, поэтому в модуль добавлены иконки, которые крайне несложно заменить на свои собственные, соответствующие индивидуальному дизайну сайта. Еще один плюс в пользу Dark Sky: по умолчанию модуль отображает единицы измерения погодных условий (Цельсиус, Фаренгейт, ряд других), исходя из геотаргетинга посетителя сайта.

Теперь о геолокации. По старинке и невзирая ни на какие псевдополитические реалии, jWeather продолжает поддерживать работу с украинским SypexGeo: админ сайта способен выбрать между REST API SypexGeo и загрузкой локального файла db, содержащего актуальную информацию о диапазонах IP. Все работает даже без регистрации, но с регистрацией - бесплатностей, понятное дело, больше. К сожалению, большого значения все сказанное на данный момент не имеет: все больше и больше нареканий на работу SypexGeo, форум поддержки давно перестал отвечать на реплики пользователей. Если ничто не изменится, SypexGeo проживет недолго, и это будет жаль.

В качестве альтернативы SypexGeo в модуль добавлена поддержка IpGeolocation, это довольно известный сервис геолокации. Чуть ранее использовался еще и американский MaxMind, но вследствие некоторых технических проблем пришлось от него отказаться; надеюсь, это временно. В любом случае, геолокация в современном интернете не проблема.

Админка модуля позволяет сконфигурировать, повторюсь, довольно многое: от стилей шрифтов до выбора целого ряда отображаемых погодных характеристик, плюс время восхода/заката луны/солнца (это пока только в контексте WWO станции). Одна из последних реализованных фичей модуля - возможность, при желании, отображать погоду на карте Google: сама карта при этом, естественно, центрируется геотаргетингом пользователя сайта. Т.е. получилось что-то похожее на реинкарнацию погодного слоя Google Map, deprecated несколько лет назад. Язык карты соответствует выбранному в панели управления Joomla языку сайта: русский или английский, то же самое и об отображаемой модулем погодной информации. В довершение вкусностей возможно включение js, выводящего произвольное приветствие в зависимости от локального времени посетителя.

Модуль можно отревьюить, при желании, в Joomla Extension Directory, глянуть код - на гитхабе, откуда и скачать; в ReadMe присутствует ссылка на мой блог, где возможно полюбоваться парочкой демок и тоже ссылка на загрузку. Излишне говорить, все open source и бесплатно.

Samail
На сайте с 10.05.2007
Offline
361
#1
keepersheet:
В любом случае, геолокация в современном интернете не проблема.

Проблема актуальные базы найти. Из перечисленных сервисов, мой город правильно определяет только MaxMind. Ну и сам Гугл.

[Удален]
#2
Samail:
Из перечисленных сервисов, мой город правильно определяет только MaxMind. Ну и сам Гугл.

Определение города - неосновная фича модуля, запрос погодных данных реализован по координатам. Географические широта и долгота вашей местности тоже неправильно определяются IPGelocation?

Кстати, не подскажете ли, какие сервисы геолокации адекватно определяют ваш город, кроме Maxmind и Google? Порекомендуйте, пожалуйста, все кто может, исходя из собственного своего опыта.

Samail
На сайте с 10.05.2007
Offline
361
#3
keepersheet:
Географические широта и долгота вашей местности тоже неправильно определяются IPGelocation?

Конечно, координаты же берутся того города который определился, а он в другом регионе вообще.

keepersheet:
Кстати, не подскажете ли, какие сервисы геолокации адекватно определяют ваш город, кроме Maxmind и Google?

Таких которые правильно определяют и где можно бесплатно скачать базу не попадались. А там где нужно запросы делать, вот ту правильно: https://www.geoplugin.com/webservices/json хотя у них базы MaxMind и есть.

Ну и Яндекс карты тоже. А так если у вас карта гугла всё равно грузится, то наверное по ней тоже можно местоположение посетителя определить. На Яндекс картах это легко делается https://tech.yandex.ru/maps/jsapi/doc/2.1/dg/concepts/geolocation-docpage/ на Гугле не пробовал, наверное тоже не сложно. Плюс в том, что там можно не только по IP определять, но и по местоположению устройства, на телефоне с точностью до улицы определяет.

[Удален]
#4

Samail, ткните, пожалуйста, сюда, работая без прокси. Из трех баз, с к которым подключена карта, вашу геолокацию правильно определяет только Maxmind? IPGeolocation указывает куда-то не туда? насколько велика ошибка для IPGeolocation? поймите правильно, название местности меня сейчас не интересует. Только маркер на карте.

Samail
На сайте с 10.05.2007
Offline
361
#5
keepersheet:
Из трех баз, с к которым подключена карта, вашу геолокацию правильно определяет только Maxmind?

Да.

keepersheet:
насколько велика ошибка для IPGeolocation?

Вот на столько: https://prnt.sc/oqlbun

Раньше этот пул адресов был у Владивостока, но в 2013 передали Хабаровску, однако до сих пор почти везде определяется как Владивосток, а кое-где как Казань к ней тоже этот пул IP относился ещё раньше.

T7
На сайте с 19.09.2018
Offline
63
#6

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

keepersheet:
Из трех баз

https://prnt.sc/oqmmag 3 из 3-х, MaxMind верно. Судя по

$reader = new Reader('GeoLite2-City.mmdb');

город определяется не платным решением (Downloadable Database: $100 for site license, includes first month of updates. Updates are available for $100 или $0.002 per query), тем не менее делает это хорошо. Резюме для меня: Базы обновлять надо (см. $_SERVER для того же самого IP внизу, где возраст базы пара-тройка месяцев )

Samail:
А там где нужно запросы делать, вот ту правильно: https://www.geoplugin.com/webservices/json

Тоже более-менее верно определяет https://extreme-ip-lookup.com/json. И вот этот http://ip-api.com/json

Samail:

Ну и Яндекс карты тоже .... tech.yandex.ru/maps/jsapi/doc/2.1/dg/concepts/geolocation-docpage

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

Я в итоге остановился на следующем алгоритме:

const geoprovider = {

#key: [url, priority]
eil: ['https://extreme-ip-lookup.com/json/', .9],
geoplugin: ['https://www.geoplugin.com/webservices/json', .9],
ipapi: ['http://ip-api.com/json', .8],
geobytes: ['http://gd.geobytes.com/GetCityDetails', .2],
geoiplookup: ['https://json.geoiplookup.io/api', .2]
}

По одному перебираются (на каждый новый хит) и если нет в storage.objGet(), получаем json по урлу и если он валидный пишем storage.objSet( key, get_adres(json_res) ).

Как только откроется какая Яндекс карта на сайте, запишется 'ya_geo' в storage с приоритетом 1**

В итоге, получаем вероятностную оценку города.

Ну и GeoLite2-City, куда же без него с приоритетом как у Яндекса

Array

(
[SERVER_SOFTWARE] => nginx/1.16.0
[SCRIPT_NAME] => /index.php
[REQUEST_METHOD] => GET
[GEOIP_POST] => 422189
[GEOIP_LAT] => 55.0038
[GEOIP_LON] => 50.0549
[GEOIP_REGION] => Tatarstan
[GEOIP_CITY] => Chelny
[GEOIP_COUNTRY_NAME] => Russian Federation
[GEOIP_COUNTRY_CODE] => RU
[REQUEST_TIME] => 1565374544
)

Чуть порезанный $_SERVER, но заметьте, это 5 вариант геопозиции для моего IP с 2-3 месячными данными GeoLite2-City

**

function ya_geolocation() {

var yamaplink = 'https://api-maps.yandex.ru/2.1/?lang=ru_RU';
$.getScript( yamaplink, function( data, textStatus, jqxhr ) {
if(jqxhr.status==200) {
ymaps.ready(
function(){
var geoloc = ymaps.geolocation;
geoloc.get({
provider : 'yandex',
king : 'locality',
mapStateAutoApply: true
}).then(function (res) {
geolocation.ya = get_adres(res.geoObjects.get(0));
storage.objSet('ya_geo', geolocation.ya );
});
}
);
}
});
}
Это, вроде, пока работает без APIKEY

Некоторые данные в CODE вырезаны, приведены лишь для иллюстрации идеи

[Удален]
#7
timo-71:
город определяется не платным решением

Да.

timo-71:
Как только откроется какая Яндекс карта на сайте, запишется 'ya_geo' в storage с приоритетом 1**
В итоге, получаем вероятностную оценку города.
Ну и GeoLite2-City, куда же без него с приоритетом как у Яндекса.
Некоторые данные в CODE вырезаны, приведены лишь для иллюстрации идеи.

Идея, имхо, имеет несколько незавершенный вид: вы буквально полшага не дошли до того, чтобы произнести словосочетание "нейронная сеть". Согласны? Геотаргетинг посетителей, да и реалии работы служб геолокации ведь перманентно изменчивы, и приоритеты оптимально выставлять не вручную, а с учетом постоянной динамики.

Описал простенькую нейронку с живой ее демкой в этой теме; в принципе, один в один соответствует вашей идее:

#key: [url, priority]

Но позволю себе высказать всего лишь одно сомнение, сполна передаваемое фразой "а нафига".

Есть ли смысл объединять десяток-другой-третий бесплатных решений в одно, вычислять приоритеты /нейронные связи, получая таким образом искомый результат? если поставленная задача столь серьезна, что требует максимально исключить возможные погрешности в определении геотаргетинга объекта - не лучше ли ограничиться одним решением, пусть даже коммерческим, а не заниматься постройкой бизнес-логики на зыбком фундаменте перебора приоритетов бесплатных неопределенностей?

Maxmind хорош, кто бы спорил.

Samail
На сайте с 10.05.2007
Offline
361
#8
timo-71:
Тоже более-менее верно определяет https://extreme-ip-lookup.com/json. И вот этот http://ip-api.com/json

Первый правильно, второй меня только через прокси пускает и определяет неправильно (по моему IP).

[Удален]
#9
Samail:
Первый правильно, второй меня только через прокси пускает и определяет неправильно (по моему IP).

От добра добра не ищут, впечатлился бесплатными ста двадцатью запросами в минуту и базами Maxmind, ну и добавил поддержку geoPlugin в модуль. В принципе, то что надо. SypexGeo совсем сдыхает походу, Сингапур с Грецией путает...

P.S. Меня уже довольно давно многие англоязычные веб-ресурсы пускают только через прокси. Причем ресурсы эти - ресурсы сугубо программистов, не имеющие отношения к политике. Кстати, и РКН здесь ровно ни при чем, прямая инициатива владельцев. Такая вот фигня, не буду развивать эту тему в подробностях... хотя так и подмывает развить.

Samail
На сайте с 10.05.2007
Offline
361
#10

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий