FlickrAPIクラス(Actionscript2.0)
ちょっと仕事で
Actionscript2.0でFlickrの画像を取得することをやったので
そのとき作ったクラスをアップします。
ソースを見ていただければ分かりますが、
クラスをnewするときの引数内だけ説明します。
var flickr:FlickrAPI = new FlickrAPI( “xxxxxxxxxx“, “cow“, 50, 1 );
第一引数: あなたのAPIアプリケーションキー
第二引数: 検索するときのタグ名
第三引数: 検索1回あたりの取得件数
第四引数: 出力ページ番号
RESTでリクエストするときはもっと細かい設定が可能ですが
基本、FlickrAPIクラス内で予め決めうちで設定しています。
というのも、今回クリエイティブコモンズのライセンスが付与された画像を引っ張るという
仕様で作ったのでそのまんまになってます。
もし変更したい場合はFlickrAPI.asを自由に改変しちゃってください。
こちら が参考になると思います。
demo | download
APIアプリケーションキーの取得は こちら
APIドキュメントは こちら
FlickrAPI.as
/**
* FlickrAPI
*
* @alt
* update '09/1/6
*
*/
import mx.utils.Delegate;
import mx.events.EventDispatcher;
import org.casaframework.load.data.xml.XmlLoad;
import org.casaframework.util.XmlUtil;
class com.alt.FlickrAPI extends MovieClip
{
//--------------------------------------
// 変数定義
//--------------------------------------
public var addEventListener:Function;
public var removeEventListener:Function;
private var dispatchEvent:Function;
private var xmlUrl:String;
private var xmlLoad:XmlLoad;
public var xmlArray:Array;
public var idArray:Array = new Array();
public var ownerArray:Array = new Array();
public var secretArray:Array = new Array();
public var serverArray:Array = new Array();
public var farmArray:Array = new Array();
public var titleArray:Array = new Array();
public var ispublicArray:Array = new Array();
public var isfriendArray:Array = new Array();
public var isfamilyArray:Array = new Array();
public var imgArray:Array = new Array();
public static var LOAD_COMPLETE:String = "onLoadComplete";
public static var LOAD_INIT:String = "onLoadInit";
public static var LOAD_ERROR:String = "onLoadError";
private var OUTPUT:Boolean = false; //traceしない
//--------------------------------------
// コンストラクタ
//--------------------------------------
public function FlickrAPI( apikey:String, keyword:String, per_page:Number, page:Number )
{
//crossdomainの読み込み
System.security.loadPolicyFile("http://api.flickr.com/crossdomain.xml");
System.security.loadPolicyFile("http://farm1.static.flickr.com/crossdomain.xml");
System.security.loadPolicyFile("http://farm2.static.flickr.com/crossdomain.xml");
System.security.loadPolicyFile("http://farm3.static.flickr.com/crossdomain.xml");
System.security.loadPolicyFile("http://farm4.static.flickr.com/crossdomain.xml");
EventDispatcher.initialize(this);
loadXML( apikey, keyword, per_page, page );
}
//--------------------------------------
// XMLロード
//--------------------------------------
private function loadXML( apikey:String, keyword:String, per_page:Number, page:Number ):Void
{
xmlUrl = "http://api.flickr.com/services/rest/?method=flickr.photos.search" +
"&api_key=" + apikey +
"&format=" + "rest" +
"&license=" + "1,2,3,4,5,6" +
"&sort=" + "interestingness-desc" +
"&extras=" + "license,owner_name,o_dims,original_format" +
"&tags=" + keyword + //&text= or &tag=
"&per_page=" + per_page +
"&page=" + page;
xmlLoad = new XmlLoad(xmlUrl + getRandomQuery());
xmlLoad.addEventObserver(this, XmlLoad.EVENT_LOAD_COMPLETE, 'onXmlLoadComplete');
xmlLoad.addEventObserver(this, XmlLoad.EVENT_LOAD_ERROR, "onXmlLoadError");
xmlLoad.start();
if (this.OUTPUT)
{
trace("/----------------------------------");
trace("Flick APIロード開始");
}
}
//--------------------------------------
// XMLロード完了
//--------------------------------------
private function onXmlLoadComplete():Void
{
if (this.OUTPUT)
{
trace("Flick APIロード完了");
trace("----------------------------------/");
}
dispatchEvent( { type: FlickrAPI.LOAD_COMPLETE } );
xmlArray = XmlUtil.xmlToObject(xmlLoad.getXml())['rsp'][0]['photos'][0]['photo'];
initXML();
}
//--------------------------------------
// XMLロードエラー
//--------------------------------------
function onXmlLoadError():Void
{
if(this.OUTPUT) trace("Flick APIロードエラー");
dispatchEvent( { type: FlickrAPI.LOAD_ERROR } );
}
//--------------------------------------
// XML初期設定
//--------------------------------------
private function initXML():Void
{
for(var i:Number = 0; i<xmlArray.length; i++)
{
idArray.push(xmlArray[i].id);
ownerArray.push(xmlArray[i].owner);
secretArray.push(xmlArray[i].secret);
serverArray.push(xmlArray[i].server);
farmArray.push(xmlArray[i].farm);
titleArray.push(xmlArray[i].title);
ispublicArray.push(xmlArray[i].ispublic); //公開1非公開0
isfriendArray.push(xmlArray[i].isfriend);
isfamilyArray.push(xmlArray[i].isfamily);
var img:String = "http://farm" + farmArray[i] + ".static.flickr.com/" + serverArray[i] + "/" + idArray[i] + "_" + secretArray[i] + "_m.jpg"; //_m.jpgは大きさを変更できる "s","t","m","-","b"
imgArray.push(img);
}
dispatchEvent( { type: FlickrAPI.LOAD_INIT } );
}
//--------------------------------------
// getter
//--------------------------------------
public function get id():Array { return idArray; }
public function get owner():Array { return ownerArray; }
public function get secret():Array { return secretArray; }
public function get server():Array { return serverArray; }
public function get farm():Array { return farmArray; }
public function get title():Array { return titleArray; }
public function get ispublic():Array { return ispublicArray; }
public function get isfriend():Array { return isfriendArray; }
public function get isfamily():Array { return isfamilyArray; }
public function get img():Array { return imgArray; }
//--------------------------------------
// キャッシュクリア用
//--------------------------------------
private function getRandomQuery():String
{
var myDate:Date = new Date();
return (_root._url.substr(0, 5) == "http:" || _root._url.substr(0, 6) == "https:") ? "?" + String(myDate.getTime()) : "";
}
}
.flaのフレームアクション
//----------------------------------
// import
//----------------------------------
import flash.display.BitmapData;
import com.alt.FlickrAPI;
//----------------------------------
// 変数定義
//----------------------------------
var flickr:FlickrAPI = new FlickrAPI( "xxxxxxxxxx", "cow", 50, 1 );
//( あなたのAPIアプリケーションキー, 検索するときのタグ名, 検索1回あたりの取得件数, 出力ページ番号 )
var image_mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = { }; //画像読み込みのリスナー
//----------------------------------
// 参照
//----------------------------------
var _this:MovieClip = this;
//----------------------------------
// 関数定義
//----------------------------------
function onLoadCompleteHandler():Void
{
//trace("complete");
}
function onLoadInitHandler():Void
{
//flickr.img[i] //画像のurl
for (var i:Number=0; i < flickr.img.length; i++)
{
var mc:MovieClip = _this["image" + i + "_mc"];
image_mcl.addListener(mclListener);
image_mcl.loadClip(flickr.img[i], mc);
}
}
function onLoadErrorHandler():Void
{
//trace("error");
}
//----------------------------------
// 初期設定
//----------------------------------
Stage.scaleMode ="noScale";
Stage.align = "TL";
//画像コンテナ配置
for (var i:Number=0; i < 40; i++)
{
var mc:MovieClip = _this.createEmptyMovieClip("image" + i + "_mc", this.getNextHighestDepth());
mc._x = 110 * (i % 5);
mc._y = 110 * Math.floor(i / 5);
}
//Flickr
flickr.addEventListener(FlickrAPI.LOAD_INIT, onLoadInitHandler);
flickr.addEventListener(FlickrAPI.LOAD_COMPLETE, onLoadCompleteHandler);
flickr.addEventListener(FlickrAPI.LOAD_ERROR, onLoadErrorHandler);
mclListener.onLoadStart = function(target:MovieClip):Void
{
};
mclListener.onLoadComplete = function(target:MovieClip):Void
{
};
mclListener.onLoadInit = function(target:MovieClip):Void
{
target._width = 100;
target._height = 100;
};




alt




