抓取最近八天天气(非利用接口,直接从网站提取)

[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(‘<div class="weatherTopright">’,$data);
$sun=explode("<dl>",$sun[1]);
$sun=explode("</dl>",$sun[1]);
$sun=explode("</strong>",$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("</tr>",$yubao[1]);
$td=explode("</td>",$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("<strong>",$td[4]);//最低气温
$tl[]=$this->getNum($tltemp[1]);
//从第二天到第七天
for($i=2;$i<$num-1;$i++){
$tr=explode("</tr>",$yubao[$i]);
$td=explode("</td>",$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("<strong>",$td[4]);
$th[]=$this->getNum($thtemp[1]);//最高气温
$td=explode("</td>",$tr[1]);
$tltemp=explode("<strong>",$td[3]);
$tl[]=$this->getNum($tltemp[1]);//最低气温

}
//第八天
$tr=explode("</tr>",$yubao[$num-1]);
$td=explode("</td>",$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("<strong>",$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("</tr>",$yubao[1]);
$td=explode("</td>",$tr[0]);
$thtemp=explode("<strong>",$td[4]);
return $this->getNum($thtemp[1]);

}
}
[/php]

Leave a Reply

Time limit is exhausted. Please reload CAPTCHA.

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据