Страница 15 из 19

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

Добавлено: Пн окт 23, 2017 6:16 pm
nick7zmail
Там же выше в чьем то скрипте приведена ссылка на список городов
Сочи вот
https://export.yandex.ru/bar/reginfo.xml?region=239

*** Сообщение запрещено. Сообщение похоже на спам. ***

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

Добавлено: Пн окт 23, 2017 6:16 pm
nick7zmail
Спам фильтр не даёт ответить))

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

Добавлено: Пн окт 23, 2017 6:16 pm
nick7zmail
Сочи вот

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

https://export.yandex.ru/bar/reginfo.xml?region=239  

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

Добавлено: Пт ноя 10, 2017 4:40 am
admsasha
Я только начал своё увлечение умным домом. Я делаю свою систему, потому что именно это мне интересно. Но явно мои наработки можно использовать и в вашей системе.

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

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

В любом случае, хотелось бы слышать, нужны ли вам такие скрипты?

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

Добавлено: Пт ноя 10, 2017 9:10 am
Amarok
admsasha писал(а):В любом случае, хотелось бы слышать, нужны ли вам такие скрипты?
Да, нужны. Но почему перл, а не пхп?

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

Добавлено: Пт ноя 10, 2017 9:14 am
skysilver
admsasha писал(а):В любом случае, хотелось бы слышать, нужны ли вам такие скрипты?
Мы тут все за любую движуху, так что делись, выкладывай. ;)

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

Добавлено: Пт ноя 10, 2017 9:23 am
admsasha
Amarok писал(а):
admsasha писал(а):В любом случае, хотелось бы слышать, нужны ли вам такие скрипты?
Да, нужны. Но почему перл, а не пхп?
Потому что я знаю perl и не знаю php.

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

Добавлено: Пт ноя 10, 2017 9:49 am
nick7zmail
Для php же вроде уже был код для парсинга страницы...или опять работать перестал?

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

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


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 это район где поселение. типа того.
фото не получается приложить

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

Добавлено: Сб ноя 18, 2017 11:17 am
nick7zmail
Там очень урезанный прогноз на region... для голосового шаблона, конечно, сканает.