homeへのリンクです。

flashでAmazonECS 4

2006年05月14日

flashのActionScriptで、BrowesNodeLookupのResponseデータから、トップカテゴリの情報を取得する。

とりあえずこんな感じ。

view.swf

import classes.main.*;
import classes.loadbar.*;
import classes.xml.*;
import mx.controls.*;
class Main extends MovieClip{
	private var mytimeline:MovieClip;//基準になるタイムライン_root
	private function onLoad():Void{
		mytimeline=_root;//ターゲットタイムラインの参照取得
		mytimeline.stop();//ロードを監視するためにタイムラインをストップ
		_root.loadbar.init(mytimeline,startMain,this);//ロードバー初期化:パラメータは監視対象、コールバック関数、コールバックオブジェクト
	}
	private function startMain():Void{
		mytimeline.gotoAndStop("main");//検索画面へ移動
		var myxml:LoadAmazonXML=new LoadAmazonXML(acceptXML,this);//amazon用のxmlクラスを作成。パラメータは:コールバック関数、コールバックオブジェクト
		myxml.makeURL("BrowseNodeLookup",["465610"]);//URLを生成させる。パラメータは:amazonECSのOperation、BrowseNodeId
		myxml.load();//amazonECSのルートのカテゴリを要求(465610はジャンル別を一覧できるノードのID)
	}
	private function acceptXML(xml:XMLNode):Void{
		var browsenodeidlist:Array=ParseAmazonXML.getList(xml,"/BrowseNodeLookupResponse/BrowseNodes/BrowseNode/Children/BrowseNode/BrowseNodeId");//和図書トップカテゴリのBrowseNodeIdを取得
		var categorynamelist:Array=ParseAmazonXML.getList(xml,"/BrowseNodeLookupResponse/BrowseNodes/BrowseNode/Children/BrowseNode/Name");//和図書トップカテゴリのNameを取得
		for(var i:Number=0;i<browsenodeidlist.length;i++){
			_root.test.text+=browsenodeidlist[i]+":"+categorynamelist[i]+newline;
		}
	}
}

import classes.loadbar.*;
class LoadBar extends MovieClip{
	private var mytimeline:MovieClip;
	private var mycallbackfunc:Function;
	private var mycallbackobj:Object;
	public function init(timeline:MovieClip,callbackfunc:Function,callbackobj:Object){
		this._xscale=0;
		mytimeline=timeline;
		mycallbackfunc=callbackfunc;
		mycallbackobj=callbackobj;
		this.onEnterFrame=function():Void{
			var persentloaded:Number=mytimeline.getBytesLoaded()/mytimeline.getBytesTotal()*100;
			if(persentloaded<100){
				changeScale(persentloaded);
			}else{
				loadComplete();
			}
		}
	}
	private function changeScale(scale:Number){
		this._xscale=scale;
	}
	private function loadComplete(){
		delete this.onEnterFrame;
		mycallbackfunc.call(mycallbackobj);
	}
}

//大重美幸さんのFLASH ActionScript2.0を参考にしている
import mx.controls.*;
import classes.xml.*;
class LoadAmazonXML{
	private var urlstr:String;
	private var awsxml:XML;
	//callObj.callFunc()を実現するための引数⇒実際にはcallFunc.call(callObj,引数)と使う
	public function LoadAmazonXML(callFunc:Function,callObj:Object){
		awsxml=new XML();
		awsxml.ignoreWhite=true;
		awsxml.onLoad=function(success:Boolean){
			if(success){
				var rootNode=this.firstChild;
				callFunc.call(callObj,rootNode);
			}else{
				trace("loaderror");
			}
		}
	}
	//operationとparameterを引数にして、amazonECSに要求するURLをつくる。
	public function makeURL(op:String,pr:Array):Void{
		var myid:String="アクセスキーIDを入れる";
		urlstr="http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId="
		+myid
		+"&&AssociateTag=macinbasic-22&Version=2005-10-05&Operation="
		+op;
		switch(op){
			case "BrowseNodeLookup":
			urlstr+="&BrowseNodeId="
			+pr[0];
			break;
		}
	}
	//urlstrを作成した後、ロードをかける。
	public function load():Void{
		awsxml.load(urlstr);
	}
}

import classes.xml.*;
import mx.controls.*;
import mx.xpath.*;
class ParseAmazonXML{
	public static function getList(xmlnode:XMLNode,xpath:String):Array{
		var temparray:Array=XPathAPI.selectNodeList(xmlnode,xpath);
		var returnarray:Array=new Array();
		for(var i:Number=0;i<temparray.length;i++){
			returnarray[i]=temparray[i].firstChild;//xmlnodeの配列をtextの配列に変換する
		}
		return returnarray;
	}
}

コールバックファンクションの使い方は、この本で知りました。