9 April 2008
ページ ツール |
また、インターネット上の情報を利用するため、インターネットに接続する環境が必要になります。
前回はFlashによるAIRアプリケーション開発に必要な開発環境を整え、簡単なアプリケーションを作成しました。
今回はAIRアプリケーションからWebサービスを利用する手順をご紹介します。
Flashには外部WebサービスのAPIに接続する機能や、あらかじめ用意されたコンポーネントを利用することで、簡単にWebサービスを活用できます。
本チュートリアルでは、WebサービスとしてリクルートWebサービスの「ホットペッパーWebサービス」が提供するAPIを利用し、飲食店の店舗情報を取得、表示するAIRアプリケーションを作成します。
以下のサイトより、画面の手順に従ってAPIキーを取得します。
※利用規約等をお読みいただき、画面の手順に従ってご登録ください。
*「Adobe AIRのオーサリングについて」ダイアログボックスが表示された場合には、[OK]ボタンで閉じます。
※小さな正方形は、背景色と同じであるため配置されている状態がわかりにくいので、「レイヤー1」のアウトライン表示をオンにすると配置状態を確認しやすくなります。
*「ActionScriptクラスに関する」ダイアログボックスが表示される場合には、[OK]ボタンをクリックし閉じます。
以上が終了したら、シンボルの編集モードを終了し、「シーン1」に戻ります。
Thumb.as:
package {
//必要なパッケージのインストール
import flash.display.*
import flash.events.*;
import fl.containers.UILoader;
public class Thumb extends MovieClip {
//ネームスペースの回避
namespace ns = 'http://webservice.recruit.co.jp/HotPepper/';
use namespace ns;
public function Thumb( itm :XML) {
//shop_thumbというインスタンス名のUILoaderにXMLから取得した画像を配置
shop_thumb.scaleContent = true;
shop_thumb.source = itm.photo.pc.m;
shop_thumb.load();
shop_thumb.buttonMode = true;
}
}
}
Thumb()コンストラクタの引数itmにWebサービスから取得したXMLオブジェクトが渡されます。以降の行で「UILoader」コンポーネント(インスタンス名: shop_thumb)にXMLオブジェクト内の画像のURLを設定し、その読み込みを実行しています。
コンストラクタの最後の行では「UILoader」コンポーネントがボタンとして機能するように設定しています。
XMLオブジェクトからの値の取得にはActionScript 3.0から新しく加わった機能のE4X(ECMAScript for XML)をしています。
E4Xでは、読み込むXMLにネームスペースが指定されている場合には、Flashにこのネームスペースを指定しないとアクセスできないので、ネームスペースを指定しています。
1.Webサービスからデータを取得し、サムネイルを表示するために、「Hotpepper001.fla」「シーン1」の「Script」レイヤーに以下のActionScriptを記述します。
「Script」レイヤーのフレーム1:
//まず必要なパッケージをインポートします
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.system.Security;
import flash.system.SecurityPanel;
import fl.controls.*;
//必要なインスタンスを生成しておきます。
var loader : URLLoader = new URLLoader();
var url:String = "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/
?key=****************&large_area=Z011&count=16";
var request:URLRequest = new URLRequest(url);
var col:int = 1;
var row:int = 1;
var w:int = 110;
var h:int = 110;
var wrap_at:int = 5;
//XMLをリクエストするファンクション。XMLのリクエストに成功し、XMLが取得できたらxmlCompfuncを実行するようになっています。
function loadXML(url:String) :void{
loader.addEventListener(Event.COMPLETE, xmlCompfunc);
loader.load(request);
}
//ロードしたXMLからサムネイルを生成するファンクション(各サムネイルのx座標、y座標を決定します)
function xmlCompfunc(event:Event):void {
//XMLにあるネームスペースを回避します
namespace ns = 'http://webservice.recruit.co.jp/HotPepper/';
use namespace ns;
//取得できたXMLをfor eachで回します。
var results:XML = new XML(loader.data);
var itm:XML;
for each( itm in results.shop ){
var thumbnail_x:int = w * (col - 1) + 10;
var thumbnail_y:int = h * (row - 1) - 10;
var thumb:Thumb = make_shop_thumb( itm, thumbnail_x, thumbnail_y );
Cont.addChild( thumb );
col++;
if( col == wrap_at ){
row++;
col = 1;
}
}
}
//各サムネイルに対して必要な情報を当て込みます
function make_shop_thumb (itm:XML, thumbnail_x:int, thumbnail_y:int ):Thumb {
//XMLにあるネームスペースの回避
namespace ns = 'http://webservice.recruit.co.jp/HotPepper/';
use namespace ns;
//ThumbというムービークリップにXMLの要素を当て込みます
var thumbnail:Thumb = new Thumb(itm);
thumbnail.x = thumbnail_x;
thumbnail.y = thumbnail_y;
return thumbnail;
}
loadXML(url);
var url:String = "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?
key=****************&large_area=Z011&count=16";の部分でリクエスト先のURLおよびパラメータとしてWebサービスから取得したAPIキー、エリアコード、取得するデータ数を設定しています。サンプルではAPIキーを” ****************”と記述していますが(key=****************)、実際には本チュートリアルの最初で取得したホットペッパーWebサービスからメールから送信されるAPIキーを設定します。WebサービスからのXML呼び出しに成功するとxmlCompfunc関数が実行され、xmlCompfunc関数内でデータの件数分のサムネイルの生成と配置を行っています。
2.[制御]メニューの[ムービープレビュー]を選択し、ここまでの動作を確認します。
この段階では、まだサムネイルをクリックしても店舗情報は表示されません。
以降の手順で、店舗表示機能を追加していきます。
| レイヤー | インスタンス名 | サイズ | 配置する座標位置 | ||
|---|---|---|---|---|---|
| 幅 | 高さ | x | y | ||
| Address | address_name | 225.0 | 34.0 | 10.0 | 334.0 |
| budget_name | budget_name | 225.0 | 18.0 | 10.0 | 308.0 |
| food_name | food_name | 225.0 | 18.0 | 10.0 | 283.0 |
| genre_name | genre_name | 225.0 | 18.0 | 10.0 | 256.0 |
| shopname | shop_name | 225.0 | 18.0 | 10.0 | 11.0 |
ShopView.as:
package {
//必要なパッケージをインストールします。
import flash.display.*
import flash.events.*;
import flash.text.*;
import flash.net.*;
import flash.geom.*;
import fl.containers.UILoader;
public class ShopView extends MovieClip {
//ネームスペースの回避
namespace ns = 'http://webservice.recruit.co.jp/HotPepper/';
use namespace ns;
//shopViewクラス内に表示する要素を決定
public function ShopView( itm :XML) {
//UILoaderを利用して各店舗写真を取得
shop_image.scaleContent = true;
shop_image.source = itm.photo.pc.l;
shop_image.load();
//itm.nameで各店舗名を取得し、それをshop_nameというダイナミックテキストフィールドで取得します
shop_name.text = itm.name;
//同じ要領で、ジャンル名や料理名などXMLデータから表示したい要素をダイナミックテキストフィールドで取得します。
genre_name.text = itm.genre.name;
food_name.text = itm.food.name;
budget_name.text = itm.budget.name;
address_name.text = itm.address;
//ホットペッパー本体へ飛ぶボタンのリンクの設定
url_button.addEventListener(MouseEvent.CLICK,url_jump);
url_button.label = "詳細"
url_button.setSize(90,20);
function url_jump(e:Event):void{
var detail_url:URLRequest = new URLRequest(itm.urls.pc);
navigateToURL( detail_url );
}
}
}
}
ShopView()コンストラクタの引数itmにWebサービスから取得したXMLオブジェクトが渡され、以降の行で店舗写真の読み込みや、店舗情報の表示をしています。
また、[詳細]ボタンをクリックしたときに、開くURLの設定もしています。
var current_shop_view:ShopView;
//サムネイルがクリックされたあと、shopviewというクラスが表示されるファンクション。
function make_shop_view ( itm:XML ):Boolean {
if( current_shop_view ){
removeChild( current_shop_view );
}
var shopview:ShopView = new ShopView( itm );
addChild( shopview );
shopview.x = 450;
shopview.y = 50;
current_shop_view = shopview;
return true;
}
make_shop_view関数の引数itmに店舗情報のXMLが渡され、店舗情報を表示するShopViewクラスのインスタンスを生成しています。
//サムネイルがクリックされた場合、その詳細画面が表示されるようにします。thumbnail.addEventListener(MouseEvent.CLICK, thumbnail_click);
function thumbnail_click (event:Event):void {
make_shop_view( itm );
}
サムネイルがクリックされたときに、thumbnail_click関数が呼び出されるようにしています。
スクリプト追加後の「Hotpepper001.fla」の「Script」レイヤーのActionScriptは以下のようになります。
//まず必要なパッケージをインポートします
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.system.Security;
import flash.system.SecurityPanel;
import fl.controls.*;
//必要なインスタンスを生成しておきます。
var loader : URLLoader = new URLLoader();
var url:String = "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=****************&large_area=Z011&count=16";
var request:URLRequest = new URLRequest(url);
var col:int = 1;
var row:int = 1;
var w:int = 110;
var h:int = 110;
var wrap_at:int = 5;
var current_shop_view:ShopView;
//XMLをリクエストするファンクション。XMLのリクエストに成功し、XMLが取得できたらxmlCompfuncを実行するようになっています。
function loadXML(url:String) :void{
loader.addEventListener(Event.COMPLETE, xmlCompfunc);
loader.load(request);
}
//ロードしたXMLからサムネイルを生成するファンクション(各サムネイルのx座標、y座標を決定します)
function xmlCompfunc(event:Event):void {
//XMLにあるネームスペースを回避します
namespace ns = 'http://webservice.recruit.co.jp/HotPepper/';
use namespace ns;
//取得できたXMLをfor eachで回します。
var results:XML = new XML(loader.data);
var itm:XML;
for each( itm in results.shop ){
var thumbnail_x:int = w * (col - 1) + 10;
var thumbnail_y:int = h * (row - 1) - 10;
var thumb:Thumb = make_shop_thumb( itm, thumbnail_x, thumbnail_y );
Cont.addChild( thumb );
col++;
if( col == wrap_at ){
row++;
col = 1;
}
}
}
//各サムネイルに対して必要な情報を当て込みます
function make_shop_thumb (itm:XML, thumbnail_x:int, thumbnail_y:int ):Thumb {
//XMLにあるネームスペースの回避
namespace ns = 'http://webservice.recruit.co.jp/HotPepper/';
use namespace ns;
//ThumbというムービークリップにXMLの要素を当て込みます
var thumbnail:Thumb = new Thumb(itm);
thumbnail.x = thumbnail_x;
thumbnail.y = thumbnail_y;
//サムネイルがクリックされた場合、その詳細画面が表示されるようにします。
thumbnail.addEventListener(MouseEvent.CLICK, thumbnail_click);
function thumbnail_click (event:Event):void {
make_shop_view( itm );
}
return thumbnail;
}
//サムネイルがクリックされたあと、shopviewというクラスが表示されるファンクション。
function make_shop_view ( itm:XML ):Boolean {
if( current_shop_view ){
removeChild( current_shop_view );
}
var shopview:ShopView = new ShopView( itm );
addChild( shopview );
shopview.x = 450;
shopview.y = 50;
current_shop_view = shopview;
return true;
}
loadXML(url);
[制御]メニューの[ムービープレビュー]を選択し、動作を確認します。
サムネイルをクリックすると、右側に店舗情報が表示され、店舗情報下の詳細をクリックすると該当のページが開きます。
Flashの基本しっかりとおさえたい方にオススメのトレーニングコースです。
基本となる制作方法や、環境設定、アニーション、ユーザーインターフェース、画像の挿入、テキスト、ナビゲーション、サウンド、ビデオなど、Flashコンテンツの制作に欠かせない要素を多数ご説明します。
このコースでは、操作方法の習得だけでなく、Flash制作における概念知識もしっかりとマスターすることができ、実務の活用にも結びつけることができます。
Flashの基礎はマスターされた方で、ActionScriptを初歩から習得したい方はこちらのトレーニングコースがおすすめです。
ActionScriptの用語の説明や書き方などの基礎的な部分から、実践で使えるスクリプトまで、ハンズオン形式で習得します。
さらに上級のActionScriptを習得されたい方におすすめのトレーニングコースはこちらです。
Flashコンテンツの制作をおこなう上で必須となる知識を、総合的に学習できます。ActionScript 2.0の基本的な概念をより深く理解することにより、表現の幅はぐっと広がり、さまざまなFlashコンテンツを作れるようになります。