// ******************************
// Vovix, 16.11.2015 г. v.1.1
// ******************************
$city_id=gg("Izhevsk.city_id"); //ID города узнаем тут: https://pogoda.yandex.ru/static/cities.xml
$data_file="http://export.yandex.ru/weather-ng/forecasts/$city_id.xml?".rand(); // адрес xml файла - 28411
//say($data_file);
$xml = simplexml_load_file($data_file); // раскладываем xml на массив
// температура вчера в это же время
$temp_yesterday=$xml->yesterday->temperature;
// Если значение температуры положительно, для наглядности добавляем "+"
$temp_yesterday = getTempSign($temp_yesterday);
sg("Izhevsk.TempYesterday",$temp_yesterday);
// температура сейчас
$temp=$xml->fact->temperature;
if (date('G')==13) {sg("Izhevsk.Temp13h",$temp);}
if (date('G')==21) {sg("Izhevsk.Temp21h",$temp);}
$temp = getTempSign($temp); // Если значение температуры положительно, для наглядности добавляем "+"
// достаем из XML-файла время его чтения
$XMLuptime = $xml->fact->uptime;
$XMLuptime = explode("T", $XMLuptime);
$XMLuptimeTo = ($XMLuptime[0].' '.$XMLuptime[1]);
// addClassProperty('Weather','XMLuptime');
sg("Izhevsk.XMLuptime",$XMLuptimeTo);
// сохраняем основные параметры текущей погоды
sg("Izhevsk.Temp",$temp);
sg("ThisComputer.TempOutside",$temp);
sg("Izhevsk.Type",$xml->fact->weather_type);
sg("Izhevsk.Pressure",$xml->fact->pressure);
sg("Izhevsk.Humidity",$xml->fact->humidity);
sg("Izhevsk.WindSpeed",$xml->fact->wind_speed);
sg("Izhevsk.Image",$xml->fact->{'image-v3'});
// определение вероятности дождя 0 или 1
$rain1=gg("Izhevsk.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->day[0]->day_part[3]->weather_type;
$rain=($rain1. $rain2. $rain3. $rain4. $rain5);
$pos = strpos($rain, "дожд");
if ($pos === false) {
sg("Izhevsk.Rain",0);
} else {
sg("Izhevsk.Rain",1);
// say("Возможен дождь",2);
}
// Направление ветра
$dir = $xml->fact->wind_direction;
// Функция возвращает массив, поэтому записываем в переменные значения, полученные в функции
list ($dir, $dirtext) = getWindDirection($dir);
sg("Izhevsk.WindDir",$dir);
sg("Izhevsk.WindDirText",$dirtext);
// Солнце: восход/закат
sg("Izhevsk.SunRise",$xml->day[0]->sunrise);
sg("Izhevsk.SunSet",$xml->day[0]->sunset);
// Луна
sg("Izhevsk.Moon_phase",$xml->day[0]->moon_phase);
sg("Izhevsk.MoonRise",$xml->day[0]->moonrise);
sg("Izhevsk.MoonSet",$xml->day[0]->moonset);
// длинный текстовый прогноз погоды
// $metcast="";
$metcast="На улице ".gg("Izhevsk.Type").".";
// ветер
$WindSpeed=(float)gg("Izhevsk.WindSpeed");
if ($WindSpeed<1) { $metcast.=' Ветра, скорее всего, нет.';
} elseif ($WindSpeed<3) { $metcast.=' Возможен слабый ветер.';
} elseif ($WindSpeed<6) { $metcast.=' Возможен сильный ветер.';
} elseif ($WindSpeed<9) { $metcast.=' Возможен довольно сильный ветер.';
} else { $metcast.=' Возможен очень сильный ветер.';
}
$w=round(strip_tags(gg("Izhevsk.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("Izhevsk.Temp").' '.$tempcels.'.';
$tm=(float)gg("Izhevsk.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("Izhevsk.SunRise").',';
// $metcast.=' закат в '.gg("Izhevsk.SunSet").'.';
sg("Izhevsk.metcast",$metcast);
// прогноз на 3 дня
$w3days="Сегодня ночью будет ";
$temp=$xml->day[0]->day_part[3]->temperature_from;
if ($temp>0) {$temp='+'.$temp;}
$w3days.=$temp;
$w3days.="°, ";
$w3days.=$xml->day[0]->day_part[3]->weather_type;
$w3days.=".\r\nЗавтра днём будет ";
$temp=$xml->day[1]->day_part[1]->temperature_from;
if ($temp>0) {$temp='+'.$temp;}
$w3days.=$temp;
$w3days.="°, ";
$w3days.=$xml->day[1]->day_part[1]->weather_type;
$w3days.=". Послезавтра ночью ";
$temp=$xml->day[1]->day_part[3]->temperature_from;
if ($temp>0) {$temp='+'.$temp;}
$w3days.=$temp;
$w3days.="°, ";
$w3days.=$xml->day[1]->day_part[3]->weather_type;
$w3days.=".";
sg("Izhevsk.forecast",$w3days);
// Определяем время года
$season = $xml->fact->season;
switch ($season){
case 'winter':
$season="зима";
break;
case 'summer':
$season="лето";
break;
case 'autumn':
$season="осень";
break;
case 'spring':
$season="весна";
break;
}
sg("Izhevsk.season",$season); //время года
// Запишем прогноз погоды на 10 дней
$nDay=0;
foreach($xml->day as $day) {
// записываем дату с днем недели на каждый день
sg("Izhevsk.mcD".$nDay."_Day",getDayDate($day['date']));
// нам нужны только 4 части дня по 6+1 параметров в каждом
for($i = 0;$i < 4;$i++) {
$prop_Temp = 'mcD'.$nDay.'_Temp_'.$i;
//addClassProperty('Weather',$prop_Temp);
$prop_Image = 'mcD'.$nDay.'_Image_'.$i;
//addClassProperty('Weather',$prop_Image);
$prop_WindDir = 'mcD'.$nDay.'_WindDir_'.$i;
//addClassProperty('Weather',$prop_WindDir);
$prop_WindDirText = 'mcD'.$nDay.'_WindDirText_'.$i;
//addClassProperty('Weather',$prop_WindDirText);
$prop_WindSpeed = 'mcD'.$nDay.'_WindSpeed_'.$i;
//addClassProperty('Weather',$prop_WindSpeed);
$prop_Humidity = 'mcD'.$nDay.'_Humidity_'.$i;
//addClassProperty('Weather',$prop_Humidity);
$prop_Pressure = 'mcD'.$nDay.'_Pressure_'.$i;
//addClassProperty('Weather',$prop_Pressure);
// 1 температура
sg("Izhevsk.".$prop_Temp, getTempSign($day->day_part[$i]->{'temperature-data'}->avg));
// 2 Картинка
sg("Izhevsk.".$prop_Image,$day->day_part[$i]->{'image-v3'});
// 3 Направление ветра
$dir = $day->day_part[$i]->wind_direction;
// Функция возвращает массив, поэтому записываем в переменные значения, полученные в функции
list ($dir, $dirtext) = getWindDirection($dir);
sg("Izhevsk.".$prop_WindDir, $dir);
sg("Izhevsk.".$prop_WindDirText, $dirtext);
// 4 Скорость ветра
sg("Izhevsk.".$prop_WindSpeed,$day->day_part[$i]->wind_speed);
// 5 Влажность
sg("Izhevsk.".$prop_Humidity,$day->day_part[$i]->humidity);
// 6 Атмосферное давление
sg("Izhevsk.".$prop_Pressure,$day->day_part[$i]->pressure);
}
$nDay++;
}
// Обновляем показатели жизни объекта
sg("Izhevsk.updatedTimestamp", time());
sg("Izhevsk.updatedTime", date( "H:i - d.m.Y", time()));
// Проговариваем, при необходимости
$sayMetUSD = gg ("Sets.sayMetUSD");
if ($sayMetUSD) {
say("Читаю прогноз погоды с Yandex",($sayMetUSD-2));
}
// ********************************************************
// КОНЕЦ ОСНОВНОГО БЛОКА
// Функция - добавления "+" к положительной температуре
function getTempSign($temp)
{
$temp = (int)$temp;
return $temp > 0 ? '+'.$temp : $temp;
}
// Функция - получить направления ветра в МАССИВ
function getWindDirection($wind)
{
$wind = (string)$wind;
$wind_direction = array('s'=>'↑ ю',
'n'=>'↓ с',
'w'=>'→ з',
'e'=>'← в',
'sw'=>'↗ юз',
'se'=>'↖ юв',
'nw'=>'↘ сз',
'ne'=>'↙ св');
$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)];
}