-
- header ( 'Content-Type: text/html; charset = utf-8' );
- クラス天気 {
- 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) ;
- if (file_exists ( self::$weatherXML )) {
- $fileTime = filemtime ( self::$weatherXML );
- $stater = time () - $fileTime - 60 * 60 * 2;
- if ($stater > 0) {
- return true
- }
- }
- //woeid = self::getWOEID();
- self::$url = self::$url .その日の天気
- $ XML = self::vget(self::$url);
- //その日の天気をファイルに保存します
- self::cacheXML($XML);
-
- self::analysisXML($XML) );
- }
-
- 静的パブリック関数分析XML($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][' 属性'];
- }
- unset($index);
- unset($vals);
- print_r($week);
- /*
-
- * 曜日 週
- * date date
- * 最低気温が低い
- * 最高気温が高い
- *天気ステータスをテスト
- * コード天気アイコン
- */
- }
- /*
- * エリア 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 キャッシュされるコンテンツ
- */
- 静的プライベート関数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 (互換性; 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 ); // リファラーを自動的に設定します
- curl, CURLOPT_HTTPGET, 1 ) // 通常の Post リクエストを送信します
- curl_setopt ( $ curl, CURLOPT_TIMEOUT , 120 ); // 無限ループを防ぐためにタイムアウト制限を設定します
- curl, CURLOPT_HEADER, 0 ) // 返されたヘッダー領域の内容を表示します
- curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );取得された情報はファイル ストリーム内にあります。
- $tmpInfo =curl_exec ( $curl ) // 操作を実行します
- if (curl_errno ( $curl )) {
- curl_close ( $curl ); session
- die('Errno' .curl_error ( $curl )) ;
- }
- curl_close ( $curl ); // CURL セッションを閉じる
- return $tmpInfo; // データを返す
- }
- }
- weather::getXML(" ");
コードをコピー
2、新浪天气
地址:http://php.weather.sina.com.cn
代:
-
- header ( 'Content-Type: text/html; charset = utf-8' );
-
- クラス天気 {
- static $url = 'http://php.weather.sina .com.cn/xml.php?password=DJOYnieT8234jlsK&day=0&city=';//パスワードは固定值
- 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) {
- 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 キャッシュされるコンテンツ
- */
- 静的プライベート関数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 (互換性; 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 ); // 定期的な投稿要求を送信します
- curl_setopt ( $curl, CURLOPT_TIMEOUT, 120 ); // 設定超過制限による死循環防止
- curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 返されたヘッダー領域の内容を表示します
- 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();
复制代
|