// ******************************
//  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'=>'&#8593; ю',
                            'n'=>'&#8595; с',
                            'w'=>'&#8594; з',
                            'e'=>'&#8592; в',
                            'sw'=>'&#8599; юз',
                            'se'=>'&#8598; юв',
                            'nw'=>'&#8600; сз',
                            'ne'=>'&#8601; св');
 
 	$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)];
}