$city=172; //Уфа
$data_file="https://export.yandex.ru/bar/reginfo.xml?region=$city.xml?".rand(); // адрес xml файла
$info = array();
$xml = simplexml_load_file($data_file); // раскладываем xml на массив
if($xml === false ) { // Проверить можно также !is_object( $xml ) или !$xml
setTimeOut("timer_Pogoda_timeout", "runScript('Pogoda_Ufa');", 2);
return;
}
// температура сейчас
$info['temp'] = $xml->weather->day->day_part[0]->temperature;
if (date('G')==13) {sg("YandexUfa1.Temp13h",$info['temp']);}
if (date('G')==21) {sg("YandexUfa1.Temp21h",$info['temp']);}
// //$info['temp'] = getTempSign($info['temp']); // Если значение температуры положительно, для наглядности добавляем "+"
$info['image'] = $xml->weather->day->day_part[0]->image;
$info['image'] = str_replace("https://yastatic.net/weather/i/icons/blueye/24/", '/images/weather/', $info['image']);
$info['image'] = str_replace("png", "png", $info['image']);
// сохраняем основные параметры текущей погоды
sg("YandexUfa.Temp",$info['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.City",'Уфа');
sg("YandexUfa.image",$info['image']);
// Направление ветра
$dir = $xml->weather->day->day_part->wind_direction;
// Функция возвращает массив, поэтому записываем в переменные значения, полученные в функции
// list ($dir, $dirtext) = getWindDirection($dir);
sg("YandexUfa.WindDir",$dir);
// Солнце: восход/закат
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.=' Ветер очень очень сильный, УРАГАН, ';
}
$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="градуса"; }
}
$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.=' Ташкент.';
}
$metcast.=' Сегодня ночью будет ';
$temp=$xml->weather->day[0]->day_part[4]->temperature_from;
// if ($temp>0) {$temp='+'.$temp;}
$metcast.=$temp;
$metcast.="°, ";
$metcast.=' Завтра днём будет ';
$temp=$xml->weather->day->day_part[2]->temperature_from;
$metcast.=$temp;
$metcast.="°, ";
$metcast.=' Давление '.gg("YandexUfa.Pressure").' мм рт.ст.';
$metcast.=' Влажность '.gg("YandexUfa.Humidity").'%.';
$metcast.=' Восход солнца в '.gg("YandexUfa.SunRise").',';
$metcast.=' закат в '.gg("YandexUfa.SunSet").',';
$metcast.=' долгота дня '.getGlobal('YandexUfa.LongTag').'.';
sg('YandexUfa.WeatherDnes',$metcast);
//////////////////////////////////-----------------------------------------/////////////////////////////////////////////
$url= 'https://yandex.ru/pogoda/' . $city;
$str = file_get_contents($url);
$dom = phpQuery::newDocument($str);
// считываем данные на несколько дней вперед
foreach($dom->find(".forecast-briefly__day-link") as $key => $value){
// Преобразуем dom объект в объект phpQuery.
//Делаем сие действие с помощью метода pq(); который является аналогом ($) в jQuery.
$pq = pq($value);
// Находим в этом элементе элементы
$day[$key]["day"] = $pq->find(".forecast-briefly__name")->text();
$day[$key]["time"] = $pq->find(".forecast-briefly__date")->text();
$day[$key]["icon"] = $pq->find(".forecast-briefly__icon")->attr('src');
$day[$key]["temp_day"] = $pq->find(".forecast-briefly__temp_day .temp__value")->text();
$day[$key]["temp_night"] = $pq->find(".forecast-briefly__temp_night .temp__value")->text();
$day[$key]["condition"] = $pq->find(".forecast-briefly__condition")->text();
}
// заменить 10 на количество дней, за которые хотите иметь погоду
for ($i = 1; $i <= 8; $i++) {
// все глобальные свойства ниже создадутся автоматически, необходимо создать только YandexUfa
sg("YandexUfa.day".$i,$day[$i]["day"] );
sg("YandexUfa.time".$i,$day[$i]["time"] );
$day[$i]["icon"] = str_replace("//yastatic.net/weather/i/icons/funky/dark/", '/images/weather/', $day[$i]["icon"]);
$day[$i]["icon"] = str_replace("svg", "png", $day[$i]["icon"]);
sg("YandexUfa.icon".$i,$day[$i]["icon"] );
sg("YandexUfa.temp_day".$i,$day[$i]["temp_day"] );
sg("YandexUfa.temp_night".$i,$day[$i]["temp_night"] );
sg("YandexUfa.condition".$i,$day[$i]["condition"] );
}
//считываем данные за текущий день
$pq=pq($dom->find(".fact") );
$fact["temp"] = $pq->find(".fact__temp-wrap .link .fact__temp .temp__value")->text();
$fact["icon"] = $pq->find(".fact__temp-wrap .link .icon")->attr('src');
$fact["feel"] = $pq->find(".fact__temp-wrap .link .link__feelings .term .term__value")->text();
$fact["wind"] = $pq->find(".fact__props .fact__wind-speed .term__value .wind-speed")->text();
$fact["wind_word"] = $pq->find(".fact__props .fact__wind-speed .term__value")->attr('aria-label');
$fact["wind_dir"] = $pq->find(".fact__props .fact__wind-speed .term__value .fact__unit .icon-abbr")->text();
$fact["hum"] = $pq->find(".fact__props .fact__humidity .term__value ")->text();
$fact["hum_word"] = $pq->find(".fact__props .fact__humidity .term__value ")->attr('aria-label');
$fact["press"] = $pq->find(".fact__props .fact__pressure .term__value")->text();
$fact["press_word"] = $pq->find(".fact__props .fact__pressure .term__value")->attr('aria-label');
$fact["icon"] = str_replace("//yastatic.net/weather/i/icons/funky/light/", '/images/weather/', $fact["icon"]);
$fact["icon"] = str_replace("svg", "png", $fact["icon"]);
//соберем погоду по часам
$i=0; //счетчик
foreach($dom->find(".fact__hour") as $key => $value){
$pq = pq($value);
if (substr($pq->find(".fact__hour-elem .fact__hour-label")->text(),-3)==":00" ) { //если время заканчивается на целый час
// то сохраним в массив, иначе это было время восхода/заката и это включать в массив не будем
$hours[$i]["time"] = $pq->find(".fact__hour-elem .fact__hour-label")->text();
$hours[$i]["icon"]= $pq->find(".fact__hour-elem .icon")->attr('src');
$hours[$i]["temp"]= $pq->find(".fact__hour-elem .fact__hour-temp")->text();
$i=$i+1;//увеличим счетчик
}
}
$j=0;//счетчик
for ($i = 0; $i <= count($hours); $i+=5) { //выведем только кажый 6-ой час
$hours[$i]["icon"]= str_replace("//yastatic.net/weather/i/icons/funky/flat/", '/images/weather/', $hours[$i]["icon"]);
$hours[$i]["icon"] = str_replace("svg", "png", $hours[$i]["icon"]);
sg("YandexUfa.hour_time".$j,$hours[$i]["time"] );
sg("YandexUfa.hour_icon".$j,$hours[$i]["icon"] );
sg("YandexUfa.hour_temp".$j,$hours[$i]["temp"] );
$j+=1;
}
sg("YandexUfa.fact_temp",$fact["temp"] );
sg("YandexUfa.fact_icon",$fact["icon"] );
sg("YandexUfa.fact_feel",$fact["feel"] );
sg("YandexUfa.fact_wind",$fact["wind"] );
// sg("YandexUfa.fact_wind_word",$fact["wind_word"] );
sg("YandexUfa.fact_wind_dir",$fact["wind_dir"] );
sg("YandexUfa.fact_hum",$fact["hum"] );
// sg("YandexUfa.fact_hum_word",$fact["hum_word"] );
sg("YandexUfa.fact_press",$fact["press"] );
// sg("YandexUfa.fact_press_word",$fact["press_word"] );
//////////////////////////////////-----------------------------------------/////////////////////////////////////////////
//Дата и время последнего обновления
sg("YandexUfa.UpdatedTime", date( "H:i", time()));
sg("YandexUfa.updatedDateTime", date( "H:i - d.m.Y", time()));
/////////////////////ПРОБКИ////////////
$probkitext=$xml->traffic->region->hint;
$info['hint lang']= $xml->traffic->region->hint[0];
$info['level']= $xml->traffic->region->level[0];
$info['icon']= $xml->traffic->region->icon[0];
sg("probki.level",$info['level']);
sg("probki.icon",$info['icon']);
sg("probki.hintlang",$info['hint lang']);
say('Погода обновлена');
// КОНЕЦ ОСНОВНОГО БЛОКА