前回からの続きです。
AWSTest.as ファイルのソースコードをざーっと解説します。
package
パッケージとはクラスを分かりやすく機能単位にまとめたり、クラス名の衝突を防ぐための機能です。
import fl.controls.*;
import fl.controls.dataGridClasses.DataGridColumn;
import fl.controls.listClasses.CellRenderer;
import fl.data.DataProvider;
import flash.events.*;
import flash.display.*;
import fl.events.*;
import flash.net.*;
import flash.ui.Keyboard;
importとはクラスを指定します。指定したクラスをこれから利用するという定義です。またパッケージを指定することもできます。パッケージを指定する場合は、パッケージ内のクラスを利用するという定義です。パッケージ内の複数のクラスを利用したい場合などにimportでパッケージを指定します。
/**
* メインクラス。
*/
「/***/」や「//」はソースコードにコメントを記述するための識別子です。
public
publicはアクセス制御指定子で、どこからでもアクセス可能なことを表します。
publicについてはここを参照してください
class
クラスとはオブジェクトの抽象表現のことです。データとメソッド(データを操作する手順)をまとめたオブジェクトの雛形です。
public class AWSTest
クラスを定義するときはこのように書きます。
※public、class、などについて詳しく知りたい人は、オブジェクト指向について書かれている書籍を参照してください。
// Amazon Web Service のXMLデータで定義されている名前空間
namespace ns = "http://webservices.amazon.com/AWSECommerceService/2005-10-05";
// 上記で指定した名前空間の利用することを指定
use namespace ns;
XML名前空間とは、XML文書の中で使われるエレメントやアトリビュート名を、URI参照により特定される名前空間に結びつけることにより修飾するための単純な方法を提供します。
取り合えずいま知っていおくことは。ActionScript3.0(以下AS3)においてXMLを利用するときは、名前空間を指定しないと利用できません。これは特にActionScript2.0(以下AS2)でXML利用したことある人は注意が必要です。AS2では特に指定しないでもXMLの処理が出来ました。しかしAS3ではXML名前空間の指定をしないとXMLの処理を行うことが出来ません。ので注意してください。
まず
namespace ns = "利用する名前空定義を指定"
で、名前空間を指定します。次に
use namespace ns
で、指定した名前空間の使用を許可します。
※XMLについて詳しい解説は書籍を参照してください。
private const AWS_URL:String = "http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&Version=2005-10-05&AWSAccessKeyId=あなたのアクセスキー&AssociateTag=あなたのアソシエイトID&type=heavy&Operation=ItemSearch&SearchIndex=Books";
今回のプログラムではRESTという方法でAmazonWebServiceを利用します。そのためのURLです。AmazonWebServiceについての詳しい話は次回とします。(次回ってあるのかな・・・遠い目・・・)
/** 指定URLからデータをダウンロードするコンポーネント */
private var loader:URLLoader;
varとは変数を定義するのに用います。
Wikipedia-変数
変数とは、プログラムのソースコードにおいて、扱われるデータを一定期間記憶し必要なときに利用できるようにするために、データに固有の名前を与えたものである。
AS3において変数の定義は
var 変数名:型
と定義します。
型(コンポーネント)についてはlivedocsを参照してください。
URLLoader
public function AWSTest():void
{
resList.addEventListener( ListEvent.ITEM_CLICK , listClickHandler );
keyword.addEventListener( KeyboardEvent.KEY_UP , keySearchHandler );
search.addEventListener( MouseEvent.CLICK , searchHandler );
}
メソッドの定義にはfunctionを指定します。メソッドの定義にはパラメーターも指定することが出来ます。
function メソッド名( パラメーター名:型 )
複数パラメーターを定義する場合は、「,」を使います。
function メソッド名( パラメーター名:型 , パラメーター名:型 )
また、クラス名と同じメソッド名をつけたメソッドのことをコンストラクタといいます。オブジェクト生成時に呼ばれるメソッドのことです。
addEventListenerはイベントリスナーを登録しています。
イベントリスナーとは、あるオブジェクトでブロードキャストしたイベントを別のオブジェクトで受け取れるようにするというものです。イベントが発生する側のオブジェクトをブロードキャスターオブジェクト、イベントを受け取る側のオブジェクトをリスナーオブジェクトと呼びます。ブロードキャスターオブジェクトは、ブロードキャスターが生成したイベントを受け取るリスナーオブジェクトを登録します。
詳しくはここを参照。
private function amazonSearch():void
{
if ( 0 < keyword.length )
{
var request:URLRequest = new URLRequest( AWS_URL + "&Keywords=" + keyword.text );
loader = new URLLoader();
loader.addEventListener( Event.COMPLETE, completeHandler );
loader.load( request );
}
}
Amazon Web Service へアクセスするメソッドです。
var request:URLRequest = new URLRequest( AWS_URL + "&Keywords=" + keyword.text );
Web サービスへリクエストするオブジェクトを生成します。
loader = new URLLoader();
データをロードをするオブジェクトを生成しています。
loader.addEventListener( Event.COMPLETE, completeHandler );
イベントリスナーを登録します。このイベントは通信が完了したら呼ばれるイベントです。
loader.load( request );
Amazon Web Service への通信を開始します。
private function keySearchHandler( event:KeyboardEvent ):void
{
if ( event.keyCode == Keyboard.ENTER )
{
amazonSearch();
}
}
TextInput にフォーカス(カーソル)があるときにキーボードで入力を行ったら呼ばれます。そのとき、 Enter キーを押したときのみamazonSearchメソッドを呼び出します。つまり Amazon Web Service へ通信します。
private function searchHandler( event:MouseEvent ):void
{
amazonSearch();
}
検索ボタンが押されたときに呼ばれます。そのとき、amazonSearchメソッドを呼び出しています。
private function completeHandler( event:Event ):void
{
var xml:XML = XML( loader.data );
// データグリッドに表示する情報だけを抜き出す
var ar:Array = new Array();
var i:uint = 0;
for each ( var item:XML in xml.Items.Item )
{
var obj = new Object();
obj.Title = item.ItemAttributes.Title;
obj.Author = item.ItemAttributes.Author[0];
obj.Asin = item.ASIN;
obj.Url = item.DetailPageURL;
ar[ i ] = obj;
i++;
}
// データグリッドに表示
resList.dataProvider = new DataProvider( ar );
}
通信終了後に呼ばれます。ロードしたデータはloader.dataに入っています。
var xml:XML = XML( loader.data );
dataはオブジェクト型といってどんな型のオブジェクトでも参照させることができる型です。しかしこのままでは面倒なので、XMLへキャストしています。
以下の十数行ではロードしたデータをArrayへ入れるためのデータを抜き出す処理をしています。
var ar:Array = new Array();
var i:uint = 0;
for each ( var item:XML in xml.Items.Item )
{
var obj = new Object();
obj.Title = item.ItemAttributes.Title;
obj.Author = item.ItemAttributes.Author[0];
obj.Asin = item.ASIN;
obj.Url = item.DetailPageURL;
ar[ i ] = obj;
i++;
}
Arrayとは配列を扱うクラスです。
配列についてはここを参照してください。
for eachについては
ここを参照してください。
private function listClickHandler( event:ListEvent ):void
{
// URL を開きます。
var url:URLRequest = new URLRequest( event.item.Url );
navigateToURL( url );
}
データグリッドをマウスでクリックしたときに呼ばれます。
var url:URLRequest = new URLRequest( event.item.Url );
リクエストするオブジェクトを生成しています。
navigateToURL( url );
指定のURLへアクセスします。ブラウザで開きます。
ざーっと解説しましたが、もっと詳しくはこちらの書籍を参照してください。他にも色々書籍があるみたいですが、CS3についての入門書ではAmazonではこの書籍が一番の人気のようです。
そんな日。