- 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);
- /*
-
- * 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 ( '', " \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) {
- $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");
2,新浪天气
地址:http://php.weather.sina.com.cn
代码:
- 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){
- $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 ( '', " \n", $contents );
- file_put_contents ( self::$weatherXML, $contents ) or die ( '没有写权限' );
- }
- /**
- * 模拟获取内容函数
- * @param type $url
- * @return type
- */
-
- static private function vget($url) {
- $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();
|