<?php
$main = array();
$city = (isset($city))? $city : 247;
$r_time = 7200; // время кеширования скачиваемых данных (в секундах)
$tmp = 'weather.xml'; // временный файл
$url = 'http://rp5.ua/xml.php?id='.$city ;
$month=array(
'1' => 'января',
'2' => 'февраля',
'3' => 'марта',
'4' => 'апреля',
'5' => 'мая',
'6' => 'июня',
'7' => 'июля',
'8' => 'августа',
'9' => 'сентября',
'10' => 'октября',
'11' => 'ноября',
'12' => 'декабря'
);
$no_answer=false;
$error_srv=false;
$life_time = time() - @filemtime($tmp);
if ((file_exists($tmp)) && ($life_time<$r_time) && (filesize($tmp)>1000))
{
$fp = @fopen($tmp, 'r');
if (filesize($tmp) > 0){
$text = @fread($fp, filesize($tmp));
if (strlen($text) > 100) $xml_answer=$text;
}else{
$text = '';
$no_answer=true;
}
fclose($fp);
}else{
$RetrieveFile='';
/*$OpenFile = fopen($url, "r", true);
if (fsockopen('rp5.ru', '80', $errno, $errstr, 2) && $OpenFile)
{
while(!@feof($OpenFile)) {
$RetrieveFile.=@fread($OpenFile, 1498);
}
@fclose($OpenFile);*/
if ($handle = curl_init()){
curl_setopt($handle, CURLOPT_URL, "http://rp5.ua/xml.php?id=247");
curl_setopt($handle, CURLOPT_FAILONERROR, 1);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
/* curl_setopt($handle, CURLOPT_POST, 1);
curl_setopt($handle, CURLOPT_POSTFIELDS, $doc);*/
$RetrieveFile = curl_exec($handle);
@unlink($tmp);
$fp = @fopen($tmp, 'w');
if ($fp){
fwrite($fp, $RetrieveFile);
fclose($fp);
}
}else{
$no_answer=true;
}
$xml_answer=$RetrieveFile;
}
if (false == $no_answer) {
$xml_answer=rawurldecode($xml_answer);
$p=xml_parser_create();
xml_parse_into_struct($p,$xml_answer,&$val,&$index);
xml_parser_free($p);
$created = $val[0]["attributes"]["CREATED"];
$date = $val[0]["attributes"]["DATE"];
$t_day=date('d')+0;
$t_month=date('m')+0;
$t_year=date('Y')+0;
$dt0=$t_year.$t_month.$t_day;
//$today=`date '+%Y-%m-%d'`;
foreach ($val as $v){
if ($v['tag'] == 'ERROR')
{
$error_srv = true;
$error_from_srv = $v['value'];
}
if ($v['tag'] == 'POINT_ID') $point_id = $v['value']; // ID НП в базе сайта
if ($v['tag'] == 'REGION_ID') $region_id = $v['value']; // ID региона, в котором находится НП
if ($v['tag'] == 'COUNTRY_ID') $country_id = $v['value']; // ID страны, в которой находится НП
if ($v['tag'] == 'POINT_NAME') $point_name = $v['value']; // полное наименование НП. Например, "Дубровка (Дубровский р-н)"
if ($v['tag'] == 'POINT_NAME_TRIM') $point_name_trim = $v['value']; // сокращенное наименование НП без скобок. Например, "Дубровка".
// point_name_trim соответствует point_name до открывающейся скобки.
// Если скобки нет, то point_name_trim = point_name.
if ($v['tag'] == 'POINT_NAME2') $point_name2 = $v['value']; // название НП в предложном падеже с предлогом. Например, "в Дубровке".
// Используется в заголовках вида "Погода в Дубровке" ("Погода " + point_name2)
if ($v['tag'] == 'POINT_TIMESTAMP') $point_timestamp = $v['value']; // unix-таймстамп даты в НП
if ($v['tag'] == 'GMT_ADD') $gmt_add = $v['value']; // GMT-смещение в часах с учетом перехода на летнее-зимнее время
if ($v['tag'] == 'POINT_DATE') $point_date = $v['value']; // местное время в НП в момент запуска скрипта с указанием gmt_add.
// Например, "Sun, 12 Dec 2004 13:00:25 +0300"
if ($v['tag'] == 'POINT_DATE_TIME') $point_date_time = $v['value']; // местное время в НП в момент запуска скрипта. Используется менее
// подробный формат. Например, "2004-12-12 13:00"
if ($v['tag'] == 'TIME_STEP') $time_step = $v['value'];
$tag[$time_step][$v['tag']] = $v['tag'];
$value[$time_step][$v['tag']] = $v['value'];
if ($v['tag'] == 'DATETIME') {
$ts[] = $time_step;
$dt_ = explode(" ",$v['value']);
$dt_ = explode("-",$dt_[0]);
$dt=$dt_[0].$dt_[1].$dt_[2];
$value[$time_step]['dt_t']=gmdate("d M",mktime(0,0,0,$dt_[1],$dt_[2],$dt_[0]));
$value[$time_step]['dt_d']=$dt_[2];
$value[$time_step]['dt_m']=$dt_[1];
$r=$dt - $dt0;
if ($r == 0) {
$value[$time_step]['dt'] = "Сегодня";
} else if ($r == 1) {
$value[$time_step]['dt'] = "Завтра";
} else if ($r == 2) {
$value[$time_step]['dt'] = "Послезавтра";
}
}
if ($v['tag'] == 'G' && ($v['value'] < 11 && $v['value'] > 0)) {
$value[$time_step]['night'] = 1;
$value[$time_step]['bgcolor'] = "#001389";
$value[$time_step]['dt_n'] = "ночью";
} else if ($v['tag'] == 'G' && ($v['value'] < 23 || $v['value'] > 11)) {
$value[$time_step]['night'] = 0;
$value[$time_step]['bgcolor'] = "#026EFE";
$value[$time_step]['dt_n'] = "днем";
}
}
/* Описание полей с данными
point_id - ID НП в базе сайта
region_id - ID региона, в котором находится НП
country_id - ID страны, в которой находится НП
point_name - полное наименование НП. Например, "Дубровка (Дубровский р-н)"
point_name_trim - сокращенное наименование НП без скобок. Например, "Дубровка". point_name_trim соответствует point_name
до открывающейся скобки. Если скобки нет, то point_name_trim = point_name.
point_name2 - название НП в предложном падеже с предлогом. Например, "в Дубровке". Используется в заголовках вида
"Погода в Дубровке" ("Погода " + point_name2)
point_timestamp - unix-таймстамп даты в НП
gmt_add - GMT-смещение в часах с учетом перехода на летнее-зимнее время
point_date - местное время в НП в момент запуска скрипта с указанием gmt_add.
Например, "Sun, 12 Dec 2004 13:00:25 +0300"
point_date_time - местное время в НП в момент запуска скрипта. Используется менее подробный формат.
Например, "2004-12-12 13:00"
time_step - смещение указанного ниже момента прогноза (datetime) в часах относительно 0 час Гринвичского времени
в день составления прогноза. time_step соответствует русскому термину "заблаговременность прогноза".
Например, если time_step = 48 - это прогноз на момент времени, отстоящий на 48 часов от момента
составления прогноза (0 ГМТ).
datetime - момент прогноза по местному времени (дата час:минута)
G - момент прогноза по местному времени в часах. Например, "15".
HHii - момент прогноза по местному времени в часах и минутах. Например, "15:00"
cloud_cover - облачность (%)
precipitation - толщина осадков (мм), накопленных в течение 4 часов перед указанным выше моментом времени.
Например, если G = 15 час, то осадки накапливались с 11 до 15 час. Таким образом, при визуализации
значение осадков - в отличие от всех остальных параметров - лучше располагать между соседними
моментами времени.
pressure - атмосферное давление (мм. рт. ст.)
temperature - температура воздуха (град. Цельсия)
humidity - относительная влажность воздуха (%)
wind_direction - направление ветра (С-северный, СВ-северо-восточный и т.д.). Направление указывает ОТКУДА дует ветер.
Например, северный ветер дует с севера.
wind_velocity - скорость ветра (м/сек)
falls - тип осадков (0 - отсутствие осадков, 1 - дождь, 2 - дождь со снегом, 3 - снег)
drops - коэффициент количества снежинок или капель дождя для визуализации.
Возможные значения: 0.5, 1, 2, 3, 4, 5, 6, 7, 8. На сайте rp5.ru drops умножается на 2.
Тогда при drops = 0.5 нужно изобразить одну каплю или снежинку,
при drops = 8 - шестнадцать капель или снежинок. */
/* echo "<hr width=\"220\" align=\"left\">";
echo $tag[0]['TIME_STEP']." = ".$value[$ts[0]]['TIME_STEP']."<br>";
echo $tag[0]['DATETIME']." = ".$value[$ts[0]]['DATETIME']."<br>";
echo $tag[0]['G']." = ".$value[$ts[0]]['G']."<br>";
echo $tag[0]['HHII']." = ".$value[$ts[0]]['HHII']."<br>";
echo $tag[0]['CLOUD_COVER']." = ".$value[$ts[0]]['CLOUD_COVER']."<br>";
echo $tag[0]['PRECIPITATION']." = ".$value[$ts[0]]['PRECIPITATION']."<br>";
echo $tag[0]['PRESSURE']." = ".$value[$ts[0]]['PRESSURE']."<br>";
echo $tag[0]['TEMPERATURE']." = ".$value[$ts[0]]['TEMPERATURE']."<br>";
echo $tag[0]['HUMIDITY']." = ".$value[$ts[0]]['HUMIDITY']."<br>";
echo $tag[0]['WIND_DIRECTION']." = ".$value[$ts[0]]['WIND_DIRECTION']."<br>";
echo $tag[0]['WIND_VELOCITY']." = ".$value[$ts[0]]['WIND_VELOCITY']."<br>";
echo $tag[0]['FALLS']." = ".$value[$ts[0]]['FALLS']."<br>";
echo $tag[0]['DROPS']." = ".$value[$ts[0]]['DROPS']."<br>";
echo "<hr width=\"220\" align=\"left\">";
echo "POINT_ID = ".$point_id."<br>";
echo "REGION_ID = ".$region_id."<br>";
echo "COUNTRY_ID = ".$country_id."<br>";
echo "POINT_NAME = ".$point_name."<br>";
echo "POINT_NAME_TRIM = ".$point_name_trim."<br>";
echo "POINT_NAME2 = ".$point_name2."<br>";
echo "POINT_TIMESTAMP = ".$point_timestamp."<br>";
echo "GMT_ADD = ".$gmt_add."<br>";
echo "POINT_DATE = ".$point_date."<br>";
echo "POINT_DATE_TIME = ".$point_date_time."<br>";
*/
$main['point_name'] = $point_name;
$main['point_name2'] = $point_name2;
$main['dt_d0'] = $value[$ts[0]]['dt_d'];
$main['dt_m0'] = $month[$value[$ts[0]]['dt_m']];
$main['dt_n0'] = $value[$ts[0]]['dt_n'];
$main['dt_d1'] = $value[$ts[1]]['dt_d'];
$main['dt_m1'] = $month[$value[$ts[1]]['dt_m']];
$main['dt_n1'] = $value[$ts[1]]['dt_n'];
$main['dt_d2'] = $value[$ts[2]]['dt_d'];
$main['dt_m2'] = $month[$value[$ts[2]]['dt_m']];
$main['dt_n2'] = $value[$ts[2]]['dt_n'];
$main['dt_d3'] = $value[$ts[3]]['dt_d'];
$main['dt_m3'] = $month[$value[$ts[3]]['dt_m']];
$main['dt_n3'] = $value[$ts[3]]['dt_n'];
$main['bgcolor0'] = $value[$ts[0]]['bgcolor'];
$main['bgcolor1'] = $value[$ts[1]]['bgcolor'];
$main['bgcolor2'] = $value[$ts[2]]['bgcolor'];
$main['bgcolor3'] = $value[$ts[3]]['bgcolor'];
$main['icons0'] = "<img src=\"../pogoda/images/".$value[$ts[0]]['night'].
($value[$ts[0]]['FALLS'] == 0 && $value[$ts[0]]['CLOUD_COVER'] >= 60 ? '4' : ($value[$ts[0]]['PRECIPITATION'] >= 2 ? $value[$ts[0]]['FALLS'] : '0')).".gif\" width=\"60\" height=\"20\">";
$main['icons1'] = "<img src=\"../pogoda/images/".$value[$ts[1]]['night'].
($value[$ts[1]]['FALLS'] == 0 && $value[$ts[1]]['CLOUD_COVER'] >= 60 ? '4' : ($value[$ts[0]]['PRECIPITATION'] >= 2 ? $value[$ts[1]]['FALLS'] : '0')).".gif\" width=\"60\" height=\"20\">";
$main['icons2'] = "<img src=\"../pogoda/images/".$value[$ts[2]]['night'].
($value[$ts[2]]['FALLS'] == 0 && $value[$ts[2]]['CLOUD_COVER'] >= 60 ? '4' : ($value[$ts[0]]['PRECIPITATION'] >= 2 ? $value[$ts[2]]['FALLS'] : '0')).".gif\" width=\"60\" height=\"20\">";
$main['icons3'] = "<img src=\"../pogoda/images/".$value[$ts[3]]['night'].
($value[$ts[3]]['FALLS'] == 0 && $value[$ts[3]]['CLOUD_COVER'] >= 60 ? '4' : ($value[$ts[0]]['PRECIPITATION'] >= 2 ? $value[$ts[3]]['FALLS'] : '0')).".gif\" width=\"60\" height=\"20\">";
$main['temperature0'] = $value[$ts[0]]['TEMPERATURE'];
$main['temperature1'] = $value[$ts[1]]['TEMPERATURE'];
$main['temperature2'] = $value[$ts[2]]['TEMPERATURE'];
$main['temperature3'] = $value[$ts[3]]['TEMPERATURE'];
$main['pressure0'] = $value[$ts[0]]['PRESSURE'];
$main['pressure1'] = $value[$ts[1]]['PRESSURE'];
$main['pressure2'] = $value[$ts[2]]['PRESSURE'];
$main['pressure3'] = $value[$ts[3]]['PRESSURE'];
$main['humidity0'] = $value[$ts[0]]['HUMIDITY'];
$main['humidity1'] = $value[$ts[1]]['HUMIDITY'];
$main['humidity2'] = $value[$ts[2]]['HUMIDITY'];
$main['humidity3'] = $value[$ts[3]]['HUMIDITY'];
$main['wind_dir0'] = $value[$ts[0]]['WIND_DIRECTION'];
$main['wind_vel0'] = $value[$ts[0]]['WIND_VELOCITY'];
$main['wind_dir1'] = $value[$ts[1]]['WIND_DIRECTION'];
$main['wind_vel1'] = $value[$ts[1]]['WIND_VELOCITY'];
$main['wind_dir2'] = $value[$ts[2]]['WIND_DIRECTION'];
$main['wind_vel2'] = $value[$ts[2]]['WIND_VELOCITY'];
$main['wind_dir3'] = $value[$ts[3]]['WIND_DIRECTION'];
$main['wind_vel3'] = $value[$ts[3]]['WIND_VELOCITY'];
}
if (true == $no_answer || true == $error_srv)
{
$main['no_data'] = 1;
$main['error'] = _MD_WRP5_NO_ANSWER;
$main['error_from_srv'] = $error_from_srv;
}
print("");
if ($main[no_data] == 1) {
print("<center><h5><$main[error]></h5><b><$main[error_from_srv]></b></center>");
}
else{
print("<center>
<table cellpadding='5' cellspacing='1' border='0' width='500' class='weather' bgcolor='#cccccc'>
<tr align='center' bgcolor='#f0f0f0'>
<td><b><h3>$main[point_name]</h3></b></td>
<td><b>$main[dt_d0] $main[dt_m0]<br>$main[dt_n0]</b></td>
<td><b>$main[dt_d1] $main[dt_m1]<br>$main[dt_n1]</b></td>
<td><b>$main[dt_d2] $main[dt_m2]<br>$main[dt_n2]</b></td>
<td><b>$main[dt_d3] $main[dt_m3]<br>$main[dt_n3]</b></td>
</tr>
<tr bgcolor='#ffffff'>
<td><b>Погода</b></td>
<td align='center' bgcolor='$main[bgcolor0]'> $main[icons0]</td>
<td align='center' bgcolor='$main[bgcolor1]'> $main[icons1]</td>
<td align='center' bgcolor='$main[bgcolor2]'> $main[icons2]</td>
<td align='center' bgcolor='$main[bgcolor3]'> $main[icons3]</td>
</tr>
<tr bgcolor='#ffffff'>
<td><b>Температура <sup>o</sup>C</b></td>
<td align='center'>$main[temperature0]</td>
<td align='center'>$main[temperature1]</td>
<td align='center'>$main[temperature2]</td>
<td align='center'>$main[temperature3]</td>
</tr>
<tr bgcolor='#ffffff'>
<td><b>Давление, мм</b></td>
<td align='center'>$main[pressure0]</td>
<td align='center'>$main[pressure1]</td>
<td align='center'>$main[pressure2]</td>
<td align='center'>$main[pressure3]</td>
</tr>
<tr bgcolor='#ffffff'>
<td><b>Влажность %</b></td>
<td align='center'>$main[humidity0]</td>
<td align='center'>$main[humidity1]</td>
<td align='center'>$main[humidity2]</td>
<td align='center'>$main[humidity3]</td>
</tr>
<tr bgcolor='#ffffff'>
<td><b>Ветер</b></td>
<td align='center'>$main[wind_dir0]<br>$main[wind_vel0] м/с</td>
<td align='center'>$main[wind_dir1]<br>$main[wind_vel1] м/с</td>
<td align='center'>$main[wind_dir2]<br>$main[wind_vel2] м/с</td>
<td align='center'>$main[wind_dir3]<br>$main[wind_vel3] м/с</td>
</tr>
</table></center>
<p align='center' style='text'><b>
Прогноз погоды любезно предоставлен <a href='http://rp5.ru/town.php?id=$pid' target='_blank'>rp5.ru</a><br>
</font></b>");
}
?>