/** *php抓取天气预报(天气,气温,风力,日出日落...) * *第一天没有最高气温数据,第八天没有最低气温数据 *注意对数字进行过滤时不要忘记对负号进行判断 *对风力过滤时要考虑到3-5级这种格式 */ class weatherfetch { private $f; function getNum ( $string ) { $tmpstr = ''; $strlen = strlen ( $string ); for ( $i=0; $i<$strlen; $i++ ) { $str=substr ( $string, $i, 1 ); $str1=trim ( $str ); if ( is_numeric ( $str1 ) ) { $tmpstr.=$str1+0; } if ( $str1=="-"&&is_numeric ( substr ( $string, $i-1, 1 ) ) ) { $tmpstr.= $str1; } } return $tmpstr; } function __construct() { $this->f= new SaeFetchurl(); } function getChineseNum ( $string ) { $tmpstr = ''; $arr = array ( 1,2,3,4,5,6,7,8,9,0 ); $strlen = strlen ( $string ); for ( $i=0; $i<$strlen; $i++ ) { $str=substr ( $string, $i, 1 ); $str1=trim ( $str ); if ( ord ( $str ) >0xA0 ) { $tmpstr.= substr ( $string, $i, 3 ); $i = $i+2; } if ( is_numeric ( $str1 ) ) { $tmpstr.= $str1; } if ( $str1=="-"&&is_numeric ( substr ( $string, $i-1, 1 ) ) &&is_numeric ( substr ( $string, $i+1, 1 ) ) ) { $tmpstr.= $str1; } } return $tmpstr; } function getChinese ( $string,$encode="GBK" ) { switch ( $encode ) { case "GBK" : $codelength=2; break; case "GB2312" : $codelength=3; break; case "UTF-8" : $codelength=3; break; case "UTF-16" : $codelength=4; break; } $tmpstr = ''; $arr = array ( 1,2,3,4,5,6,7,8,9,0 ); $strlen = strlen ( $string ); for ( $i=0; $i<$strlen; $i++ ) { $str=substr ( $string, $i, 1 ); $str1=trim ( $str ); if ( ord ( $str ) >0xA0 ) { $tmpstr.= substr ( $string, $i, $codelength ); $i = $i+$codelength-1; } } return $tmpstr; } function get ( $cityid ) { $url="http://www.weather.com.cn/weather/".$cityid.".shtml"; $data=$this->f->fetch ( $url ); $sun=explode ( ' ',$data ); $sun=explode ( " ",$sun[1] ); $sun=explode ( " ",$sun[1] ); $sun=explode ( "",$sun[0] ); $sunrise=strlen ( $sun[0] ); $sunrise=substr ( $sun[0],$sunrise-5 );//日出时间 $sunset=strlen ( $sun[1] ); $sunset=substr ( $sun[1],$sunset-5 );//日落时间 $sunhour=substr ( $sunset,0,2 )-substr ( $sunrise,0,2 ); $sunminute=$sunhour*60+substr ( $sunset,-2 )-substr ( $sunrise,-2 );//日照时间 $yubao=explode ( 'class="yuBaoTable"',$data ); $num=count ( $yubao ); $tl=array(); $th=array(); $fx=array(); $fl=array(); $weather=array(); //第一天 $tr=explode ( "",$yubao[1] ); $td=explode ( "",$tr[0] ); $weather[]=$this->getChinese ( $td[3],"UTF-8" );//晚上天气 $fx[]=$this->getChinese ( $td[5],"UTF-8" );//晚上风向 $fl[]=substr ( $this->getChineseNum ( $td[6],"UTF-8" ),5 );//晚上风力 $tltemp=explode ( "",$td[4] );//最低气温 $tl[]=$this->getNum ( $tltemp[1] ); //从第二天到第七天 for ( $i=2; $i<$num-1; $i++ ) { $tr=explode ( "",$yubao[$i] ); $td=explode ( "",$tr[0] ); $weather[]=$this->getChinese ( $td[3],"UTF-8" );//白天天气 $fx[]=$this->getChinese ( $td[5],"UTF-8" );//白天风向 $fltemp=substr ( $this->getChineseNum ( $td[6],"UTF-8" ),5 ); $fl[]=$fltemp;//白天风力 $thtemp=explode ( "",$td[4] ); $th[]=$this->getNum ( $thtemp[1] );//最高气温 $td=explode ( "",$tr[1] ); $tltemp=explode ( "",$td[3] ); $tl[]=$this->getNum ( $tltemp[1] );//最低气温 } //第八天 $tr=explode ( "",$yubao[$num-1] ); $td=explode ( "",$tr[0] ); $weather[]=$this->getChinese ( $td[3],"UTF-8" );//白天天气 $fx[]=$this->getChinese ( $td[5],"UTF-8" );//白天风向 $fl[]=substr ( $this->getChineseNum ( $td[6],"UTF-8" ),5 );//白天风力 $thtemp=explode ( "",$td[4] ); $th[]=$this->getNum ( $thtemp[1] );//最高气温 if ( count ( $weather ) ==8 ) { return array ( "weather"=>$weather,"tl"=>$tl,"th"=>$th,"fx"=>$fx,"fl"=>$fl,"sunset"=>$sunset,"sunrise"=>$sunrise,"sunminute"=>$sunminute ); } else { return 1; } } function getday1 ( $cityid ) { $url="http://www.weather.com.cn/weather/".$cityid.".shtml"; $data=$this->f->fetch ( $url ); $yubao=explode ( 'class="yuBaoTable"',$data ); $tr=explode ( "",$yubao[1] ); $td=explode ( "",$tr[0] ); $thtemp=explode ( "",$td[4] ); return $this->getNum ( $thtemp[1] ); } }