借用Google API 写一个查看天气预报的类
[i=s] 本帖最后由 lgchgt 于 2010-6-25 09:55 AM 编辑 [/i]借用Google API 写一个查看天气预报的类[code]<?PHP
//- Describe:
//- Author: liuguichun
//- Link:
//- CreateTime: 2010-6-21
//- UpdateTime:
//- Package:
class weather {
static $url = 'http://www.google.com/ig/api?hl=zh-cn&weather=';
static $city = 'Beijing'; //默认城市北京
static $weatherXML = '';
/**
* 获得远程xml并缓存到本地
*/
static public function getXML() {
header ( 'Content-Type: text/html; charset = utf-8' );
if (isset ( $_GET ['city'] )) {
self:city = empty ( $_GET ['city'] ) ? 'Beijing' : $_GET ['city'];
}
$contents = file_get_contents ( self:url . self:city ) or die ( '查询出错' );
self:weatherXML = date ( "Ymd" ) . '-' . self:city . '-weather.xml';
if (is_file ( self:weatherXML )) {
$fileTime = filemtime ( self:weatherXML );
$stater = time () - $fileTime - 60 * 60 * 2;
if ($stater < 0) {
self::cacheXML ( $contents );
}
return true;
}
self::cacheXML ( $contents );
}
/**
* 解析xml
*/
static public function analysisXML() {
if (is_file ( self:weatherXML )) {
$xml = simplexml_load_file ( self:weatherXML );
} else {
$xml = simplexml_load_file ( self:url . self:city );
}
$xml = ( array ) $xml;
$city = ( array ) $xml ['weather']->forecast_information->city;
if (isset ( $xml ['weather']->problem_cause )) {
$problem = ( array ) $xml ['weather']->problem_cause;
echo $problem ['@attributes'] ['data'];
return;
}
$conditions = ( array ) $xml ['weather']->current_conditions->condition;
$humidity = ( array ) $xml ['weather']->current_conditions->humidity;
$temp_c = ( array ) $xml ['weather']->current_conditions->temp_c;
$conditions_icon = ( array ) $xml ['weather']->current_conditions->icon;
$wind_condition = ( array ) $xml ['weather']->current_conditions->wind_condition;
$forecast = ( array ) $xml ['weather'];
$forecast = ( array ) $forecast ['forecast_conditions'];
$html = '';
foreach ( $forecast as $key => $val ) {
${'day_of_week_' . $key} = ( array ) $val->day_of_week;
${'low_' . $key} = ( array ) $val->low;
${'high_' . $key} = ( array ) $val->high;
${'icon_' . $key} = ( array ) $val->icon;
${'condition_' . $key} = ( array ) $val->condition;
$html .= "<DIV class=w_fc title={${'condition_'.$key}['@attributes']['data']}>{${'day_of_week_'.$key}['@attributes']['data']}<BR>
<IMG class=w_fci alt={${'condition_'.$key}['@attributes']['data']} src=\"http://www.google.com{${'icon_'.$key}['@attributes']['data']}\ " width=40 height=40><BR>
<NOBR>{${'low_'.$key}['@attributes']['data']}°C | {${'high_'.$key}['@attributes']['data']}°C</NOBR></DIV>";
}
self::printCss ();
echo <<<weather
<DIV>
<DIV style="ADDING-TOP: 2px" class=modlabel><A style="COLOR: #00c; FONT-WEIGHT: bold" class=w_lnk href="#">{$city['@attributes']['data']}</A></DIV>
<DIV class=w_box>
<DIV class=w_ccs>
<DIV class=w_ccis><IMG id=w_4_c0_icon class=w_cci alt="{$city['@attributes']['data']}({$conditions['@attributes']['data']})" src="http://www.google.com{$conditions_icon['@attributes']['data' ]}" width=40 height=40><BR>
</DIV>
<DIV id=w_4_c0_temp class=w_cc_temp>{$temp_c['@attributes']['data']}°C</DIV>
<DIV id=w_4_c0_text class=w_cc_text>当前: {$conditions['@attributes']['data']}< BR>
{$wind_condition['@attributes']['data']}<BR>
{$humidity['@attributes']['data']}</DIV>
</DIV>
<DIV id=w_4_c0_fcs class=w_fcs>
$html
</DIV>
</DIV>
</DIV>
weather;
}
/**
* 打印样式
*/
static public function printCss() {
echo <<<css
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
td, div, span, p { font-family:arial, sans-serif; font-size:10pt; margin:0}
.w_fci {BORDER-BOTTOM: #bbc 1px solid;BORDER-LEFT: #bbc 1px solidADDING-BOTTOM: 1pxADDING-LEFT: 1px;WIDTH: 40pxADDING-RIGHT: 1px; HEIGHT: 40px;BORDER-TOP: #bbc 1px solid;BORDER-RIGHT: #bbc 1px solidADDING-TOP: 1px}
.w_fc { TEXT-ALIGN: center; PADDING-BOTTOM: 0pxADDING-LEFT: 0pxADDING-RIGHT: 10px;FLOAT: left;HEIGHT: 80pxADDING-TOP: 0px}
.w_fcs {PADDING-BOTTOM: 0pxADDING-LEFT: 0pxADDING-RIGHT: 0px;OVERFLOW: hiddenADDING-TOP: 2px}
.w_box {PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 1px}
.w_ccs {PADDING-BOTTOM: 2px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; PADDING-TOP: 2px}
.w_ccis {PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; PADDING-RIGHT: 1px; FLOAT: left; PADDING-TOP: 1px}
.w_cci {BORDER-BOTTOM: #bbc 1px solid; BORDER-LEFT: #bbc 1px solid; PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; WIDTH: 40px; PADDING-RIGHT: 1px; HEIGHT: 40px; BORDER-TOP: #bbc 1px solid; BORDER-RIGHT: #bbc 1px solid; PADDING-TOP: 1px}
.w_cc_temp {PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 10px; FLOAT: left; FONT-SIZE: 180%; PADDING-TOP: 0px}
.w_cc_text {HEIGHT: 60px; OVERFLOW: hidden}
.w_lnk {COLOR: #00c}
.modlabel { padding-bottom:2px; padding-top:5px;}
</style>
css;
}
/**
* 创建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 ( '没有写权限' );
}
}
weather::getXML ();
weather::analysisXML ();[/code]效果:[url=http://www.mylogged.com/deamo/weather.php?city=heze,shandong]http://www.mylogged.com/deamo/weather.php?city=heze,shandong[/url] 或[url=http://www.mylogged.com/deamo/weather.php]http://www.mylogged.com/deamo/weather.php[/url] 没一个给意见的!自己顶一下 不错,显示中文就好了
邦顶 很好,我来帮忙顶一下 我试了下,楼主的代码根本不能运行,不知楼主测试了吗,你提供rar让大家下载吧!、[b] [url=http://www.phpx.com/redirect.php?goto=findpost&pid=1153183&ptid=261191]1#[/url] [i]lgchgt[/i] [/b] 呵呵 ,分享就分享齐全嘛 显示中文才好
页:
[1]