程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php調用yahoo sina api 開發天氣預報

php調用yahoo sina api 開發天氣預報

編輯:關於PHP編程

現在的網站都會有一些服務性的東東。如日歷,天氣預報等等!由於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) { 
       $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){
              $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) {
       $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();

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved