[Сценарий] Погода от Яндекс

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Погода (Яндекс)

Сообщение serghei » Чт май 12, 2016 12:56 pm

Только учти момент-как как версия МД старая(0.8) при попытке обновлений шапка рассыпается.А вообше дома держу Алиску
постоянно включенной только из за погоды и радио.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alekszander
Сообщения: 178
Зарегистрирован: Вс янв 05, 2014 5:37 am
Благодарил (а): 10 раз
Поблагодарили: 17 раз

Re: Погода (Яндекс)

Сообщение alekszander » Чт май 12, 2016 3:34 pm

погода от яндекс окончательно сдохла . помним любим скорбим...
andrey_k
Сообщения: 6
Зарегистрирован: Пн сен 07, 2015 11:15 am
Благодарил (а): 0
Поблагодарили: 0

Re: Погода (Яндекс)

Сообщение andrey_k » Пт май 13, 2016 6:42 pm

Есть сайт http://www.meteoservice.ru. Можно оттуда брать информацию о погоде.
Ссылка: http://www.meteoservice.ru/content/export.html
Информация хранится в XML.
Правда обновляется информация не часто - раза 2-3 в сутки.
Может найдется специалист сделать скрипт или модуль ...
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Погода (Яндекс)

Сообщение serghei » Пт май 13, 2016 6:54 pm

Спросите у ADZAM-a откуда он берёт погоду.Сейчас тестирую его последнюю версию из галереи домашних страниц-погода
вообще супер! Даже скринсейвер погодный есть.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
DiArt
Сообщения: 210
Зарегистрирован: Пт апр 12, 2013 2:27 pm
Откуда: Уфа
Благодарил (а): 28 раз
Поблагодарили: 16 раз

Re: Погода (Яндекс)

Сообщение DiArt » Вс май 15, 2016 8:41 pm

Закрыли не полностью экспорт. Можно погоду вытащить с яндекс-пробок.

Код: Выделить всё

$temp=$xml->weather->day->day_part->temperature;
Вот так вытаскивается текущая погода
Система на Неттоп 3Q Nettop Qoo!
(Intel Celeron J1800, 2x2410 МГц, 4096 Мб, HDD 1000 Гб, HDMI, VGA , Wi-Fi, Ethernet, Ubuntu 14.04.2)
Вторая система на Raspberry Pi 3.
D-Link DCS-930L/Broadlink RM2-Pro/BroadLink SP3 CC/Ginzzu HS-K07W
Я в CONNECT
Molostov
Сообщения: 50
Зарегистрирован: Пт янв 17, 2014 1:47 am
Откуда: Карпинск, Свердловская область
Благодарил (а): 135 раз
Поблагодарили: 12 раз

Re: Погода (Яндекс)

Сообщение Molostov » Пн май 16, 2016 11:01 pm

Очень хороший прогноз погоды есть на sinoptik.com.ru
Много городов и прогноз весьма точный. Может есть люди, которые смогут модуль для этого сайта сделать?
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Погода (Яндекс)

Сообщение Amarok » Вт май 17, 2016 8:22 am

DiArt писал(а):Закрыли не полностью экспорт. Можно погоду вытащить с яндекс-пробок.
А ссылка на xml какая?
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
DiArt
Сообщения: 210
Зарегистрирован: Пт апр 12, 2013 2:27 pm
Откуда: Уфа
Благодарил (а): 28 раз
Поблагодарили: 16 раз

Re: Погода (Яндекс)

Сообщение DiArt » Вт май 17, 2016 8:28 am

Amarok писал(а):
DiArt писал(а):Закрыли не полностью экспорт. Можно погоду вытащить с яндекс-пробок.
А ссылка на xml какая?
Вечером напишу. И заодно свой "причёсанный" скрипт выложу.
Там минус только в том что не всё отдаёт.
Нет прогноза на неделю и нет фазы луны и ещё чего-то.
Система на Неттоп 3Q Nettop Qoo!
(Intel Celeron J1800, 2x2410 МГц, 4096 Мб, HDD 1000 Гб, HDMI, VGA , Wi-Fi, Ethernet, Ubuntu 14.04.2)
Вторая система на Raspberry Pi 3.
D-Link DCS-930L/Broadlink RM2-Pro/BroadLink SP3 CC/Ginzzu HS-K07W
Я в CONNECT
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Погода (Яндекс)

Сообщение nick7zmail » Вт май 17, 2016 10:00 am

Amarok писал(а):А ссылка на xml какая?

Код: Выделить всё

https://export.yandex.ru/bar/reginfo.xml  
можно уточнить регион

Код: Выделить всё

https://export.yandex.ru/bar/reginfo.xml?region=<номер региона>  
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
DiArt
Сообщения: 210
Зарегистрирован: Пт апр 12, 2013 2:27 pm
Откуда: Уфа
Благодарил (а): 28 раз
Поблагодарили: 16 раз

Re: Погода (Яндекс)

Сообщение DiArt » Ср май 18, 2016 9:02 pm

Как и обещал выкладываю свой скрипт:
ID города узнаем тут: https://export.yandex.ru/bar/reginfo.xml записываем в переменную

Код: Выделить всё

$city_id=172
У меня обьект с погодой называется

Код: Выделить всё

YandexUfa
У вас он будет по другому называться меняете поиском все названия обьекта на свои.
Скрипт у меня называется Pogoda_Ufa, вы меняете в строчке

Код: Выделить всё

setTimeOut("timer_Pogoda_timeout", "runScript('Pogoda_Ufa');", 2);
на своё название
В общем я только поменял пути файла и разложил массив xml на текущие показания.
В принципе из этого можно будет поправить и модуль.
Да, и ещё. Если раньше картинки у меня сохранялись YandexUfa.Image только с названием например skc_n, то сейчас в эту же переменную сохраняется полный путь файла картинки, например: https://yastatic.net/weather/i/icons/bl ... /skc_n.png

Код: Выделить всё

$city_id=172;  //Уфа
//$city_id=getGlobal('YandexUfa.Id');  //ID города узнаем тут: https://export.yandex.ru/bar/reginfo.xml

$data_file="https://export.yandex.ru/bar/reginfo.xml?region=$city_id.xml?".rand(); // адрес xml файла
$xml = simplexml_load_file($data_file); // раскладываем xml на массив
if($xml === false ) { // Проверить можно также !is_object( $xml ) или !$xml
setTimeOut("timer_Pogoda_timeout", "runScript('Pogoda_Ufa');", 2);   //Также как и называется ваш скрипт У меня он Pogoda_Ufa

     return; 
} 

// температура сейчас
$temp=$xml->weather->day->day_part->temperature;
    if (date('G')==13) {sg("YandexUfa.Temp13h",$temp);}
    if (date('G')==21) {sg("YandexUfa.Temp21h",$temp);}
    $temp = getTempSign($temp); // Если значение температуры положительно, для наглядности добавляем "+"

// сохраняем основные параметры текущей погоды
sg("YandexUfa.City",$xml->weather->day->title);
sg("YandexUfa.Temp",$temp);
sg("YandexUfa.Type",$xml->weather->day->day_part->weather_type);
sg("YandexUfa.Pressure",$xml->weather->day->day_part->pressure);
// Влажность
sg("YandexUfa.Humidity",$xml->weather->day->day_part->dampness);
sg("YandexUfa.WindSpeed",$xml->weather->day->day_part->wind_speed);
sg("YandexUfa.Image",$xml->weather->day->day_part->image);
sg("YandexUfa.Image2",$xml->weather->day->day_part->{'image-v3'});



// Направление ветра
sg("YandexUfa.WindDir",$xml->weather->day->day_part->wind_direction);
    
// Солнце: восход/закат
    sg("YandexUfa.SunRise",$xml->weather->day->sun_rise);
    sg("YandexUfa.SunSet",$xml->weather->day->sunset);
    $DayStart = explode(":",gg("YandexUfa.SunRise"));
    $DayEnd = explode(":",gg("YandexUfa.SunSet"));
    $h_start = (int)$DayStart[0];
    $m_start = (int)$DayStart[1];
    $h_end = (int)$DayEnd[0];
    $m_end = (int)$DayEnd[1];

    $dh = $h_end - $h_start;
    $dm = $m_end - $m_start;

    if ($dm<0){
    $dh=$dh-1;
    $dm=$dm+60;
    }
    sg("YandexUfa.LongTag","$dh:$dm");

// длинный текстовый прогноз погоды
//    $metcast="";
    $metcast="На улице ".gg("YandexUfa.Type").".";
    // ветер
    $WindSpeed=(float)gg("YandexUfa.WindSpeed");
    if ($WindSpeed<1) { $metcast.=' Ветра, скорее всего, нет.';
    } elseif ($WindSpeed<3) { $metcast.=' Возможен слабый ветер.';
    } elseif ($WindSpeed<8) { $metcast.=' Возможен умеренный ветер.';
    } elseif ($WindSpeed<13) { $metcast.=' Возможен сильный ветер.';
    } elseif ($WindSpeed<20) { $metcast.=' Возможен довольно сильный ветер.';
    } elseif ($WindSpeed<28) { $metcast.=' Возможен штормовой ветер.';
    } else { $metcast.=' Ветер очень очень сильный, УРАГАН, ';
    }
    //$metcast.= gg("YandexUfa.WindDirText");
    
$w=round(strip_tags(gg("YandexUfa.Temp")));
$tempw=$w;

if($w < "0"){ $tempw=abs($w); }
if($w > "0"){ $templus=" плюс "; }

if($tempw >= 11 and $tempw <= 14){ $tempcels=" градусов";}
else{
while ($tempw > 9){
$tempw=$tempw-10;
}

if($tempw == 0 or $tempw >= 5 and $tempw <= 9){ $tempcels=" градусов"; }
if($tempw == 1){ $tempcels=" градус"; } 
if($tempw >= 2 and $tempw <= 4){ $tempcels=" градуса"; }
}
$metcast2.=$metcast;
    $metcast.=' Температура '.gg("YandexUfa.Temp").' '.$tempcels.'.';
    $tm=(float)gg("YandexUfa.Temp");
    if ($tm<-40)       { $metcast.=' Мы морозов не боимся!';
    } elseif ($tm<-30) { $metcast.=' Очень холодно, оденьтесь теплее.';
    } elseif ($tm<-20) { $metcast.=' Самое время есть мороженое.';
    } elseif ($tm<-10) { $metcast.=' Холодновато.';
    } elseif ($tm<-3)  { $metcast.=' Не особо холодно.';
    } elseif ($tm<3)   { $metcast.=' Значит, возможно, гололёд.';
    } elseif ($tm<10)  { $metcast.=' Тепловато.';
    } elseif ($tm<25)  { $metcast.=' Тепло.';
    } elseif ($tm<30)  { $metcast.=' Жарко.';
    } elseif ($tm>30)  { $metcast.=' Ташкент.';
    } 
$metcast2.=' Давление '.gg("YandexUfa.Pressure").' мм рт.ст.';
$metcast2.=' Влажность '.gg("YandexUfa.Humidity").' &#37';

    sg('YandexUfa.metcast',$metcast2);
    $metcast.=' Восход солнца сегодня в '.gg("YandexUfa.SunRise").',';
    $metcast.=' закат в '.gg("YandexUfa.SunSet").'.';
    $metcast.=' долгота дня '.getGlobal('YandexUfa.LongTag').'.';    
    sg('YandexUfa.WeatherDnes',$metcast);
/////-------------------///

//Дата и время последнего обновления
sg("YandexUfa.UpdatedTime", date( "H:i", time()));
sg("YandexUfa.updatedDateTime", date( "H:i - d.m.Y", time()));
say('Погода обновлена',0);

// КОНЕЦ ОСНОВНОГО БЛОКА
// Функция - добавления "+" к положительной температуре
function getTempSign($temp)
{
    $temp = (int)$temp;
    return $temp > 0 ? '+'.$temp : $temp;
}

// Функция - получить направления ветра в МАССИВ
function getWindDirection($wind)
{
    $wind = (string)$wind;
    $wind_direction = array('s'=>'&#8593; ю',
                            'n'=>'&#8595; с',
                            'w'=>'&#8594; з',
                            'e'=>'&#8592; в',
                            'sw'=>'&#8599; юз',
                            'se'=>'&#8598; юв',
                            'nw'=>'&#8600; сз',
                            'ne'=>'&#8601; св');
 
     $wind_dirtxt = array('s'=>'южный',
                         'n'=>'северный',
                         'w'=>'западный',
                         'e'=>'восточный',
                         'sw'=>'юго-западный',
                         'se'=>'юго-восточный',
                         'nw'=>'северо-западный',
                         'ne'=>'северо-восточный');
 
 return array ($wind_direction[$wind], $wind_dirtxt[$wind]);
}
// Функция - получить локализованный день недели
function getDayDate($date)
{
    $date = strtotime($date);
//    $months = array('','января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
    $days = array('ВС','ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ');
//    return $days[date('w', $date)].', '.(int)date('d',$date).' '.$months[date('n', $date)].' '.date('y',$date).' г.';
     return $days[date('w', $date)];
}
*** Сообщение запрещено. Сообщение похоже на спам. ***
Система на Неттоп 3Q Nettop Qoo!
(Intel Celeron J1800, 2x2410 МГц, 4096 Мб, HDD 1000 Гб, HDMI, VGA , Wi-Fi, Ethernet, Ubuntu 14.04.2)
Вторая система на Raspberry Pi 3.
D-Link DCS-930L/Broadlink RM2-Pro/BroadLink SP3 CC/Ginzzu HS-K07W
Я в CONNECT
Ответить