PR

URLエンコード方式のデータを読み込む

 Web上のデータを読み込む際によくある方式が,いわゆる「URLエンコード方式」のデータです。皆さんもGoogleなどの検索エンジンなどで,%まじりのよくわからないアドレスをご覧になったことがあるのではないでしょうか。

図7●URLエンコードされたデータ
図7●URLエンコードされたデータ

 URLエンコードの形式は,日本語をはじめとする2バイト文字をURL(URI)に使用する時に行う変換方式です。

 ActionScript3.0では,このURLエンコード方式のデータを簡単に読み/書きできる仕組みが用意されています。例えば,次のようにURLエンコード形式でエンコードされたテキスト・ファイル「URLEncodeText.txt」があるとします。

図8●URLエンコードされたデータの記述されたテキスト・ファイル
図8●URLエンコードされたデータの記述されたテキスト・ファイル

 このテキスト・ファイルのエンコード前の内容は,

name=田中 まさお&age=24&address=東京都○○xx-xx

という物です。name,age,addressの3つの要素に,それぞれ値を持たせているような状態です。このテキスト・ファイルを読み込んで,エンコードされた内容を,デコードして取り出してみましょう。

 URLエンコードされたデータを読み込むには,URLLoaderクラスの「dataFormatプロパティ」の値を,「URLLoaderDataFormat.VARIABLES」に指定します。

表2●dataFormatプロパティの値とファイル形式
対応するファイル形式
URLLoaderDataFormat.TEXT テキスト・ファイル。デフォルトの設定
URLLoaderDataFormat.BINARY バイナリ・データ
URLLoaderDataFormat.VARIABLES URLエンコードされたデータ

 これで,読み込み完了後のdataプロパティは,URLエンコードされているデータを扱いやすい,「URLVariablesクラス」形式に自動変換されます。

 URLVariablesクラスのインスタンスでは,

URLVariables.変数名

の形で,指定した変数名のデータを,デコードした形で取り出すことができます。では,具体的にコードを記述してみましょう。

var request:URLRequest = new URLRequest("URLEncodeText.txt");
var loader:URLLoader = new URLLoader();
//読み込むデータのフォーマットを,URLエンコード方式に設定
loader.dataFormat=URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE,traceData);
function traceData(event:Event){
  //「URLLoader.data.変数名」の形でデータにアクセス
  trace(loader.data.name);
  trace(loader.data.age);
  trace(loader.data.address);
}
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,trace);
loader.addEventListener(IOErrorEvent.IO_ERROR,trace);
loader.load(request);

図9●デコードして取り出したデータ
図9●デコードして取り出したデータ

 completeイベントに関連付けた関数の中で,テキスト・ファイルに保存されていた「name」「age」「address」のデータに,それぞれ,

trace(loader.data.name);
trace(loader.data.age);
trace(loader.data.address);

という形式でアクセスし,さらにデコードしたうえで取り出せていることが確認できますね。このように,URLエンコードされたデータを取りあす場合には,URLLoaderのdataFormatプロパティを,「URLLoaderDataFormat.VARIABLES」に指定してから読み込みを行えばOKです。

 今回は,ActionScript3.0を使って,テキスト・ファイルの内容を,URLLoaderクラスを使って読み込む方法をご紹介しました。URLLoaderクラスは,いろいろなデータにアクセスするための窓口とも言える便利なクラスなのです。

 次回は,同じくURLLoaderクラスを使って,XMLファイルを読み込む方法をご紹介します。おたのしみに。


ActionScript3.0でアクセスできる範囲

 本文中では,テキスト・ファイルの読み込みを行いましたが,このような「Flashムービーから,任意の場所にあるデータを読み込む」際には,ひとつ,注意が必要です。それは,「基本的に,同一ドメイン内にあるデータにしか,アクセスできない」点です。

 Flashムービーと読み込みたいファイルが,同一のフォルダ内にある,―つまり,同一のドメイン内にある―場合には問題なく読み込めます。しかし,これらが,別々のドメインにある場合には,セキュリティエラーとなります。

 例えば,「○○.ne.jp」内に配置したFlashムービーから,「××.ne.jp」に配置したテキスト・ファイルを読み込むことはできません。いわゆるセキュリティ・サンドボックス内のみのアクセスしか許されていないわけですね。

 しかし,実は,全く読み込めないというわけでもありません。このような,ドメイン間をまたいでデータの読み込みをしたい場合,読み込まれる側のドメインが「うちのデータは見てもらっても構わないですよー」と許可していれば,データを読み込むこともできます。

 この「読み込み許可」の設定は,「クロスドメイン・ポリシーファイル」と呼ばれるXML形式のファイルで行います。

図10●クロスドメイン・ポリシーファイル
図10●クロスドメイン・ポリシーファイル

 クロスドメイン・ポリシーファイルは,「crossdomain.xml」という名前のXMLファイルです。その書式は,以下のような形になります。

<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="○○.com" />
    <allow-access-from domain="*.××.com" />
</cross-domain-policy>

 上記の例では,「○○.com」というドメインからのアクセスと,「www.××.com」や「www2.××.com」のような,「*.××.com」というドメインからのアクセスを許可します。

 このクロスドメイン・ポリシーファイルは,読み込まれる側のサーバーのルートディレクトリに配置しておきます。すると,Flashムービーがそのドメインへとアクセスした際には,自動的にクロスドメイン・ポリシーファイルを読み込みに行き,そこに許可されているドメインからのアクセスであれば,データを読み込むことができます。 詳しくは,ヘルプの「Flash Player セキュリティ」の項をご覧ください。