用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - php代码库

php抓取天气预报(天气,气温,风力,日出日落...)

2012-10-22 作者: 程序猿style举报

[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] );

	}
}


网友评论    (发表评论)

共2 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...