- /**
- *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] );
- }
- }
复制代码
|