Интересно это утащить к себе.
При просмотре кода страницы наткнулся на данные для графика:
Код: Выделить всё
arr_temperature=[{x: Date.UTC(2016,5,29,21), y: 19.6, ind: 0}, {x: Date.UTC(2016,5,29,22), y: 18.7, ind: 1}, {x: Date.UTC(2016,5,29,23), y: 17.8, ind: 2}, {x: Date.UTC(2016,5,30,0), y: 16.9, ind: 3}, {x: Date.UTC(2016,5,30,1), y: 16.1, ind: 4}, {x: Date.UTC(2016,5,30,2), y: 15.2, ind: 5}, {x: Date.UTC(2016,5,30,3), y: 14.4, ind: 6}, {x: Date.UTC(2016,5,30,4), y: 13.7, ind: 7}, {x: Date.UTC(2016,5,30,5), y: 13.4, ind: 8}, {x: Date.UTC(2016,5,30,6), y: 14.5, ind: 9}, {x: Date.UTC(2016,5,30,7), y: 16.9, ind: 10}, {x: Date.UTC(2016,5,30,8), y: 19.7, ind: 11},
Был написан скрипт для чтения этих данных в новую таблицу meteoinfo со структурой id, added, date_forecast, type, value
КодПоказать
Код: Выделить всё
debmes('get_meteoinfo_forecast start');
$lines=file('http://meteoinfo.ru/forecasts5000/russia/moscow-area/domodedowo');
if(!lines){
debmes('get_meteoinfo_forecast - Не могу прочесть файл с meteoinfo.ru');
return;
}
// Осуществим проход массива и выведем номера строк и их содержимое в виде HTML-кода.
foreach ($lines as $line_num => $line) {
//echo "Строка #<b>{$line_num}</b> : " . strip_tags($line) . "<br />\n";
$mystr=strip_tags($line); //очистим строку
$pos=strpos( $mystr,'arr_temperature=['); //температура
if($pos===0){
$repl=array('arr_temperature=[{', '}];', '}, {'); //заменим на |
$mstr=str_replace($repl,"|",$mystr);
$arr_temp=explode('|',$mstr);
$repl=array('x: Date.UTC(','), y:', ', ind:',','); //заменим на |
foreach($arr_temp as $t1){
$t1=str_replace($repl," ",$t1);
list($year, $month, $day,$hour,$temp,$id) = sscanf($t1, "%d %d %d %d %s %d");
if($year>2000){
$temp=(float)$temp;
$month=$month+1;//месяцы с 0!
$date=$year.'-'.$month.'-'.$day.' '.$hour.':00';
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='temperature';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']='temperature';
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
//arr_wind_dir=
$pos=strpos( $mystr,'arr_wind_dir=['); //ветер - направление
if($pos===0){
$repl=array('arr_wind_dir=[{', '}];', '}, {'); //заменим на |
$mstr=str_replace($repl,"|",$mystr);
$arr_wd=explode('|',$mstr);
$repl=array('x: Date.UTC(','), y:', ', ind:',','); //заменим на |
foreach($arr_wd as $t1){
$t1=str_replace($repl," ",$t1);
list($year, $month, $day,$hour,$temp,$id) = sscanf($t1, "%d %d %d %d %s %d");
if($year>2000){
$temp=(float)$temp;
$month=$month+1;
$date=$year.'-'.$month.'-'.$day.' '.$hour.':00';
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='wind_dir';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']='wind_dir';
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
$pos=strpos( $mystr,'arr_wind_speed=['); //ветер - скорость
if($pos===0){
$repl=array('arr_wind_speed=[{', '}];', '}, {'); //заменим на |
$mstr=str_replace($repl,"|",$mystr);
$arr_ws=explode('|',$mstr);
$repl=array('x: Date.UTC(','), y:', ', ind:',','); //заменим на |
foreach($arr_ws as $t1){
$t1=str_replace($repl," ",$t1);
list($year, $month, $day,$hour,$temp,$id) = sscanf($t1, "%d %d %d %d %s %d");
if($year>2000){
$temp=(float)$temp;
$month=$month+1;
$date=$year.'-'.$month.'-'.$day.' '.$hour.':00';
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='wind_speed';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']='wind_speed';
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
$pos=strpos( $mystr,'arr_pressure=['); //давление
if($pos===0){
$repl=array('arr_pressure=[{', '}];', '}, {'); //заменим на |
$mstr=str_replace($repl,"|",$mystr);
$arr_pr=explode('|',$mstr);
$repl=array('x: Date.UTC(','), y:', ', ind:',','); //заменим на |
foreach($arr_pr as $t1){
$t1=str_replace($repl," ",$t1);
list($year, $month, $day,$hour,$temp,$id) = sscanf($t1, "%d %d %d %d %s %d");
if($year>2000){
$temp=(float)$temp;
$month=$month+1;
$date=$year.'-'.$month.'-'.$day.' '.$hour.':00';
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='pressure';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']='pressure';
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
$pos=strpos( $mystr,'arr_precip_val=['); //
if($pos===0){
$repl=array('arr_precip_val=[{', '}];', '}, {'); //заменим на |
$mstr=str_replace($repl,"|",$mystr);
$arr_pv=explode('|',$mstr);
$repl=array('x: Date.UTC(','), y:', ', ind:',','); //заменим на |
foreach($arr_pv as $t1){
$t1=str_replace($repl," ",$t1);
list($year, $month, $day,$hour,$temp,$id) = sscanf($t1, "%d %d %d %d %s %d");
if($year>2000){
$temp=(float)$temp;
$month=$month+1;
$date=$year.'-'.$month.'-'.$day.' '.$hour.':00';
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='precip_val';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']='precip_val';
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
$pos=strpos( $mystr,'arr_precip_ver=['); //
if($pos===0){
$repl=array('arr_precip_ver=[{', '}];', '}, {'); //заменим на |
$mstr=str_replace($repl,"|",$mystr);
$arr_pver=explode('|',$mstr);
$repl=array('x: Date.UTC(','), y:', ', ind:',','); //заменим на |
foreach($arr_pver as $t1){
$t1=str_replace($repl," ",$t1);
list($year, $month, $day,$hour,$temp,$id) = sscanf($t1, "%d %d %d %d %s %d");
if($year>2000){
$temp=(float)$temp;
$month=$month+1;
$date=$year.'-'.$month.'-'.$day.' '.$hour.':00';
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='precip_ver';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']='precip_ver';
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
$pos=strpos( $mystr,'arr_humidity=['); //
if($pos===0){
$repl=array('arr_humidity=[{', '}];', '}, {'); //заменим на |
$mstr=str_replace($repl,"|",$mystr);
$arr_h=explode('|',$mstr);
$repl=array('x: Date.UTC(','), y:', ', ind:',','); //заменим на |
foreach($arr_h as $t1){
$t1=str_replace($repl," ",$t1);
list($year, $month, $day,$hour,$temp,$id) = sscanf($t1, "%d %d %d %d %s %d");
if($year>2000){
$temp=(float)$temp;
$month=$month+1;
$date=$year.'-'.$month.'-'.$day.' '.$hour.':00';
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='humidity';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']='humidity';
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
$pos=strpos( $mystr,'arr_phenomenon=['); //описание погоды
if($pos===0){
$repl=array('arr_phenomenon=[{', '}];', '}, {'); //заменим на |
$mstr=str_replace($repl,"|",$mystr);
$arr_phi=explode('|',$mstr);
$repl=array('x: Date.UTC(','), y:', ', ind:'); //заменим на ' '
foreach($arr_phi as $t1){
$t1=str_replace($repl," ",$t1);
list($year, $month, $day,$hour) = sscanf($t1, "%d,%d,%d,%d");
if($year>2000){
$ps=strpos($t1,'"');
if(!$ps===false){
$ps1=strpos($t1,'"',$ps+1);
$temp=substr($t1,$ps+1,$ps1-$ps-1);
}
$month=$month+1;
$date=$year.'-'.$month.'-'.$day.' '.$hour.':00';
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='phenomenon_img';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']='phenomenon_img';
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
//arr_phenomenon_name=
$pos=strpos( $mystr,'arr_phenomenon_name=['); //описание погоды
if($pos===0){
$repl=array('arr_phenomenon_name=[{', '}];', '}, {'); //заменим на |
$mstr=str_replace($repl,"|",$mystr);
$arr_ph=explode('|',$mstr);
$repl=array('x: Date.UTC(','), y:', ', ind:'); //заменим на ' '
foreach($arr_ph as $t1){
$t1=str_replace($repl," ",$t1);
list($year, $month, $day,$hour) = sscanf($t1, "%d,%d,%d,%d");
if($year>2000){
$ps=strpos($t1,'"');
if(!$ps===false){
$ps1=strpos($t1,'"',$ps+1);
$temp=substr($t1,$ps+1,$ps1-$ps-1);
}
$month=$month+1;
$date=$year.'-'.$month.'-'.$day.' '.$hour.':00';
$Record=SQLSelectOne("SELECT * FROM meteoinfo WHERE DATE_FORECAST='".$date."' and TYPE='phenomenon_name';");
$Record['DATE_FORECAST']=$date;
$Record['TYPE']='phenomenon_name';
$Record['VALUE']=$temp;
$Record['ADDED']=date('Y-m-d H:i:s');
SQLUpdateInsert('meteoinfo', $Record);
}
}
}
}
//удалим старьё
//$dt= mktime(0, 0, 0, gg('ThisComputer.MonthNum'), gg('ThisComputer.DayOfMonthNum'), gg('ThisComputer.YearNow'));//<--edited 2016-10-13 Убрал ссылки на нестандартные свойства
SQLExec("delete from `meteoinfo` WHERE `DATE_FORECAST` <'".date('Y-m-d 00:00:00')."'"); //<--edited 2016-10-13
debmes('get_meteoinfo_forecast-OK');
например, вычислим аналог Яндекс-погоды - температуру ночью.
Я беру минимум на дату с 0 ч. до 6 утра:
Код: Выделить всё
$sql="SELECT round(min(`VALUE`)) t_n FROM `meteoinfo` where `TYPE`='temperature'";
$sql=$sql." and date_format(`DATE_FORECAST`,'%d.%m.%Y')='".gg('ThisComputer.DateNow')."' and date_format(`DATE_FORECAST`,'%H') between '00' and '06'";
$rec= SQLSelectOne($sql);
if($rec) sg('weather_my.t_night',$rec['t_n']);
Можно создать объект прогноза погоды как в openweather на неск. дней.