Smoke

 
<<< Back

Получение Я.Погоды из сценария

Чистый код сценария для получения погоды

Зачем?

Немного не устраивал меня модуль Я.Погоды тем, что он переодически отваливался, написал простой сценарий для получения погоды... Может кому пригодится... Не претендую на звание "лучший код года", а так же "можно же было модулем"

Вариант реализации

У меня реализованно вот так:

Иконки

Скачать анимированные иконки тут - https://yadi.sk/d/jL3IvviS97AUgQ

Код

Узнать код региона можно тут - https://yandex.ru/pogoda/moscow/informer справа будет код информера:
img src="https://info.weather.yandex.net/11470 - это код региона

//Получаем данные от Яндекса, region= указывает на код региона
$getYandexPogoda = simplexml_load_string(file_get_contents('https://export.yandex.ru/bar/reginfo.xml?region=47'));
$getYandexPogoda = json_decode(json_encode($getYandexPogoda), TRUE);
//Меняем некрасивые картинки на красивые, анимированные
$arrayIcon = [
    'bkn_d.png' => 'assets/icons/meteoIcon/cloudy-day-3.svg',
    'bkn_n.png' => 'assets/icons/meteoIcon/cloudy-night-3.svg',
    'ovc.png' => 'assets/icons/meteoIcon/cloudy.svg',
    'ovc_-sn.png' => 'assets/icons/meteoIcon/snowy-4.svg',
    'ovc_sn.png' => 'assets/icons/meteoIcon/snowy-5.svg',
    'ovc_-ra.png' => 'assets/icons/meteoIcon/rainy-4.svg',
    'ovc_ra.png' => 'assets/icons/meteoIcon/rainy-5.svg',
    'ovc_ts_ra.png' => 'assets/icons/meteoIcon/thunder.svg',
    'skc_d.png' => 'assets/icons/meteoIcon/day.svg',
    'skc_n.png' => 'assets/icons/meteoIcon/night.svg',
    'fg_d.png' => 'assets/icons/meteoIcon/cloudy.svg',
    'bl.png' => 'assets/icons/meteoIcon/snowy-6.svg',
    'bkn_-ra_d.png' => 'assets/icons/meteoIcon/rainy-2.svg',
    'bkn_-ra_n.png' => 'assets/icons/meteoIcon/cloudy-night-3.svg',
    'bkn_-sn_d.png' => 'assets/icons/meteoIcon/snowy-2.svg',
    'bkn_-sn_n.png' => 'assets/icons/meteoIcon/cloudy-night-3.svg',
    'bkn_ra_d.png' => 'assets/icons/meteoIcon/rainy-1.svg',
    'bkn_ra_n.png' => 'assets/icons/meteoIcon/rainy-1.svg',
    'bkn_sn_d.png' => 'assets/icons/meteoIcon/snowy-1.svg',
    'bkn_sn_n.png' => 'assets/icons/meteoIcon/snowy-1.svg',
    'ovc_ra_sn.png' => 'assets/icons/meteoIcon/rainy-5.svg',
];

//Цикл для перебора данных
foreach($getYandexPogoda[weather][day][day_part] as $key => $array) {
    //Самый первый массив - в нем данные о текущей погоде
    if($key == 0) {
        //Текущая температура
        sg('System_YandexWeather.nowTemp', $array["temperature"]);
            //Иконка
        $searchIcon = explode('/', $getYandexPogoda["weather"]["day"]["day_part"][$key]["image-v3"]);
        sg('System_YandexWeather.nowWeatherIcon', $arrayIcon[$searchIcon[8]]);
            //Скорость ветра
        sg('System_YandexWeather.nowWindSpeed', $array["wind_speed"]);
            //Направление ветра
        sg('System_YandexWeather.nowWindDirection', $array["wind_direction"]);
        continue;
    }

    if(isset($getYandexPogoda["weather"]["day"]["day_part"][$key]["temperature"])) {
        $searchTemp = $getYandexPogoda["weather"]["day"]["day_part"][$key]["temperature"];
    } else {
        $searchTemp = $getYandexPogoda["weather"]["day"]["day_part"][$key]["temperature_from"];
    }
    //Раскидываем данные по принципу temp_1, temp_2, temp_3, temp_4 это утро, день, вечер, ночь
    sg('System_YandexWeather.name_'.$key, $getYandexPogoda["weather"]["day"]["day_part"][$key]["@attributes"]["type"]);
    sg('System_YandexWeather.temp_'.$key, $searchTemp);
    $searchIcon = explode('/', $getYandexPogoda["weather"]["day"]["day_part"][$key]["image-v3"]);

    sg('System_YandexWeather.WeatherIcon_'.$key, $arrayIcon[$searchIcon[8]]);
}
//Время обновления
sg('System_YandexWeather.update', date('d.m.Y H:i', time()));

echo 'ok';

Discuss (10) (14)

See also:
2023-03-13 Debounce настройка в z2m
2023-03-06 Боремся с mysql и жором места на диске
2021-10-24 Определяем выключен ли свет по камере о_О
2021-10-18 Опять прокси WS! Теперь для KeenDNS+NGINX
2021-09-19 Хитрый MJPEG или укрощение строптивого
2021-06-08 Парсим информер с Яндекс.Погоды
2021-01-13 Не разговаривает Алиса через облако?
2020-12-15 Разгоняем Xiaomi Home
2020-11-04 Проксирование WebSocket с wss:// -> ws://
2020-11-02 Как получить время езды до работы?
2020-06-02 Стилизация штатного редактора кода, часть 2
2020-06-01 Распознавание речи - бесплатно, просто, быстро.
2020-06-01 Стилизация штатного редактора кода
2020-01-29 Парсим данные баланса из ЛК Билайн (Update)
2020-01-28 Camshoter на свой лад
2020-01-21 Google Location + Yandex Maps, на свой лад
2020-01-17 Рассказ хейтера сцен в MJDM. Часть 2
2020-01-17 Как можно НЕ использовать сцены в MJDM. Часть 2
2020-01-16 Перезагружаем роутер Zyxel из MJDM
2019-12-12 Как подружить Camshoter и обычную вебку
2019-10-07 Управление планшетом из сцен/WEB
2019-10-07 Использование злосчастных WebSoccet
2020-01-17 ~DELETED~
2019-07-23 Как можно НЕ использовать сцены в MJDM. Часть 1.

Нижний Новгород, Россия

На форуме: SmoKE_xDDD