• 技术文章 >php教程 >PHP源码

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

    PHP中文网PHP中文网2016-06-01 14:33:06原创536
    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]);
      
            }
        }
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:抓取 最近 天气
    上一篇:PHP 截取中文字符串(支持多种编码) 下一篇:PHP实现合并discuz用户_php技巧
    千万级数据并发解决方案

    相关文章推荐

    • php得到文件扩展名• PHP使用mail函数发送邮件标题乱码问题解决方法 • PHP 文件上传脚本• ThinkPHP 建议配置(未完成)• 携程基票 sdk
    1/1

    PHP中文网