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

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

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

Takosan
Сообщения: 7
Зарегистрирован: Вс дек 31, 2017 11:47 am
Благодарил (а): 3 раза
Поблагодарили: 0

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

Сообщение Takosan » Вс дек 31, 2017 1:02 pm

Всем доброго времени суток!
Люди добрые, подскажите пожалуйста у кого работает код из шапки? Сделал все как в шапке, но погоды так и нет ((( Подскажите пожалуйста подробные инструкции, как правильно настроить?
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Вс дек 31, 2017 1:28 pm

Ни у кого не работает. Яндекс давно закрыл это API.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Takosan
Сообщения: 7
Зарегистрирован: Вс дек 31, 2017 11:47 am
Благодарил (а): 3 раза
Поблагодарили: 0

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

Сообщение Takosan » Вс дек 31, 2017 2:49 pm

nick7zmail писал(а):Ни у кого не работает. Яндекс давно закрыл это API.
Посоветуйте пожалуйста, где тогда можно взять погоду?
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

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

Сообщение lanket » Вс дек 31, 2017 3:25 pm

Takosan писал(а):
nick7zmail писал(а):Ни у кого не работает. Яндекс давно закрыл это API.
Посоветуйте пожалуйста, где тогда можно взять погоду?
Модуль OpenWeatherMap
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Вс дек 31, 2017 3:33 pm

Немного не та тема)) https://majordomo.smartliving.ru/forum/ ... f=5&t=4340
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
olegvolk75
Сообщения: 141
Зарегистрирован: Сб мар 11, 2017 7:03 pm
Благодарил (а): 50 раз
Поблагодарили: 15 раз

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

Сообщение olegvolk75 » Вс янв 07, 2018 4:19 pm

uuu писал(а):Структура отдаваемых Яндексом данных изменилась- теперь "прогноз"- это картинка, в текстовом виде передаётся только прогнозируемая температура и описание текущей погоды .

внёс небольшие изменения в скрипт

результат может выглядеть так:
СпойлерПоказать
Изображение

Код в Меню управления:

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


  <div style="background: antiquewhite;padding: 7px;">
  <div style="font-size:10px; width:50px; display: inline-block;">Сейчас</div>
  <img src="%Moscow.Image0%" width= 15% align="absmiddle"> 
   <div style="position: absolute;display: inline-block;font-size: 30px;padding-top: 3px;padding-left: 5px;">%Moscow.Temp%</div>
   <div style="position: absolute;display: inline-block;font-size: 11px;padding-top: 3px;padding-left: 65px;">%Moscow.Humidity%</div> 
   <div style="position: absolute;display: inline-block;font-size: 11px;padding-top: 17px;padding-left: 65px;">%Moscow.Pressure%</div> 
   <div style="position: absolute;display: inline-block;font-size: 11px;padding-top: 30px;padding-left: 65px;">%Moscow.windCast%</div>
   <div style="font-size: 11px;color: darksalmon;float: right;">%Moscow.updated%</div> </div>
 <div style="background: #faebd7b3;padding: 7px;"><div style="font-size:10px; width:50px; display: inline-block;">%Moscow.dayPart1%</div><img src="%Moscow.Image1%" width= 15% align="absmiddle"> %Moscow.Temp1% </div>
 <div style="background: #faebd780;padding: 7px;"><div style="font-size:10px; width:50px; display: inline-block;">%Moscow.dayPart2%</div><img src="%Moscow.Image2%" width= 15% align="absmiddle"> %Moscow.Temp2% </div>
 <div style="background: #faebd7b3;padding: 7px;"><div style="font-size:10px; width:50px; display: inline-block;">%Moscow.dayPart3%</div><img src="%Moscow.Image3%" width= 15% align="absmiddle"> %Moscow.Temp3% </div>
 <div style="background: #faebd780;padding: 7px;"><div style="font-size:10px; width:50px; display: inline-block;">%Moscow.dayPart4%</div><img src="%Moscow.Image4%" width= 15% align="absmiddle"> %Moscow.Temp4% </div>




 
СпойлерПоказать

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


$objects=getObjectsByClass("Погода с Yandex"); //имя класса
foreach($objects as $obj) {
$city_id=gg($obj['TITLE'].".city_id"); //ID города узнаем тут: https://pogoda.yandex.ru/static/cities.xml
$data_file="https://export.yandex.ru/bar/reginfo.xml?region=$city_id.xml?"; // адрес xml файла

 
 $xml = simplexml_load_file($data_file); // раскладываем xml на массив

 echo "<pre>"; print_r($xml); echo "</pre>";
/* $temp_yesterday=$xml->yesterday->temperature; //узнаем вчерашнюю температуру в это же время
if ($temp_yesterday>0) {$temp_yesterday='+'.$temp_yesterday;} // Если значение температуры положительно, для наглядности добавляем "+"
sg($obj['TITLE'].".TempYesterday",$temp_yesterday); */

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

 $tempFrom1=$xml->weather->day->day_part[1]->temperature_from;
$tempTo1=$xml->weather->day->day_part[1]->temperature_to;
sg($obj['TITLE'].".Temp1",$tempFrom1."...".$tempTo1);
 
 $tempFrom2=$xml->weather->day->day_part[2]->temperature_from;
$tempTo2=$xml->weather->day->day_part[2]->temperature_to;
sg($obj['TITLE'].".Temp2",$tempFrom2."...".$tempTo2);

 $tempFrom3=$xml->weather->day->day_part[3]->temperature_from;
$tempTo3=$xml->weather->day->day_part[3]->temperature_to;
sg($obj['TITLE'].".Temp3",$tempFrom3."...".$tempTo3); 
 
 $tempFrom4=$xml->weather->day->day_part[4]->temperature_from;
$tempTo4=$xml->weather->day->day_part[4]->temperature_to;
sg($obj['TITLE'].".Temp4",$tempFrom4."...".$tempTo4);
 
 
 
 sg($obj['TITLE'].".Type",$xml->weather->day->day_part[0]->weather_type);
sg($obj['TITLE'].".Pressure",$xml->weather->day->day_part[0]->pressure." мм рт. ст.");
sg($obj['TITLE'].".Humidity",$xml->weather->day->day_part[0]->dampness."%");
sg($obj['TITLE'].".WindSpeed",$xml->weather->day->day_part[0]->wind_speed);

sg($obj['TITLE'].".Image",str_replace(array('https://yastatic.net/weather/i/icons/blueye/48/','png'), array('https://yastatic.net/weather/i/icons/blueye/color/svg/','svg'), $xml->weather->day->day_part[0]->{"image-v3"}));
sg($obj['TITLE'].".Image1",str_replace(array('https://yastatic.net/weather/i/icons/blueye/30/','png'), array('https://yastatic.net/weather/i/icons/blueye/color/svg/','svg'), $xml->weather->day->day_part[1]->{"image-v3"}));
sg($obj['TITLE'].".Image2",str_replace(array('https://yastatic.net/weather/i/icons/blueye/30/','png'), array('https://yastatic.net/weather/i/icons/blueye/color/svg/','svg'), $xml->weather->day->day_part[2]->{"image-v3"}));
sg($obj['TITLE'].".Image3",str_replace(array('https://yastatic.net/weather/i/icons/blueye/30/','png'), array('https://yastatic.net/weather/i/icons/blueye/color/svg/','svg'), $xml->weather->day->day_part[3]->{"image-v3"}));
sg($obj['TITLE'].".Image4",str_replace(array('https://yastatic.net/weather/i/icons/blueye/30/','png'), array('https://yastatic.net/weather/i/icons/blueye/color/svg/','svg'), $xml->weather->day->day_part[4]->{"image-v3"}));



function dPartDecl($n,$v)
{
 
    if (strcasecmp($v, 'утро') == 0) {$day_part = "Утром";} 
    if (strcasecmp($v, 'день') == 0) {$day_part = "Днём";} 
    if (strcasecmp($v, 'вечер') == 0) {$day_part = "Вечером";} 
    if (strcasecmp($v, 'ночь')== 0) {$day_part = "Ночью";} 
    return $day_part;
}

 echo $xml->weather->day->day_part[0][type];

sg($obj['TITLE'].".dayPart0",dPartDecl(0,$xml->weather->day->day_part[0][type]));
sg($obj['TITLE'].".dayPart1",dPartDecl(1,$xml->weather->day->day_part[1][type]));
sg($obj['TITLE'].".dayPart2",dPartDecl(2,$xml->weather->day->day_part[2][type]));
sg($obj['TITLE'].".dayPart3",dPartDecl(3,$xml->weather->day->day_part[3][type]));
sg($obj['TITLE'].".dayPart4",dPartDecl(4,$xml->weather->day->day_part[4][type]));

/* $rain1=gg($obj['TITLE'].".Type");
$rain2=$xml->day[0]->day_part[0]->weather_type;
$rain3=$xml->day[0]->day_part[1]->weather_type;
$rain4=$xml->day[0]->day_part[2]->weather_type;
$rain5=$xml->weather->day->day_part[4]->weather_type;
$rain=($rain1. $rain2. $rain3. $rain4. $rain5);

$pos = strpos($rain, "дождь");
if ($pos === false) {
    sg($obj['TITLE'].".Rain",0);
    } else {
    sg($obj['TITLE'].".Rain",1);
//    say("Возможен дождь",2);
    }
 */
$dir = $xml->weather->day->day_part[0]->wind_direction;
/* switch ($dir){
   case 's':
     $dir="южный";
     break;
   case 'n':
     $dir="северный";
     break;
   case 'w':
     $dir="западный";
     break;
   case 'e':
     $dir="восточный";
     break;
   case 'sw':
     $dir="юго-западный";
     break;
   case 'nw':
     $dir="северо-западный";
     break;
   case 'se':
     $dir="юго-восточный";
     break;
   case 'ne':
     $dir="северо-восточный";
     break;
   case 'calm':
     $dir="штиль";
     break;
} */

sg($obj['TITLE'].".WindDir",$dir);
sg($obj['TITLE'].".SunRise",$xml->weather->day->sun_rise);
sg($obj['TITLE'].".SunSet",$xml->weather->day->sunset);

    $metcast="На улице ".gg($obj['TITLE'].".Type").".";
    // состояние ветра, согласно Шкалы Бофорта
    $WindSpeed=(float)gg($obj['TITLE'].".WindSpeed");
    if ($WindSpeed==0) { $windcast.=' Безветренно.';
    } elseif ($WindSpeed<2) { $windcast=' Возможен тихий ветер.';
    } elseif ($WindSpeed<3) { $windcast=' Возможен легкий ветер.';
    } elseif ($WindSpeed<5) { $windcast=' Возможен слабый ветер.';
    } elseif ($WindSpeed<8) { $windcast=' Умеренный ветер.';
    } elseif ($WindSpeed<11) { $windcast=' Свежий ветер.';
    } elseif ($WindSpeed<14) { $windcast=' Сильный ветер.';
    } elseif ($WindSpeed<17) { $windcast=' Крепкий ветер.';
    } elseif ($WindSpeed<20) { $windcast=' Очень крепкий ветер. Без нужды из дома лучше не выходить.';
    } elseif ($WindSpeed<25) { $windcast=' На улице шторм. Выходить из дома не рекомендуется.';
    } else { $windcast=' На улице ураган. Выходить из дома не рекомендуется.';
    } 
 sg($obj['TITLE'].".windCast",$windcast);

$metcast.=$windcast;  
$w=round(strip_tags(gg($obj['TITLE'].".Temp")));
$tempw=$w;

if($w < "0"){ $tempw=abs($w); }
if($w > "0"){ $templus=" +"; }

$tempcels="°";

    $metcast.=' Температура '.gg($obj['TITLE'].".Temp").''.$tempcels.'.';
    $tm=(float)gg($obj['TITLE'].".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.=' Ташкент.';
    } 
    
//    $metcast.=' Восход солнца сегодня в '.gg($obj['TITLE'].".SunRise").',';
//    $metcast.=' закат в '.gg($obj['TITLE'].".SunSet").'.';
sg($obj['TITLE'].".metcast",$metcast);
//
 $w3days= gg($obj['TITLE'].".dayPart1")." будет ";
 $w3days.=gg($obj['TITLE'].".Temp1");
   $w3days.="°."; 
 $w3days.=" \r\n".gg($obj['TITLE'].".dayPart2")." будет ";
 $w3days.=gg($obj['TITLE'].".Temp2");
  $w3days.="°."; 
  $w3days.=" \r\n".gg($obj['TITLE'].".dayPart3")." будет ";
 $w3days.=gg($obj['TITLE'].".Temp3");
  $w3days.="°."; 

sg($obj['TITLE'].".season",$dir1); //время года  */
sg($obj['TITLE'].".forecast",$w3days);
sg($obj['TITLE'].".updated" , date("H:i",time()));}
//say("Читаю прогноз погоды с Yandex", 0);  

 
День добрый! Подскажите, в браузере с ноутбука все отображается нормально. В Мажордроиде на Андроид 6 тоже всё норм. А в Мажордроиде на старом планшете на Андроиде 3.2 как будто растягивается по ИзображениеHDR.jpg[/attachment][/spoiler]
Хотел приспособить старый планш как терминал.
Вложения
IMG_20180107_153103_HDR.jpg
IMG_20180107_153103_HDR.jpg (3.4 МБ) 6290 просмотров
Orange Pi PCPlus, Debian Stretch with Armbian Linux 4.19.62-sunxi
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

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

Сообщение Vovix » Вс янв 07, 2018 9:14 pm

olegvolk75 писал(а):...
День добрый! Подскажите, в браузере с ноутбука все отображается нормально. В Мажордроиде на Андроид 6 тоже всё норм. А в Мажордроиде на старом планшете на Андроиде 3.2 как будто растягивается по [img]вертикали раз в 10.
...
:D я вот не понимаю, вам всем перейти например на [Модуль] Погода от Openweather религия не позволяет, или еще что?
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
kas5858
Сообщения: 364
Зарегистрирован: Вс янв 15, 2017 5:34 pm
Откуда: Москва
Благодарил (а): 100 раз
Поблагодарили: 53 раза

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

Сообщение kas5858 » Пн янв 08, 2018 7:50 pm

Vovix писал(а):перейти например на [Модуль] Погода от Openweather религия не позволяет, или еще что?
Неее, я думаю поддержать отечественного производителя хочется, а вдруг санкции дойдут и до Openweather, где погоду брать :o :D
Raspberry Pi3 - Broadlink - MegaD - Много датчиков - Камеры - Часы.
Изображение Connect
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн янв 08, 2018 9:29 pm

Ну пусть тогда яндекс нормальный апи открывает, а не эту мудатню с картинками делать)))
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

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

Сообщение serghei » Пн янв 08, 2018 9:41 pm

kas5858 писал(а): где погоду брать :o :D
Как вариант Тут. Адекватное API, прогноз на 4 дня , более 50 параметров.
Даже есть погодные станции для ESP8266 и 32.
Извините за Offtop.
За это сообщение автора serghei поблагодарил:
kas5858 (Пн янв 08, 2018 9:45 pm)
Рейтинг: 1.16%
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Ответить