• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

技术天地

php调用yahoo sina api 开发天气预报

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/2018/1110/181.html

 

php调用yahoo sina api 开发天气预报

 

现在的网站都会有一些服务性的东东。如日历,天气预报等等!由于google 永久性关闭了天气api  所以我又找了一个调用yahoo 和 新浪的天气预报 api。

 

 

yahoo 天气预报地址 http://developer.yahoo.com/weather/

 

废话不多说我们常州网站开发培训-幻天网络直接代码贴上:

 

 

 

<?php

header ( 'Content-Type: text/html; charset = utf-8' );

class weather {

    static $url = 'http://xml.weather.yahoo.com/forecastrss?u=c&w=';

    static $city = 'Beijing'; //默认城市北京 这里要注意的是 city 要填拼音 我试过用中文有好几个地区都调用不到

    static $weatherXML = '';

        static $woeid_file   =   "woeid";

    static $file_path   =   "data/";

        

    /**

      * 获得远程xml并缓存到本地

      */

    static public function getXML($city = null) {

 

      if ($city != null){

            self::$city = $city;

      }

      self::$weatherXML =  self::$file_path .   md5(self::$city) . '-weather.xml';

      if (file_exists( self::$weatherXML )) {          

           $fileTime = filemtime ( self::$weatherXML );

           $stater = time () - $fileTime - 60 * 60 * 2;

       if ($stater > 0) {

           return true;         

       }       

      }        

          //获取woeid

          $woeid    =   self::getWOEID();     

          self::$url    = self::$url . $woeid[0];

          //获取当天 天气

          $XML  = self::vget(self::$url);     

          //保存当天 天气到文件

          self::cacheXML($XML);

          

          self::analysisXML($XML);

    }  

        

        static public function analysisXML($simple) {    

            

                $p = xml_parser_create();

                

                xml_parse_into_struct($p, $simple, $vals, $index);

                

                xml_parser_free($p);               

                

                //本周天气

                $weekindex  =   $index['YWEATHER:FORECAST'];

                $week       =   array();

                foreach($weekindex as $k=>$v){

                    $week[$k]   =  $vals[$v]['attributes']; 

                }

                unset($index);

                unset($vals);

                print_r($week);

               /*

                <yweather:forecast day="Wed" date="18 Sep 2013" low="20" high="32" text="Sunny" code="32"/>

                * day 星期

                * date 日期

                * low 最低温度

                * high 最高温度

                * test 天气状态 

                * code 天气图标

                */

        }

        /*

         * 取得地区WOEID码

         */       

        static private function getWOEID(){            

            static $woeid  =   array();

            

            if(isset($woeid[self::$city])){

                return $woeid[self::$city];

            }

            

            if (file_exists( self::$file_path . self::$woeid_file )) {

                $woeidSTR =    file_get_contents(self::$file_path . self::$woeid_file);                

                $woeid  =   json_decode($woeidSTR , true);                

                if(isset($woeid[self::$city])){

                    return $woeid[self::$city];

                }

            }

            $geoPlaces    =   "http://query.yahooapis.com/v1/public/yql?q=select%20woeid%20from%20geo.places%20where%20text='".self::$city."%20CH'";  

            

            $XML    =   simplexml_load_file( $geoPlaces );           

 

            if(isset($XML->results->place[0])){

                $rs = $woeid[self::$city] =   $XML->results->place[0]->woeid;

                //保存到文件

                $woeidSTR   =  json_encode($woeid);

                file_put_contents(self::$file_path . self::$woeid_file, $woeidSTR);                

                return $rs;                

            }else{

                //如果找不到城市 woeid 默认城市就改为 北京

                self::$city =    "Beijing";

                

                return self::getWOEID();

            }            

        }

    /**

      * 创建xml缓存

      * @param $contents 要缓存的内容

      */

    static private function cacheXML($contents) {

        $contents = str_ireplace ( '<?xml version="1.0"?>', "<?xml version=\"1.0\"?> \n", $contents );

        $contents = mb_convert_encoding ( $contents, 'utf-8', 'gbk' );

        file_put_contents ( self::$weatherXML, $contents ) or die ( '没有写权限' );

    }

        /**

         * 模拟获取内容函数

         * @param type $url

         * @return type

         */

         

        static private function vget($url) { <br>       $user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)";

            $curl = curl_init (); // 启动一个CURL会话

            curl_setopt ( $curl, CURLOPT_URL, $url ); // 要访问的地址

            curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 ); // 对认证证书来源的检查

            curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 1 ); // 从证书中检查SSL加密算法是否存在

            curl_setopt ( $curl, CURLOPT_USERAGENT, $user_agent ); // 模拟用户使用的浏览器

            @curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自动跳转

            curl_setopt ( $curl, CURLOPT_AUTOREFERER, 1 ); // 自动设置Referer

            curl_setopt ( $curl, CURLOPT_HTTPGET, 1 ); // 发送一个常规的Post请求        

            curl_setopt ( $curl, CURLOPT_TIMEOUT, 120 ); // 设置超时限制防止死循环

            curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 显示返回的Header区域内容

            curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回

            $tmpInfo = curl_exec ( $curl ); // 执行操作

            if (curl_errno ( $curl )) {

                curl_close ( $curl ); // 关闭CURL会话

                die('Errno' . curl_error ( $curl )) ;

            }

            curl_close ( $curl ); // 关闭CURL会话

            return $tmpInfo; // 返回数据

        }

}

weather::getXML("Changsha");

 

 

 

 

新浪 http://php.weather.sina.com.cn

 

 

 

<?php

header ( 'Content-Type: text/html; charset = utf-8' );

 

class weather {

    static $url = 'http://php.weather.sina.com.cn/xml.php?password=DJOYnieT8234jlsK&day=0&city=';//password是固定值

    static $city = '%B1%B1%BE%A9'; //默认城市北京

    static $weatherXML = '';

    static $file_path   =   "data/";

    /**

      * 获得远程xml并缓存到本地

      */

    static public function getXML($city = null) {

 

      if ($city != null){<br>              $city = mb_convert_encoding ( $city, 'gbk', 'utf-8' );

            self::$city = urlencode($city);

      }

      self::$weatherXML =  self::$file_path .   md5(self::$city) . '-weather.xml';

          

      if (file_exists( self::$weatherXML )) {          

           $fileTime = filemtime ( self::$weatherXML );

           $stater = time () - $fileTime - 60 * 60 * 2;

       if ($stater > 0) {

           return true;         

       }       

      }

          

          $contents =   self::vget( self::$url . self::$city );   

          

      self::cacheXML ( $contents );

          

          self::analysisXML();

          

    }

    /**

      * 解析xml

      */

    static public function analysisXML() {             

            

                $XML    =   simplexml_load_file(self::$weatherXML );    

                print_r($XML);

    }

    

    /**

      * 创建xml缓存

      * @param $contents 要缓存的内容

      */

    static private function cacheXML($contents) {

        $contents = str_ireplace ( '<?xml version="1.0"?>', "<?xml version=\"1.0\"?> \n", $contents );

        file_put_contents ( self::$weatherXML, $contents ) or die ( '没有写权限' );

    }

        /**

         * 模拟获取内容函数

         * @param type $url

         * @return type

         */

         

        static private function vget($url) { <br>       $user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)";

            $curl = curl_init (); // 启动一个CURL会话

            curl_setopt ( $curl, CURLOPT_URL, $url ); // 要访问的地址

            curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 ); // 对认证证书来源的检查

            curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 1 ); // 从证书中检查SSL加密算法是否存在

            curl_setopt ( $curl, CURLOPT_USERAGENT, $user_agent ); // 模拟用户使用的浏览器

            @curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自动跳转

            curl_setopt ( $curl, CURLOPT_AUTOREFERER, 1 ); // 自动设置Referer

            curl_setopt ( $curl, CURLOPT_HTTPGET, 1 ); // 发送一个常规的Post请求

            curl_setopt ( $curl, CURLOPT_TIMEOUT, 120 ); // 设置超时限制防止死循环

            curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 显示返回的Header区域内容

            curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回

            $tmpInfo = curl_exec ( $curl ); // 执行操作

            if (curl_errno ( $curl )) {

                curl_close ( $curl ); // 关闭CURL会话

                die('Errno' . curl_error ( $curl )) ;

            }

            curl_close ( $curl ); // 关闭CURL会话

            return $tmpInfo; // 返回数据

        }

}

weather::getXML();

 


上篇:上一篇:C#WebBrowser控件使用教程与技巧收集
下篇:下一篇:php调用心知天气API,实现微信自动回复