Я уже как-то рассказывал как можно простейшим образом грабить погоду с Gismeteo.ru. Интерес к этой статье не угасает. Более того, это чуть ли не самая популярная статья в моем блоге. Поэтому я решил сделать подарок любителям погодных информеров и пользователям MODx. Я представляю вам полнофункциональный сниппет граббера погоды с гисметео.ру.
Внешний вид информера gismeteo
Нет, информер не выводит сразу все это. Это четыре темы, которые идут в комплекте.
Это подводит на с к первой особенности сниппета. Он использует для управления выводом темы. Сам сниппет инициализирует переменные и константы, грабит xml погоды, парсит его и подключает тему. Остальную работу делает она. То есть, сырые данные приходят в тему. Там с ними можно делать все что угодно. Хоть на их основе страницы формировать.
Так как темы не зависят от самого сниппета, они могут формировать вывод по им одним известным алгоритмам. Это значит, что поддержка шаблонов зависит от реализации темы. Возможность поддержки шаблонов заложена в сниппет, но тема может игнорировать эту возможность. Именно так ведет себя одна из тем пакета — Silk.
Сниппет умеет работать с кэшем. Данные на gismeteo.ru обновляются 4 раза в сутки. И наш сниппет ходит за данными не больше 4 раз в сутки. Это уменьшает зависимость от скорости передачи данных между серверами. Снижает нагрузку на gismeteo.ru (это вежливость).
Три из четырех тем содержат пакеты иконок.
Поддерживается многоязычность. Конечно, слово "Москва" будет передаваться в urlencode и по-русски. Но никто не мешает заменить его в теме на Moscow, например.
В простейшем случае, вызов выглядит так:
[[Gismeteo]]
Этот код выведет данные для Москвы в теме по-умолчанию (Silk). Чаще всего, вам достаточно просто сменить тему.
Наиболее полный вызов:
[[Gismeteo? &theme=`Tango` ®ion=`99970` &lang=`ru` &tpl=`my-weather-tpl`]]
Этот код выведет погоду на русском языке для Подольска с использованием темы Tango, но пользовательским шаблоном, хранящимся в чанке с именем "my-weather-tpl".
[+ico+] — урл картинки для текущей погоды. Выглядит как-то так: /assets/snippets/gismeteo/Silk/$ico.png нужно использовать как 'src' для <img> [+weekday+] — день недели [+hour+] — Час, на который составлен прогноз [+tod+] — время суток [+date+] — дата в формате dd.mm [+phenomena_cloudiness+] — облачность [+phenomena_precipitation+] — осадки [+phenomena_rpower+] — интенсивность осадков, если они есть. 0 — возможен дождь/снег, 1 — дождь/снег [+phenomena_spower+] — вероятность грозы, если прогнозируется: 0 — возможна гроза, 1 — гроза [+pressure_max+] — максимальное давление [+pressure_min+] — минимальное давление [+temperature_max+] — максимальная температура [+temperature_min+] — минимальная температура [+wind_min+] — минимальная скорость ветра [+wind_max+] — максимальная скорость ветра [+wind_direction+] — направление ветра в румбах, 0 — северный, 1 — северо-восточный, и т.д. [+relwet_max+] — максимальная относительная влажность в процентах [+relwet_min+] — минимальная относительная влажность в процентах [+heat_min+] — температура воздуха по ощущению одетого по сезону человека, выходящего на улицу [+heat_max+] [+town+] — название населенного пункта [+fulldate+] — дата в формате dd.mm.yyyy [+yyyy+] — год в формате yyyy [+yy+] — год в формате yy [+dd+] — день в формате dd [+d+] — день в формате d [+m+] — месяц в формате m [+mm+] — месяц в формате mm [+smonth+] — месяц в виде строки.
Код из файла MODx-Gismeteo.php нужно вставить в новый сниппет, который назвать Gismeteo.
На сервере нужно положить содержимое папки gismeteo в папку /assets/snippets/
Ну и наконец:) скачать сниппет граббера Gismeteo для MODx.
Страничка сниппета на modx.com.
Конечно же, я нашел сниппет, написанный Ad_Astra, который называется в сети "Гламурный информер с Gismeteo".
Я сразу понял почему она использовала XSLT-преобразования как основной механизм шаблонов. Это просто — не нужно парсить практически ничего. Но зато с полученными данными практически ничего нельзя сделать. Главный минус этого сниппета в том, что не так уж много людей знают XSL на достаточном уровне, чтобы создать новый шаблон.
Было еще другое решение, но оно мне показалось сыроватым. К сожалению, когда я высказал автору свои замечания и задал пару вопросов, он очень остро отреагировал и удалил свое решение из свободного доступа совсем.