YUI2.6.0とPHPでマッシュアップしてみる。

YUIのConnection ManagerのExampleにある「Retrieving a Yahoo! Weather RSS Feed」のサンプルは、「Yahoo! Weather RSS feed」からRSSのフィードをとってくるサンプル。
ソースを追ってみると、Exampleをおいているサーバーのweather.phpというプログラムを呼んでいる。
どんなものか分からないので、東京の天気だけ取ってくるものを適当に作ってみることにする。

Yahoo! Weather RSS feed」を読むと、気温も華氏ではなく、摂氏でとれるようなので、そのようにする。

PHP(開発機に入っているWindows版の5.2.6)から、fopenでサイトを開くので、php.iniの

allow_url_open=ON

とする(このパラメータはセキュリティー上、OFFが推奨されていたとは思う)。

まず、初期画面は以下のようにする。

「東京の天気」ボタンを押すと、PHPから「Yahoo! Weather RSS feed」の東京のページを読みこみでレスポンスする。

RSSフィードXMLのなので、responseXMLで受け取れば、普通のXMLとして扱える。

以下にJavascriptを含む全文を掲載する。
ボタンのClickイベントで、XMLHttpRequestが発火するようにしたが、loadイベントかなにかに引っ掛ければ、画面の部品として使えるかもしれない。

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>Ajax_Sampling</TITLE>
<style type="text/css">
body {
	margin:0;
	padding:0;
}

#weatherModule {
	width: 350px;
	hight: 650px;
	padding: 10px;
    background-color: #6D739A;
    color: white;
	border: 1px solid green;
	
}

</style>

<!-- 読み込むjs --> 
<script type="text/javascript" src="scripts/yui/yahoo/yahoo-min.js" >
</script> 
<script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js" >
</script> 
<script type="text/javascript" src="scripts/yui/connection/connection-min.js" >
</script> 

<script type="text/javascript">
	
function successHandler(o){

	var root = o.responseXML;

	var oTitle = root.getElementsByTagName('description')[0].firstChild.nodeValue;
	var oDateTime = root.getElementsByTagName('lastBuildDate')[0].firstChild.nodeValue;
	var descriptionNode = root.getElementsByTagName('description')[1].firstChild.nodeValue;

	YAHOO.util.Dom.get('weatherModule').innerHTML = 
           "<p>" + oTitle + "</p>" + "<p>" + oDateTime + 
           "</p>" + descriptionNode;

}

function failureHandler(o){

	YAHOO.util.Dom.get('weatherModule').innerHTML = 
                                o.status + " " + o.statusText;
}

function getModule(){
	var entryPoint = 'ajax_yui_connection_Mashup.php';
	var sUrl = entryPoint;

	var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, 
			{ 
				success:successHandler, 
				failure:failureHandler
			}
	);
};

</script>
</HEAD>
<BODY>
<div id="weatherModule">
<p>
「東京の天気」のボタン選んで押してください。<br/>
東京の今日の天気を取得して、戻ってきます。
</p>
<input type="button" value="東京の天気" onClick="getModule()">
</div>
</BODY>
</HTML>

PHPでパースするという手もあると思うが、要素の取り出しは、上のhtml中のJavascriptで行っている。
以下のPHPは、「Yahoo! Weather RSS feed」の東京のページを読みこみでレスポンスするだけのものである。

<?php
/* ajaxサンプル。
	      
		author	; t.odaka
		date	; 2008/11/02
*/

header("Content-Type:text/xml");

// p=JAXX0085: 東京、u=c: 摂氏での気温
$url="http://xml.weather.yahoo.com/forecastrss?p=JAXX0085&u=c";

// fopenで読み込む。
// php.iniのallow_url_open=ONが必要。
$feed='';
if($fp = fopen($url,"r")){
	$fp = fopen($url,"r");
	while( ! feof( $fp ) ){
		$wk = fgets( $fp, 9182 );
		$feed=$feed.$wk;
	}	
	fclose($fp);
}

// 結果の返却
echo $feed;

?>