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

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

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

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн окт 23, 2017 6:16 pm

Там же выше в чьем то скрипте приведена ссылка на список городов
Сочи вот
https://export.yandex.ru/bar/reginfo.xml?region=239

*** Сообщение запрещено. Сообщение похоже на спам. ***
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн окт 23, 2017 6:16 pm

Спам фильтр не даёт ответить))
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн окт 23, 2017 6:16 pm

Сочи вот

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

https://export.yandex.ru/bar/reginfo.xml?region=239  
За это сообщение автора nick7zmail поблагодарил:
foxvlad (Вт окт 24, 2017 8:25 am)
Рейтинг: 1.16%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
admsasha
Сообщения: 2
Зарегистрирован: Пт ноя 10, 2017 4:11 am
Благодарил (а): 0
Поблагодарили: 2 раза

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

Сообщение admsasha » Пт ноя 10, 2017 4:40 am

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

Как раз начал с погоды. Пока искал кто как делает, понял что раньше существовал экспорт xml, то теперь его не стало. Судя по этому сайту особо альтернативы и не стало. Я написал свой парсер сайта yandex pogoda "Подробный прогноз на 10 дней", который формирует xml, из которого можно уже спокойно брать данные и делать любую табличку. У меня он запускается через cron, а на информационной панели уже идет обновление, исходя из "изменился ли файл.xml".

Так как форум мне понравился, я решил попробовать поделиться своими наработками. Если это нужно будет народу, буду выпускать обновления, ну и выкладывать другие скрипты. Скрипт написан на perl, он только формирует xml файл. Весь конфиг внутри (URL страницы и путь к файлу). Думаю, тут найдется тот, кто сможет его считать и подогнать вывод под систему MajorDoMo. Под raspberry точно работает.

В любом случае, хотелось бы слышать, нужны ли вам такие скрипты?
Вложения
yandex_pogoda.zip
script yandex pogoda
(1.82 КБ) 278 скачиваний
За это сообщение автора admsasha поблагодарили (всего 2):
Amarok (Пт ноя 10, 2017 9:09 am) • Hold (Пн ноя 13, 2017 11:44 am)
Рейтинг: 2.33%
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение Amarok » Пт ноя 10, 2017 9:10 am

admsasha писал(а):В любом случае, хотелось бы слышать, нужны ли вам такие скрипты?
Да, нужны. Но почему перл, а не пхп?
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пт ноя 10, 2017 9:14 am

admsasha писал(а):В любом случае, хотелось бы слышать, нужны ли вам такие скрипты?
Мы тут все за любую движуху, так что делись, выкладывай. ;)
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
admsasha
Сообщения: 2
Зарегистрирован: Пт ноя 10, 2017 4:11 am
Благодарил (а): 0
Поблагодарили: 2 раза

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

Сообщение admsasha » Пт ноя 10, 2017 9:23 am

Amarok писал(а):
admsasha писал(а):В любом случае, хотелось бы слышать, нужны ли вам такие скрипты?
Да, нужны. Но почему перл, а не пхп?
Потому что я знаю perl и не знаю php.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пт ноя 10, 2017 9:49 am

Для php же вроде уже был код для парсинга страницы...или опять работать перестал?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
alexeus
Сообщения: 1
Зарегистрирован: Чт ноя 16, 2017 12:03 am
Благодарил (а): 0
Поблагодарили: 2 раза

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

Сообщение alexeus » Сб ноя 18, 2017 1:54 am

Доброго времени суток.
Предлагаю вашему вниманию следующий вариант. это конечно модификация того, что смог найти на форуме.
Программированием и системой умной дом занимаюсь неделю! Если есть предложения по модификации кода или если чего то не хватает в нем или что то не правильно написано, прошу, сделать модификацию и выложить.


1. Голосовой ответ Алисы на запрос: Погода в "городе" ?

Создаем шаблон поведения:
название: Погода (.+)
шаблон: (Погода в|Погода|Расскажи о погоде в) (.+)

пишем код
СпойлерПоказать
//устанавливаем кодировки
header("Content-type: text/html;charset=utf-8");
mb_internal_encoding("UTF-8");

$requesty = $matches[2]; //получаем искомое слово



if($requesty=='Московской области'or $requesty=='Московская область'){$req="1";}
if($requesty=='Санкт-Петербурге'or $requesty=='Санкт-Петербург'){$req="2";}
if($requesty=='Белгороде'or $requesty=='Белгород'){$req="4";}
if($requesty=='Иваново'or $requesty=='Иванове'){$req="5";}
if($requesty=='Калуге'or $requesty=='Калуга'){$req="6";}
if($requesty=='Костроме'or $requesty=='Санкт-Петербург'){$req="7";}
if($requesty=='Курске'or $requesty=='Курск'){$req="8";}
if($requesty=='Липецке'or $requesty=='Липецк'){$req="9";}
if($requesty=='Орле'or $requesty=='Орл'){$req="10";}
if($requesty=='Рязани'or $requesty=='Рязань'){$req="11";}
if($requesty=='Смоленске'or $requesty=='Смоленкс'){$req="12";}
if($requesty=='Тамбове'or $requesty=='Тамбов'){$req="13";}
if($requesty=='Твери'or $requesty=='Тверь'){$req="14";}
if($requesty=='Туле'or $requesty=='Тула'){$req="15";}
if($requesty=='Яровславле'or $requesty=='Яровславль'){$req="16";}
if($requesty=='Петрозаводске'or $requesty=='Петрозаводск'){$req="18";}
if($requesty=='Сыктывкаре'or $requesty=='Сыктывкар'){$req="19";}
if($requesty=='Архангельске'or $requesty=='Архангельск'){$req="20";}
if($requesty=='Вологде'or $requesty=='Вологда'){$req="21";}
if($requesty=='Калининграде'or $requesty=='Калининград'){$req="22";}
if($requesty=='Мурманске'or $requesty=='Мурманск'){$req="23";}
if($requesty=='Великом новгоде'or $requesty=='Великий новгород'){$req="24";}
if($requesty=='Пскове'or $requesty=='Псков'){$req="25";}
if($requesty=='Махачкале'or $requesty=='Махачкала'){$req="28";}
if($requesty=='Нальчике'or $requesty=='Нальчик'){$req="30";}
if($requesty=='Владикавказе'or $requesty=='Владикавказ'){$req="33";}
if($requesty=='Краснодаре'or $requesty=='Краснодар'){$req="35";}
if($requesty=='Ставрополе'or $requesty=='Ставрополь'){$req="36";}
if($requesty=='Астрахане'or $requesty=='Астрахань'){$req="37";}
if($requesty=='Волгограде'or $requesty=='Волгоград'){$req="38";}
if($requesty=='Ростове-на-дону'or $requesty=='Ростов-на-дону'){$req="39";}
if($requesty=='Поволжье'or $requesty=='Поволжье'){$req="40";}
if($requesty=='йошкар-оле'or $requesty=='йошкар-ола'){$req="41";}
if($requesty=='Саранске'or $requesty=='Саранск'){$req="42";}
if($requesty=='Казане'or $requesty=='Казань'){$req="43";}
if($requesty=='Ижевске'or $requesty=='Ижевск'){$req="44";}
if($requesty=='Чебоксарах'or $requesty=='Чебоксары'){$req="45";}
if($requesty=='Кирове'or $requesty=='Киров'){$req="46";}
if($requesty=='Нижнем Новгороде'or $requesty=='Нижний Новгород'){$req="47";}
if($requesty=='Оренбурге'or $requesty=='Оренбург'){$req="48";}
if($requesty=='Пензе'or $requesty=='Пенза'){$req="49";}
if($requesty=='Перьми'or $requesty=='Перьмь'){$req="50";}
if($requesty=='Самаре'or $requesty=='Самара'){$req="51";}
if($requesty=='Кургане'or $requesty=='Курган'){$req="53";}
if($requesty=='Екатериндурге'or $requesty=='Екатериндург'){$req="54";}
if($requesty=='Тюмени'or $requesty=='Тюмень'){$req="55";}
if($requesty=='Челябинске'or $requesty=='Челябинск'){$req="56";}
if($requesty=='Ханты-мансийске'or $requesty=='Ханты-мансийск'){$req="57";}
if($requesty=='Салехарде'or $requesty=='Салехард'){$req="58";}
if($requesty=='Красноярске' or $requesty=='Красноярск'){$req="62";}
if($requesty=='Иркутске'or $requesty=='Иркутске'){$req="63";}
if($requesty=='Кемерово'or $requesty=='Кемерово'){$req="64";}
if($requesty=='Новосибирске'or $requesty=='Новосибирск'){$req="65";}
if($requesty=='Омске'or $requesty=='Омск'){$req="66";}
if($requesty=='Томске'or $requesty=='Томск'){$req="67";}
if($requesty=='Чите'or $requesty=='Чита'){$req="68";}
if($requesty=='Якутске'or $requesty=='Якутск'){$req="47";}
if($requesty=='Владивостоке'or $requesty=='Владивосток'){$req="75";}
if($requesty=='Хабаровске'or $requesty=='Хабаровск'){$req="76";}
if($requesty=='Благовещенске'or $requesty=='Благовещенск'){$req="77";}
if($requesty=='Брянске'or $requesty=='Брянск'){$req="191";}
if($requesty=='Владимире'or $requesty=='Владимир'){$req="192";}
if($requesty=='Воронеже'or $requesty=='Воронеж'){$req="193";}
if($requesty=='Барнауле' or $requesty=='Барнаул'){$req="197";}
if($requesty=='Москве' or $requesty=='Москва'){$req="213";}
if($requesty=='Севастополе' or $requesty=='Севастополь'){$req="959";}
if($requesty=='Крыму'or $requesty=='Крым'){$req="977";}
if($requesty=='Грозном'or $requesty=='Грозный'){$req="1106";}
if($requesty=='Анапе'or $requesty=='Анапа'){$req="1107";}
if($requesty=='Вартемягах'or $requesty=='Вартемяги'or $requesty=='вартемягах'or $requesty=='вартемяги'){$req="117465";}



$data_file="https://export.yandex.ru/bar/reginfo.xm ... n=$req.xml"; // адрес xml файла
$xml = simplexml_load_file($data_file); // раскладываем xml на массив
echo "<pre>"; print_r($xml); echo "</pre>";


$temp0=$xml->weather->day->title;
$temp1=$xml->weather->day->day_part[0]->temperature;
$temp2=$xml->weather->day->day_part[0]->weather_type;
$temp3=$xml->weather->day->day_part[0]->dampness;
$temp4=$xml->weather->day->day_part[0]->pressure;
$temp6=$xml->weather->day->day_part[0]->wind_direction;
$temp5=$xml->weather->day->day_part[0]->wind_speed;



$status="";
$t=round($temp1);
$tempw1=$t;
if($tempw1 >= 11 and $tempw1 <= 14){$tempcels1=" градусов ";}
if($tempw1 >= -11 and $temp1 <= -14){$tempcels1=" градусов ";}
else{while ($tempw1 > 9){$tempw1=$tempw1-10;}
if($tempw1 <= -1 or $tempw1 >= -5 and $tempw1 <= -9){$tempcels1= градусов ;}
if($tempw1 == 0 or $tempw1 >= 5 and $tempw1 <= 9){$tempcels1= градусов ;}
if($tempw1 == -1){$tempcels1= градус ; }
if($tempw1 == 1){$tempcels1= градус ; }
if($tempw1 <= -2 and $tempw1 >= -4){$tempcels1= градуса ;}
if($tempw1 >= 2 and $tempw1 <= 4){$tempcels1= градуса ;}


$d=round($temp3);
$tempw3=$d;
if($tempw3 >= 11 and $tempw3 <= 14){$tempcels3=" процентов ";}
else{while ($tempw3 > 9){$tempw3=$tempw3-10;}
if($tempw3 == 0 or $tempw3 >= 5 and $tempw3 <= 9){$tempcels3= процентов ;}
if($tempw3 == 1){$tempcels3= процент ;}
if($tempw3 >= 2 and $tempw3 <= 4){$tempcels3= процента ;}


$pressure=(float)$temp4;
$p=round($temp4);
$tempw4=$p;
if($tempw4 >= 11 and $tempw4 <= 14){$tempcels4= миллиметров ;}
else{while ($tempw4 > 9){$tempw4=$tempw4-10;}
if($tempw4 == 0 or $tempw4 >= 5 and $tempw4 <= 9){$tempcels4= миллиметров ;}
if($tempw4 == 1){$tempcels4= миллиметр ;}
if($tempw4 >= 2 and $tempw4 <= 4){$tempcels4= миллиметра ;}
if ($pressure<728) {$tempcelsp=' Атмосферное давление пониженное: '.$temp4." ".$tempcels4. " ртутного столба";}
elseif ($pressure>768) {$tempcelsp=' Атмосферное давление повышенное: '.$temp4." ".$tempcels4. " ртутного столба";}
else {$tempcelsp=" Атмосферное давление нормальное: " .$temp4." ".$tempcels4. " ртутного столба";}


$wd = $temp6;
switch ($wd){
case 'юг': $wd="южный";break;
case 'север': $wd="северный";break;
case 'запад':$wd="западный";break;
case 'восток':$wd="восточный";break;
case 'юго-запад':$wd="юго-западный"; break;
case 'северо-запад':$wd="северо-западный";break;
case 'юго-восток':$wd="юго-восточный";break;
case 'северо-восток':$wd="северо-восточный"; break;
case 'штиль':$wd="штиль";break;}

$ws=round($temp5,2);
$WindSpeed=(float)$ws;
$s=round($ws);
$tempw5=$s;
if($tempw5 >= 11 and $tempw5 <= 14){$tempcels5=" метров ";}
else{while ($tempw5 > 9){$tempw5=$tempw5-10;}
if($tempw5 == 0 or $tempw5 >= 5 and $tempw5 <= 9){$tempcels5= метров ;}
if($tempw5 == 1){$tempcels5= метр ; }
if($tempw5 >= 2 and $tempw5 <= 4){$tempcels5= метра ;}

if ($WindSpeed<1) {$tempcelss=' Штиль, ветра нет. ';}
elseif ($WindSpeed<=4) {$tempcelss=' Ветер слабый, ' .$wd. " " .$ws. " ".$tempcels5. " в секунду";}
elseif ($WindSpeed<=6) {$tempcelss=' Ветер сильный, ' .$wd. " " .$ws. " ".$tempcels5. " в секунду";}
elseif ($WindSpeed<=9) {$tempcelss=' Ветер очень сильный, ' .$wd. " " .$ws. " ".$tempcels5. " в секунду";}
else {$tempcelss=' Ветер очень! Очень сильный, ' .$wd. " " .$ws. " ".$tempcels5. " в секунду";}

$status= 'В городе ' .$temp0. ", сейчас " .$temp2. ". Температура воздуха: " .$temp1." ".$tempcels1." цельсия. Относительная влажность: " .$temp3. " " .$tempcels3. "." .$tempcelsp. ". " .$tempcelss. ".";}
say($status,2);}
}}
ВСЁ, говорим Алиса погода в Санкт-Петербурге, или Алиса погода Санкт-Петербург - она говорит текущую погоду в СПБ, Москве говорит в Москве.
Работает онлайн по запросу..

Если города в списке не оказалось дописываем по образцу, код региона узнать можно тут: https://yandex.ru/yaca/geo.c2n
Можно посмотреть индивидуальный код района или поселка если он существует в яндексе: открываем в гугл хром яндекс погоду, нажимаем погода по моему местоположению, открываем панель разработчика и ищем в многообразии букв и цифр тэга body строчку типа "rid":10887,"urid":165683,"slug":"sertolovo", она будет примерно в конце строки тэга. Собственно rid - это и есть id, поселения. urid это район где поселение. типа того.
фото не получается приложить
За это сообщение автора alexeus поблагодарили (всего 2):
kawkay (Вт ноя 21, 2017 3:59 pm) • Zuzik (Чт ноя 23, 2017 11:40 am)
Рейтинг: 2.33%
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Сб ноя 18, 2017 11:17 am

Там очень урезанный прогноз на region... для голосового шаблона, конечно, сканает.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить