using flickr api 01

flickrから画像を取得する方法。提供されてるAPIを使う。使用の際に必要となるAPIキーはここで取得。
http://www.flickr.com/services/api/keys/

よく使われてるのはこのライブラリらしい。
as3flickrlib - Google Code

ライブラリ使わなくてもある程度は自分でできる。
[Think IT] 第4回:外部API(Flickr)を試す! (1/3)

MVCモデルを使ってとか、僕にはまだわかりません。
下にあるコードは手っ取り早く使う場合とか、前段階として。
慣れだと思うけど、一回散らかさないと片付け方がわからない。

とりあえず、ブラウザに直接URLを入力してみると、xmlが返ってくる。
例えば、「test」というキーワードで全文検索して10件取得した1ページ目だったらこんな感じ(見やすいように改行入れてますが本来は一行です)。

http://api.flickr.com/services/rest/
?method=flickr.photos.search&api_key=取得したAPIキー
&text=test&page=1&per_page=10

結果。

画像

他のを試したければここに出てるargumentsから選んで&でつないで=で代入すればいい。
&tags=music
とか。
Flickr Services: Flickr API: flickr.photos.search

ここまでくれば、あとは普通にxmlの処理するのと一緒。
SSAW07 » 第5回:ActionScript 3.0応用 I - 外部イメージの読み込み

Make your own Flickr search engine with Flash and AS3 | The Tech Labs

thinkitにも書かれているように、crossdomain.xmlをロードするのを忘れずに。

さらに、flash CS3とかで動かしてるブルジョアは大丈夫かも知れませんが、普通にflash player落としてXcodeとかで開発してる場合、セキュリティのエラーが出ると思う。

FlashPlayerTrustというフォルダを作り、Macintosh HD/Library/Application Support/Macromedia/に保存。その中にcfgファイルを作る(名前は何でもいいそうです。とりあえずmm.cfgとかにしておく)。
cfgファイルに目的のswfやフォルダのパスを設定する。こういう話題はどこに書いてあるかというと、ここからダウンロードできるpdfです。そんなん知らんよね。
Adobe - Developer Center : White paper: Adobe Flash Player 9 security

これもどうやって辿り着けたのか思い出せないが、とにかくここのドキュメントはダウンロードしていつでも参照できるようにしておく。
Adobe Flex resources

testで全文検索した結果から10枚表示。マウスクリックで表示順変更。
YOUR API KEYの部分を取得したAPIキーと差し替えないと実行した時にエラーが出て表示されません。

package {
 import flash.display.MovieClip;
 import flash.display.Stage;
 import flash.display.StageScaleMode;
 import flash.display.StageAlign;
 import flash.display.Bitmap;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.text.TextField;
 import flash.net.URLRequest;
 import flash.net.URLLoader;
 import flash.display.Loader;
 import flash.system.LoaderContext;

  public class TestFlickr extends MovieClip {
  private var APIkey:String;
  private var text:String;
  private var searchURL:String;
  private var startPage:uint = 1;
  private var pageValue:uint = 10;
  
  public function TestFlickr() {
   stage.scaleMode = StageScaleMode.NO_SCALE;
   stage.align = StageAlign.TOP_LEFT;
   stage.addEventListener(MouseEvent.CLICK, onMouseClick);
   init();
  }
  
  private function init():void {
   //your API key
   APIkey= "YOUR API KEY";
   //search word
   text = "test";
   
   search();
  }
  
  private function search():void {
   while(this.numChildren > 0){
    this.removeChildAt(this.numChildren-1);
   }
   setSearchURLString();
  }
  
  private function setSearchURLString():void {
   var baseURL:String = "http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=" + APIkey;
   searchURL = baseURL + "&text="+ text + "&page=" +startPage + "&per_page=" + pageValue;
   trace(searchURL);
   startXMLLoad();
  }
  
  private function startXMLLoad():void {
   var req:URLRequest = new URLRequest(searchURL);
   var XMLLoader:URLLoader = new URLLoader();
   XMLLoader.addEventListener(Event.COMPLETE, onXMLLoadComplete);
   XMLLoader.load(req);
  }
  
  private function onXMLLoadComplete(e:Event):void {
   var imgLoader:URLLoader = URLLoader(e.target);
   var xmlData:XML = XML(imgLoader.data);
   
   var xmlList:XMLList = xmlData.photos.photo;
   for(var i:uint = 0; i < pageValue; i++) {
    var farm:String = xmlList[i].@farm;
    var server:String = xmlList[i].@server;
    var id:String = xmlList[i].@id;
    var secret:String = xmlList[i].@secret;
    var imgURL:String = "http://farm" + farm + ".static.flickr.com/" + server + "/" + id + "_" + secret +".jpg";
    trace("URL:" + imgURL);
    var imgReq:URLRequest = new URLRequest(imgURL);
    var loader:Loader = new Loader();
    
    loader.contentLoaderInfo.addEventListener(Event.INIT, loadImageInit);
    loader.load(imgReq, new LoaderContext(true));
   }
  }
  
  private function loadImageInit(e:Event):void {
   var bitmap:Bitmap = e.target.content;
   addChild(bitmap);
  }
  
  private function onMouseClick(e:MouseEvent):void {
   setChildIndex(getChildAt(0), numChildren - 1);
  }
 }
}