homeへのリンクです。

flashでAmazonECS 11

2006年07月30日

AS3.0からXMLクラスが、トップレベルのデータ形式のクラスになった。
StringとかArrayとか同じような感じ。
XMLクラスにはload()メソッドとかはなくなるので、データのロードはflash.net.URLLoaderクラスがやることになる。
http://livedocs.macromedia.com/flex/2/langref/index.html参照。

サンプルは以下のようになる。

package classes.xml{
   import flash.net.*;
   import flash.display.*;
   import flash.events.*;
   public class LoadAmazonXML extends Sprite{
      private var urlloader:URLLoader;
      private var urlrequest:URLRequest;
      private var optype:String;//オペレーションのタイプ。
      public function LoadAmazonXML(tgt:Function,op:String){
         optype=op;
         urlloader=new URLLoader();
         urlloader.addEventListener(Event.COMPLETE,tgt);
      }
      public function makeURL(pr:Array):void{
         var myid:String="自分のIDを入れる";
         var urlstr:String="http://webservices.amazon.co.jp/onca/xml
?Service=AWSECommerceService&AWSAccessKeyId="
         +myid
         +"&&AssociateTag=macinbasic-22&Version=2005-10-05&Operation="
         +optype;
         switch(optype){
            case "BrowseNodeLookup":
            urlstr+="&BrowseNodeId="
            +pr[0];
            break;
         }
         urlrequest=new URLRequest(urlstr);
      }
      //urlstrを作成した後、ロードをかける。
      public function load():void{
         urlloader.load(urlrequest);
      }
   }
}

基本的にはURLLoaderにロードさせるとき、URLRequestというオブジェクトを作って渡す。

呼び出し側としては、以下のようになる。

package classes.test{
   import classes.xml.*;
   import flash.events.*;
   import flash.net.*;
   import flash.display.*;
   public class TestMain extends MovieClip{
      public function TestMain(){
         var lax:LoadAmazonXML;
         lax=new LoadAmazonXML(dispData,"BrowseNodeLookup");
         lax.makeURL(["465610"]);
         //URLを生成させる。
         //パラメータは:amazonECSのOperation、BrowseNodeId
         lax.load();
      }
      public function dispData(eventObj:Event):void{
         trace(eventObj.target.data);
      }
   }
}

ロードされたデータは、URLLoaderのdataプロパティに格納される。

URLVariablesというクラスもある。
これはURLに添付する送信データを、URLRequestの.dataプロパティに格納することを可能にする。
これを使うと、上の例のURLRequestの作成部分は以下のように整理することが出来る。

public function makeURL(pr:Array):void{
   var myid:String="自分のIDを入れる";
   var urlstr:String="http://webservices.amazon.co.jp/onca/xml";
   var urlvar:URLVariables =new URLVariables();
   urlvar.Service="AWSECommerceService";
   urlvar.AWSAccessKeyId=myid;
   urlvar.AssociateTag="macinbasic-22";
   urlvar.Version="2005-10-05";
   urlvar.Operation=optype;
   switch(optype){
      case "BrowseNodeLookup":
      urlvar.BrowseNodeId=pr[0];
      break;
   }
   urlrequest=new URLRequest(urlstr);
   urlrequest.data=urlvar;
}

確かに使い易く、きれいに整理できる。