AS3でFlickrの画像をロード

Filed under AS3



FlickrAPIを使って画像をロードするサンプルです。

「sky」って言葉で検索してきてます。

サンプルはこちら

以下、ソースです。

package
{
	import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageQuality;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.system.LoaderContext;
	import flash.system.Security;
	import org.libspark.betweenas3.BetweenAS3;

	[SWF(backgroundColor="0xFFFFFF")]
	public class flickr_img_loader extends Sprite
	{
		private const API_KEY:String="api_key=APIのキーをいれとく";
		private const API_URL:String="http://api.flickr.com/services/rest/?method=flickr.photos.search";
		private const API_TAG:String="tags=sky";
		private const PER_PAGE:String="per_page=40";

		private var count:int;
		private var delay:Number;

		public function flickr_img_loader()
		{
			// ステージの設定
			stage.scaleMode=StageScaleMode.NO_SCALE;
			stage.align=StageAlign.TOP_LEFT;
			stage.quality=StageQuality.HIGH;
			stage.frameRate=40;

			// ポリシーファイルの読み込み
			Security.loadPolicyFile("http://api.flickr.com/crossdomain.xml");
			Security.loadPolicyFile("http://farm1.static.flickr.com/crossdomain.xml");
			Security.loadPolicyFile("http://farm2.static.flickr.com/crossdomain.xml");
			Security.loadPolicyFile("http://farm3.static.flickr.com/crossdomain.xml");
			Security.loadPolicyFile("http://farm4.static.flickr.com/crossdomain.xml");

			// APIにアクセス
			count=0;
			delay=0;
			var api_loader:URLLoader=new URLLoader;
			api_loader.addEventListener(Event.COMPLETE, onCompleteAccessAPI);
			api_loader.load(new URLRequest(API_URL + "&" + API_KEY + "&" + API_TAG + "&" + PER_PAGE));
		}

		// APIへのアクセスが成功したら実行する関数
		private function onCompleteAccessAPI(e:Event):void
		{
			var api_loader:URLLoader=e.target as URLLoader;
			api_loader.removeEventListener(Event.COMPLETE, onCompleteAccessAPI);

			// XMLのパースと画像のURLの作成・ロード
			var xml:XML=XML(api_loader.data);
			if (xml.@stat == "ok")
			{
				for each(var photo:XML in xml.photos.photo)
				{
					var url:String="http://farm" + photo.@farm + ".static.flickr.com/" + photo.@server + "/" + photo.@id + "_" + photo.@secret + ".jpg";
					var img_loader:Loader=new Loader();
					img_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompletePhotoLoad);
					img_loader.load(new URLRequest(url), new LoaderContext(true));
				}
			}
		}

		// 画像のロードが終わったら実行する関数
		private function onCompletePhotoLoad(e:Event):void
		{
			var img_loader:Loader=(e.target as LoaderInfo).loader;
			img_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onCompletePhotoLoad);

			// ロードした画像の表示
			var bmp:Bitmap=img_loader.content as Bitmap;
			bmp.scaleX=150 / bmp.width;
			bmp.scaleY=150 / bmp.height;
			bmp.x = 50 + 160*(count%8);
			bmp.y = 50 + 160*((count/8) >> 0);
			addChild(bmp);
			bmp.alpha=0;
			BetweenAS3.delay(BetweenAS3.tween(bmp,{alpha:1},null,1), delay).play();
			count ++;
			delay += 0.2;
		}
	}
}

Post a Comment

Your email is never published nor shared.