Страница 1 из 1

Погода от Гидрометцентра - 1

Добавлено: Ср июн 22, 2016 2:10 am
xor
Сначала отвалился Яндекс, потом OpenWeather (хотя оно мне и раньше не нравилось ни точностью, ни отсутствием поддержки).
Эх, всё нужно делать самому (c).
Есть сайт Гидрометцентра, нашел на нем фактическую погоду рядом - http://meteoinfo.ru/pogoda/russia/mosco ... domodedowo.
Был создан объект minfo класса weather и сценарий, читающий сайт и заполняющий свойства объекта:
сценарийПоказать

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

//Для разных пунктов может быть разный набор полей -- картинки и описания может не быть
debmes('get_meteoinfo - start');
$lines=file('http://meteoinfo.ru/pogoda/russia/moscow-area/domodedowo');
if(!$lines) {
 DebMes('get_meteoinfo - Не удалось прочитать файл с фактом с meteoinfo.ru');
 return;
}
 // Осуществим проход массива и выведем номера строк и их содержимое в виде HTML-кода.

$fl=0;
foreach ($lines as $line_num => $line) {
 //echo "Строка #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
 switch ($fl){
  case 1:
   $temp= strip_tags($line);
   break;
  case 2:
   $humidity=strip_tags($line);
   break;
  case 3:
   $metcast=strip_tags($line);
   break;
  case 4:
   $winddir=strip_tags($line);
   break;
  case 5:
   $windspeed=strip_tags($line);
   break;
  case 6:
   $clouds=strip_tags($line);
   break;
  case 7:
   $rain=strip_tags($line);
   break;
 }
  $fl=0;
  $mystr=htmlspecialchars($line);
  $pos=strpos( $mystr,'td class=ww bgcolor');
  if(!$pos===false){
        $ps=strpos($mystr,'weather_images');
        if(!$ps===false){
          $ps1=strpos($mystr,'gif');
          $img=substr($mystr,$ps+15,$ps1-$ps-16);
         //echo '/images/weather_images/'.$img.'.gif';
        }
  } 
  $mystr=strip_tags($line);
  $pos=strpos( $mystr,'(время московское)');
 if($pos>0){
  $t_update=substr($mystr,$pos-8,8);
  $dat_update=substr($mystr,1,$pos-9);

 }
 $pos=strpos( $mystr,'Температура воздуха, ');
 if($pos>0){
  $fl=1;
 }
 $pos=strpos( $mystr,'Относительная влажность, %');
 if(!$pos===false){
  $fl=2;
 }
 $pos=strpos( $mystr,'Комментарий к погоде');
 if(!$pos===false){
  $fl=3;
 }
  $pos=strpos( $mystr,'Направление ветра');
 if(!$pos===false){
  $fl=4;
 }
   $pos=strpos( $mystr,'Скорость ветра, м/с');
 if(!$pos===false){
  $fl=5;
 }
   $pos=strpos( $mystr,'Балл общей облачности');
 if(!$pos===false){
  $fl=6;
 }
   $pos=strpos( $mystr,'Осадки за 12 часов, мм');
 if(!$pos===false){
  $fl=7;
 }

}

sg("minfo.Temp",(float)$temp);
sg("minfo.clouds",(float)$clouds);
sg("minfo.WindSpeed",(float)$windspeed);
sg("minfo.Winddir",trim($winddir));
sg("minfo.Image",$img);
sg("minfo.Humidity",(float)$humidity);
sg("minfo.Type",trim($metcast));
sg("minfo.day_txt",trim($dat_update));
sg("minfo.hour",trim($t_update));
$pos = strpos($metcast, "дожд");
if ($pos === false) {
    sg("minfo.Rain",0);
    } else {
    sg("minfo.Rain",1);
    }


$cast='Погода '.trim($dat_update).' на '.trim($t_update).'.';
$cast=$cast.trim($metcast).'.';
$cast=$cast.' Температура за окном '.trim($temp).' C.';
//две строки дальше - самописная функция, вычисляет FeelsLike/RealFeel/Ощущается как   
//$rf=myRealFeel($temp,$humidity,$windspeed);
//$cast=$cast.' Ощущается как '.$rf.' C.';

$cast=$cast.' Относительная влажность '.trim($humidity).' %.';
if($windspeed>0){
  $cast=$cast.' Ветер -'.trim($winddir).'. Скорость '.trim($windspeed).' м в секунду.';
}
$cast=$cast.' Облачность '.trim($clouds).' %.';
if($rain>0){
  $cast=$cast.' Осадки за 12 часов '.trim($rain).' мм.';
}
sg('minfo.metcast',$cast);
debmes('get_meteoinfo OK');
Повторюсь, состав выводимых полей для, по крайней мере - Домодедова, переменчив как и погода).
Т.е., картинка и краткое описание может присутствовать в полночь и отсутствовать в 21 час.
Для меня это не играет роли, т.к. я охотился за количеством осадков и облачностью - для задержки включения света на улице.

Этого добиться удалось.

Но захотелось знать, что будет завтра.