В начале нужно получить ключ API Яндекс погоды в кабинете разработчика для запроса погоды, бесплатный тариф погода на вашем сайте 50 запросов в сутки получаем 48 запросов 1раз в 30 минут для одного города.
Тут же получаем Что есть что, вид запроса и т.д. Пример через Curl для Linux
Код: Выделить всё
curl -X GET --header "X-Yandex-API-Key: 5e2fe4f9-r1cd-4a29-9995-fr95qb4a4f58" https://api.weather.yandex.ru/v2/informers?lat=59.954507&lon=40.210775&lang=ru_RU
Ответ Api Яндекс Погода
Показать
{"now":1662397751,"now_dt":"2022-09-05T17:09:11.987912Z","info":{"url":"https://yandex.ru/pogoda/20125?lat=59.9 ... 13","parts":[{"part_name":"night","temp_min":5,"temp_avg":5,"temp_max":6,"wind_speed":1.9,"wind_gust":5,"wind_dir":"nw","pressure_mm":747,"pressure_pa":995,"humidity":90,"prec_mm":0,"prec_prob":0,"prec_period":480,"icon":"ovc","condition":"overcast","feels_like":2,"daytime":"n","polar":false},{"part_name":"morning","temp_min":5,"temp_avg":7,"temp_max":9,"wind_speed":2.4,"wind_gust":5.6,"wind_dir":"nw","pressure_mm":746,"pressure_pa":994,"humidity":89,"prec_mm":0.3,"prec_prob":20,"prec_period":360,"icon":"ovc_-ra","condition":"light-rain","feels_like":4,"daytime":"d","polar":false}]}}
СКАЧАТЬ Переходим к созданию шаблона в заббикс
Создадим макросы чтоб на разных городах можно было менять координаты и ключ API Задаем свои значения
{$LAT} = значение северной широты
{$LON} = значение восточной долготы
{$WEATHER_APIKEY} = ключ API
{$WEATHER_LANG} = Язык
Создаем основной элемент данных в заббикс который будет получать данные о погоде Имя: Запрос Погоды
Тип: HTTP агент
Ключ: get_weather.https
URL: https://api.weather.yandex.ru/v2/informers
Поля запроса:
lat => {$LAT}
lon => {$LON}
lang => {$WEATHER_LANG}
Тип запроса: GET
Время ожидания: 15s
Типа запроса тела: Сырые данные
Запрос тела:
Заголовки: X-Yandex-API-Key => {$WEATHER_APIKEY}
Требуемые коды состояния: 200
Следовать перенаправлениям: V
Режим получения: Тело
Тип информации: Текст
Интервал обновления: 30m
Пример последних данных: В начале получаем техническую информацию время дату координаты ссылку, далее строка фактической погоды и 2 строки прогнозируемой погоды на 2 периода суток.
Разбираем все данные по элементам.
Создаем зависимые элементы данных и регулярное выражение для получения значения. (ps JSONPath у меня на 4.2.1 корректно не работает поэтому регуляркой)
Примеры регулярок
([0-9]+) - целое число
([0-9]+.[0-9]+) - число с точкой или без но минимум 3х значное иначе ошибка
([0-9.]+) - Число с точкой(ами) или без точки может быть 1 значное число
Минимальная температура Утро
morning","temp_min":([0-9.]+),"temp_avg
2 строки с одинаковым содержимым кроме первого слова (утро день вечер ночь) строка может быть первой или последней
Можно делать так указывая начало строки и жестко всю строку (если где то указать .* получи данные последней строки)
morning","temp_min":([0-9.]+),"temp_avg
Но тут есть ограничение длина строки регулярного выражения например полярный день или нет уже не влезет
morning","temp_min":[0-9.]+,"temp_avg":[0-9.]+,"temp_max":[0-9.]+,"wind_speed":[0-9.]+,"wind_gust":[0-9.]+,"wind_dir":"[A-z-]+","pressure_mm":[0-9.]+,"pressure_pa":[0-9.]+,"humidity":[0-9.]+,"prec_mm":[0-9.]+,"prec_prob":[0-9.]+,"prec_period":[0-9.]+,"icon":"[A-z-_]+","condition":"[A-z-]+","feels_like":[0-9.]+,"daytime":"[A-z-]+","polar":([A-z-]+)
И что делать?
если водной строке одинаковые слова и строки меняются местами может быть 1 а может быть 2
Обрезать до первого совпадения, а не последнего
Regex: соответствие до первого вхождения символа
[^;] или экранирован /[^;]*/
заключив список символов в [], который будет соответствовать любому символу из списка. Если первым символом После " ["является"^", класс соответствует любому символу, не включенному в список.
получаем значение до первой ;
morning"[^}]*polar":([A-z-]+)
? ленивый оператор, поэтому регулярное выражение захватывает как можно меньше перед сопоставлением ;.
.*?
Рассмотрим разницу
morning".*polar":([A-z-]+) - берется последняя строка не правильно для нас
morning".*?polar":([A-z-]+) - правильно
morning"[^}]*polar":([A-z-]+) - правильно
Вывод \1
еще пример значение 0.256987 (0 - часы . минуты )
([0-9]+).([0-9][0-9]) вывод \1:\2
Получаем 0:25
вывод - шаблон форматирования вывода. \N (где N=1..9) - управляющая последовательность заменяется N-нной совпадающей группой. Управляющая последовательность \0 заменяется совпадающим текстом.
В интернете очень много примеров по регуляркам, в некоторых случаях не забывайте экранировать спец символы.
Для тестов регулярных выражений можно использовать сайт regex101 в настройках можно включить Русский
В элементах используются разные варианты регулярок более длинные и короткие более универсальные.
Далее для некоторых элементов данных создадим преобразования. Яндекс Погода Время Суток
day ⇒ День
day-evening ⇒ День и Вечер
evening ⇒ Вечер
evening-night ⇒ Вечер и Ночь
morning ⇒ Утро
morning-day ⇒ Утро и День
night ⇒ Ночь
night-morning ⇒ Ночь и Утро
Яндекс Погода Время Суток Темное-Светлое
d ⇒ Светлое время суток
n ⇒ Темное время суток
Яндекс Погода Время года
autumn ⇒ Осень
spring ⇒ Весна
summer ⇒ Лето
winter ⇒ Зима
Яндекс Погода Направление ветра
c ⇒ Штиль
e ⇒ Восточное
n ⇒ Северное
ne ⇒ Северо-Восточное
nw ⇒ Северо-Западное
s ⇒ Южное
se ⇒ Юго-Восточное
sw ⇒ Юго-Западное
w ⇒ Западное
Яндекс Погода Полярный День
false ⇒ Нет
true ⇒ Да
Яндекс Погода Фаза Луны
0 ⇒ Полнолуние
1 ⇒ Убывающая Луна
2 ⇒ Убывающая Луна
3 ⇒ Убывающая Луна
4 ⇒ Последняя четверть
5 ⇒ Убывающая Луна
6 ⇒ Убывающая Луна
7 ⇒ Убывающая Луна
8 ⇒ Новолуние
9 ⇒ Растущая Луна
10 ⇒ Растущая Луна
11 ⇒ Растущая Луна
12 ⇒ Первая четверть
13 ⇒ Растущая Луна
14 ⇒ Растущая Луна
15 ⇒ Растущая Луна
Яндекс Погода Фаза Луны Текстом
moon-code-0 ⇒ Полнолуние
moon-code-1 ⇒ Убывающая Луна
moon-code-2 ⇒ Убывающая Луна
moon-code-3 ⇒ Убывающая Луна
moon-code-4 ⇒ Последняя четверть
moon-code-5 ⇒ Убывающая Луна
moon-code-6 ⇒ Убывающая Луна
moon-code-7 ⇒ Убывающая Луна
moon-code-8 ⇒ Новолуние
moon-code-9 ⇒ Растущая Луна
moon-code-10 ⇒ Растущая Луна
moon-code-11 ⇒ Растущая Луна
moon-code-12 ⇒ Первая четверть
moon-code-13 ⇒ Растущая Луна
moon-code-14 ⇒ Растущая Луна
moon-code-15 ⇒ Растущая Луна
Яндекс Погодные условия
clear ⇒ Ясно
cloudy ⇒ Облачно с прояснениями
drizzle ⇒ Морось
hail ⇒ Град
light-rain ⇒ Небольшой дождь
light-snow ⇒ Небольшой снег
moderate-rain ⇒ Умеренно сильный дождь
overcast ⇒ Пасмурно
partly-cloudy ⇒ Малооблачно
rain ⇒ Дождь
showers ⇒ Ливень
snow ⇒ Снег
snow-showers ⇒ Снегопад
thunderstorm ⇒ Гроза
thunderstorm-with-hail ⇒ Гроза с градом
thunderstorm-with-rain ⇒ Дождь с грозой
wet-snow ⇒ Дождь со снегом
Создаем по максимуму все возможные элементы.
Для удобства разделим на группы Фактическая погода Элементы данных 22
Погода Утро Элементы данных 17
Погода Ночь Элементы данных 17
Погода День Элементы данных 17
Погода Вечер Элементы данных 17
Погода Элементы данных 97
Элемента данных Фактическая погода Запрос Погоды: Код фазы Луны moon_code 90d 365d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Атмосферное давление фактическое pressure_mm 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Время восхода Солнца sunrise 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Порядковый номер недели. week 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Дата прогноза unix date_ts 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Страница населенного пункта на сайте Яндекс Погода url 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Время года фактическое season 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Время полярное? polar 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Время суток фактическое daytime 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Атмосферное давление гПа фактическое pressure_pa 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Направление ветра фактическое wind_dir 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Скорость порывов ветра фактическое wind_gust 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Температура воды фактическое temp_water 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Погодное условие фактическое Триггеры 1 condition 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Скорость ветра фактическая wind_speed 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Географическое положение города, широта lat 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Географическое положение города, долгота lon 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Время замера погодных данных obs_time 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Ощущаемая температура фактическая feels_like 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Влажность воздуха % фактическое humidity 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Температура фактическая Триггеры 1 temp 90d 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Запрос Погоды: Время заката Солнца sunset 90d Зависимый элемент данных Погода, Фактическая погода Активировано
Погода прогнозируемая не постоянная так как из 4 доступно только по 2 , зависимый элемент по времени работы настроить нельзя.
На примере Утро аналогично для День, Вечер, Ночь
Запрос Погоды: Минимальная температура Утро morning.temp_min 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Прогнозируемое количество осадков Утро morning.prec_mm 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Время суток Утро morning.daytime 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Ощущаемая температура Утро morning.feels_like 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Погодное Условие Утро morning.condition 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Код иконки погоды Утро morning.icon 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Прогнозируемый период осадков Утро morning.prec_period 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Вероятность выпадения осадков Утро morning.prec_prob 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Влажность воздуха Утро morning.humidity 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Максимальная температура Утро morning.temp_max 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Давление (в гектопаскалях) Утро morning.pressure_pa 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Давление (в мм рт. ст.). Утро morning.pressure_mm 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Направление ветра Утро morning.wind_dir 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Скорость порывов ветра (в м/с). Утро morning.wind_gust 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Скорость ветра (в м/с). Утро morning.wind_speed 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Средняя температура Утро morning.temp_avg 90d 90d Зависимый элемент данных Погода, Погода Утро Активировано
Запрос Погоды: Полярный день? Утро morning.polar 90d Зависимый элемент данных Погода, Погода Утро Активировано
Другие данные:
Запрос Погоды Триггеры 1 get_weather.https 30m 90d HTTP агент Погода Активировано
Запрос Погоды: Дата прогноза date 90d Зависимый элемент данных Погода Активировано
Запрос Погоды: Время сервера Яндекс UTC на момент запроса now_dt 90d Зависимый элемент данных Погода Активировано
Запрос Погоды: Время сервера Яндекс на момент запроса now 90d 90d Зависимый элемент данных Погода Активировано
Запрос Погоды: Код иконки погоды фактический icon 90d Зависимый элемент данных Погода Активировано
Запрос Погоды: Прогнозируемая погода 2х времени суток part_name 90d Зависимый элемент данных Погода Активировано
Запрос Погоды: Текстовый код для фазы Луны moon_text 90d Зависимый элемент данных Погода Активировано
Триггеры Информационная Ошибка запроса погоды {info-weather-Yandex:get_weather.https.iregexp(forbidden)}=1 or {info-weather-Yandex:get_weather.https.iregexp(403)}=1 Активировано
Информационная Яндекс Гроза {info-weather-Yandex:condition.iregexp(thunderstorm)}=1 or {info-weather-Yandex:condition.iregexp(Гроза)}=1 Активировано
Информационная Яндекс Жара {info-weather-Yandex:temp.last()}>=30 Активировано
Графики Температура фактическая и средняя 900 200 Нормальный
Температура Ощущаемая 900 200 Нормальный
Температура Минимальная - Максимальная 900 200 Нормальный
Скорость ветра порывы м/с 900 200 Нормальный
Осадки 900 200 Нормальный
Давление в мм рт. ст. 900 200 Нормальный
Давление в гПа 900 200 Нормальный
Влажность Воздуха % 900 200 Нормальный
Комплексные экраны 1
Погода Яндекс