PHP と AS3 の Namespace の処理
2010年03月17日 10:46
PHP/AS3 共に XML Namespace の記述方法をいつも忘れるのでメモ。
今回の目標は Flickr の latest XML から <media:thumbnail> の url と width と height を取得すること。
AS3 の場合は Namespace オブジェクトを作成し、それを基に特定のノードにアクセスする。
var _xml:String = "http://api.flickr.com/services/feeds/photos_public.gne?id=53418554@N00&lang=en-us&format=rss_200";
var _urlRequest:URLRequest = new URLRequest();
_urlRequest.url = _xml;
var _urlLoader:URLLoader = new URLLoader();
_urlLoader.addEventListener(Event.COMPLETE, _loadCompleteHandler, false, 0, true);
_urlLoader.load(_urlRequest);
function _loadCompleteHandler(evt:Event):void
{
var _xml:XML = XML(evt.target.data);
_parseXml(_xml);
}
function _parseXml(xml:XML):void
{
var _media:Namespace = new Namespace("http://search.yahoo.com/mrss/");
var _mainNodeNum:uint = xml..item.length();
for(var _i:uint = 0; _i < _mainNodeNum; _i ++)
{
var _item:XML = xml..item[_i];
var _thumbnail:String = _item._media::thumbnail.@url;
var _thumbnailWidth:Number = _item._media::thumbnail.@width;
var _thumbnailHeight:Number = _item._media::thumbnail.@height;
trace(_thumbnail, _thumbnailWidth, _thumbnailHeight);
}
}
PHP の場合は SimpleXMLElement オブジェクトの registerXPathNamespace メソッドを使う。
今回は Zend_Http_Client と絡めて使ってみる。
require_once('Zend/Http/Client.php');
$_gatwayUri = 'http://api.flickr.com/services/feeds/photos_public.gne?id=53418554@N00&lang=en-us&format=rss_200';
$_client = new Zend_Http_Client($_gatwayUri);
$_response = $_client->request('GET');
if($_response->isSuccessful()) {
$_body = $_response->getBody();
if(strlen($_body) > 0) {
$_xml = simplexml_load_string($_body);
$_xml->registerXPathNamespace('media', 'http://search.yahoo.com/mrss/');
$_items = $_xml->xpath('/rss/channel/item');
foreach($_items as $_item) {
$_content = $_item->xpath('media:thumbnail');
$_thumbnailObj = $_content[0];
$_thumbnail = (string) $_thumbnailObj['url'];
$_width = (integer) $_thumbnailObj['width'];
$_height = (integer) $_thumbnailObj['height'];
echo '<pre>';
var_dump($_thumbnail);
var_dump($_width);
var_dump($_height);
echo '</pre>';
}
}
}
あー、忘れる。
