2007年3月9日 星期五

PHP食譜-Yahoo 天氣 Plugin

[菜 名]

Yahoo 天氣 Plugin



[材 料]

PHP 4.2+ , 5+
jQuery 1.1.2
PHPRPC 3.0 beta
Yahoo 天氣

[做 法]

1.抓取Yahoo 天氣的資料再以PHP這把菜刀加以料理,料理過程如下…

function yahoo_weather($location){
$web=file_get_contents('http://tw.weather.yahoo.com/today.html');//今日天氣的網址
preg_match_all('/(.*?)<\/td>.*?(.*?).*?(.*?)<\/td>.*?(.*?)<\/span><\/td>.*?(.*?)<\/span><\/td>/s',$web,$match);//取出要的資料

$array=array();
foreach($match[1] as $key=>$va){
$array[$va]['pic']=$match[2][$key];
$array[$va]['weather']=$match[3][$key];
$array[$va]['heat']=$match[4][$key];
$array[$va]['rain']=$match[5][$key];
$array[$va]['location']=$va;
}
return $array[$location];//傳回所要查詢的陣列
}

將不要的魚刺拿掉後,淋上PHPRPC美乃滋後,就是一道美味的Server端的菜了。


2.再來要擺上些裝飾的東西,佈局如下:


<select id="location" name="location"><option value="">請選擇要查詢的地區</option><option value="台北市">台北市</option><option value="基隆北海岸">基隆北海岸</option><option value="台北地區">台北地區</option><option value="桃園地區">桃園地區</option><option value="新竹地區">新竹地區</option><option value="苗栗地區">苗栗地區</option><option value="台中地區">台中地區</option><option value="彰化地區">彰化地區</option><option value="南投地區">南投地區</option><option value="雲林地區">雲林地區</option><option value="嘉義地區">嘉義地區</option><option value="台南地區">台南地區</option><option value="高雄市">高雄市</option><option value="高雄地區">高雄地區</option><option value="屏東地區">屏東地區</option><option value="恆春半島">恆春半島</option><option value="宜蘭地區">宜蘭地區</option><option value="花蓮地區">花蓮地區</option><option value="台東地區">台東地區</option><option value="澎湖地區">澎湖地區</option><option value="金門地區">金門地區</option><option value="馬祖地區">馬祖地區</option></select><img id="lo_waiting" style="display: none;" src="http://www.morgan724.com/drupal/indicator.gif" />
<img id="lo_waiting" style="display: none;" src="http://www.morgan724.com/drupal/indicator.gif" />
<div id="weather_p">
<span id="lo_location"></span><span id="lo_pic"></span>

天氣預測:<span id="lo_weather"></span>

氣溫:<span id="lo_heat"></span>

降雨機率:<span id="lo_rain"></span>
</div>

控制火侯:

$(document).ready(function(){
chang_location=$('#location').val();
if(chang_location!=''){
yahoo_weather(chang_location);
}else{
$('#weather_p').hide();
}
$('#location').change(
function(){
$('#lo_waiting').show();
yahoo_weather($(this).val());
}
);

}
)
var rpc = new PHPRPC_Client();
rpc.useService('http://www.morgan724.com/drupal/yahoo_dict.php');
function yahoo_weather(chang_location){
$('#weather_p').hide('slow');
if(chang_location==''){
$('#weather_p,#lo_waiting').hide();
return;
}
if (rpc.ready) {
rpc.yahoo_weather($('#location').val(),function(result){
for(var key in result){
$('#lo_'+key).html(result[key]);
$('#weather_p').show();
$('#lo_waiting').hide();
}
})
}else {
window.setTimeout('yahoo_weather("'+chang_location+'");', 200);
}
}

效果如BawBaw私人招待所左側的Yahoo 天氣,請大家試試看吧。

[貼 心 叮 嚀]
加上快取機制會更美味喔,才不會讓客人等太久。

完整範例:
yahoo_weather.zip

4 則留言: