[php]代码库
/**
*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] );
}
}
初级程序员
by: 云代码会员 发表于:2014-09-12 19:23:21 顶(0) | 踩(0) 回复
cityid 是怎么算出来的?
回复评论