- 2007-08-29 0:48
- papervision3d
Amazon Web Service(AWS)をActionScript3.0から利用する方法をご紹介します。
AWSはURIで要求(REST)した結果をXMLで返してくれるデータベースサービスです。
ActionScript3.0は強力なXML操作の手段を提供してくれています。
それはE4X(ECMAScript for XML)と呼ばれる標準に沿った手法です。
それでは早速実装にかかります。
AWSへのREST(Representational State Transfer)要求は以下の通りです。
var url:String = "http://webservices.amazon.co.jp/onca/xml?" + "Service=AWSECommerceService&" + "AWSAccessKeyId=[アクセスキーID]&" + "Operation=ItemSearch&" + "SearchIndex=Books&" + "Keywords=actionscript&" + "ResponseGroup=Request,Small";
「Books」カテゴリで「actionscript」のキーワードにヒットする商品のデータベースを取得します。
ActionScript3.0でURLにアクセスします。
var loader:URLLoader; loader = new URLLoader(); loader.addEventListener(Event.COMPLETE, completeFnc); loader.load(new URLRequest(url));
URLのロードが完了(COMPLETE)したときcompleteFncというメソッドが実行されます。
URLのロードが完了したときに実行されるcompleteFncメソッドの実装です。
private function completeFnc(event:Event):void { var ns:String = "http://webservices.amazon.com/AWSECommerceService/2005-10-05"; default xml namespace = new Namespace(ns); var xml : XML = new XML(loader.data); for each(var item:XML in xml..Item) { trace(item.ASIN[0]); } }
まずは取得したXMLをパースします。
var ns:String = "http://webservices.amazon.com/AWSECommerceService/2005-10-05"; default xml namespace = new Namespace(ns); var xml:XML = new XML(loader.data);
ここでポイントとなるのが名前空間(namespace)です。
E4Xでは名前空間が指定されたXMLの解析は必ず正確に取り扱う必要があります。
なぜなら名前空間はその中で使われる変数へのアクセスを制限するモノだからです。
AWSの名前空間は「http://webservices.amazon.com/AWSECommerceService/2005-10-05」です。
そして、ここで奇妙なシンタックスが出てきます。
default xml namespace = new Namespace(ns);
これで一纏まりのディレクティブです。詳細はコチラを参照下さい。
この設定でデフォルトの名前空間のURIを指定できます。
AWSはこのURIだけが名前空間として使用されていますので、これだけで十分です。
取得したXMLから、ASINの値を取得してみます。
for each(var item:XML in xml..Item) { trace(item.ASIN[0]); }
Item要素を集める。
xml..Item
これによりxmlに含まれるItemタグを全て集めてXMLListにします。
XMLListを「for each」でイテレートします。
ASINというタグはItemタグの中に1つしかないので「item.ASIN[0]」として値を取得します。
E4Xでは「.(ピリオド)」を使ってタグの階層を辿っていきます。
全ソースコードを公開しておきます。
package { import flash.display.Sprite; import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.Event; public class AmazonWebservice extends Sprite { private var loader:URLLoader; public function AmazonWebservice() { var url:String = "http://webservices.amazon.co.jp/onca/xml?" + "Service=AWSECommerceService&" + "AWSAccessKeyId=[アクセスキーID]&" + "Operation=ItemSearch&" + "SearchIndex=Books&" + "Keywords=actionscript&" + "ResponseGroup=Request,Small"; loader = new URLLoader(); loader.addEventListener(Event.COMPLETE, completeFnc); loader.load(new URLRequest(url)); } private function completeFnc(event:Event):void { var ns:String = "http://webservices.amazon.com/AWSECommerceService/2005-10-05"; default xml namespace = new Namespace(ns); var xml:XML = new XML(loader.data); for each(var item:XML in xml..Item) { trace(item.ASIN[0]); } } } }
アマゾンのウェブサービスをActionScript3.0で利用する方法でした。
強力なE4Xのおかげで非常に簡単にアクセスする事ができましたが、名前空間の存在がハマリ所でした。
(だいぶ悩まされました…)
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.adamrocker.com/blog/150/amazon_web_service_actionscript30_e4x.html/trackback/
- Listed below are links to weblogs that reference
- Amazon Web ServiceをActionScript3.0から利用する方法 from throw Life
