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 (4) (7)

See also:
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