Flex2でFlickrの写真を取得してみる
こんにちは、熊谷です。
最近私の中で流行っているというか勉強したいと思っているものがあります。それはFlex。なぜか最近無性にそれを使ってみたくなりまして、勉強がてら時間の空いたときに触っています。
まだ勉強し始めたばかりなので、なかなか思い通りにさくっと作れるまでには至っていないのですが、ググったりしながらようやくFlickr APIを使って写真を表示すると言うところまでは理解できるようになりました。
では早速。今回はFlex2からFlickr APIを使うためにas3flickrlibを使いました。このライブラリを使うにはas3corelibも必要なのでそれも準備します。で、それらライブラリ(flickr.swc、corelib.swc)をビルドパスに含めてビルドすることにより使えるようになります。
それでもって、以下ソースコードになります。
flickr.mxml
flickr.as
で、実行すると以下のような感じになります。
サンプルやドキュメントを見ても初めのうちは処理の流れがわからなかったのですが、ようはaddEventListenerを使って最近の写真(getRecent)や検索(search)のイベントを登録して、それらが実行されたときの処理(取得された画像を表示する)を記述する、ボタンを押したら最近の写真(getRecent)や検索(search)を実行する。ということなんですね!
以上のように、私なりの解釈でようやく意味が理解できてきた今日この頃、次はAPIを使って認証してなんだかんだと言うことを勉強してみたいと思います。
ちなみに、FlexといかActionScriptのデバッグのやり方がわからないというか難しいというか面倒というか、そんな今日この頃、ThunderBoltというFirebugでFlexやActionScriptのデバッグができるものがあるということを知りました。
早速使ってみたのですが、Logger.debugでFirebugのコンソールに表示できたりして私的にこれは便利!勉強がさらにはかどります!
最近私の中で流行っているというか勉強したいと思っているものがあります。それはFlex。なぜか最近無性にそれを使ってみたくなりまして、勉強がてら時間の空いたときに触っています。
まだ勉強し始めたばかりなので、なかなか思い通りにさくっと作れるまでには至っていないのですが、ググったりしながらようやくFlickr APIを使って写真を表示すると言うところまでは理解できるようになりました。
では早速。今回はFlex2からFlickr APIを使うためにas3flickrlibを使いました。このライブラリを使うにはas3corelibも必要なのでそれも準備します。で、それらライブラリ(flickr.swc、corelib.swc)をビルドパスに含めてビルドすることにより使えるようになります。
それでもって、以下ソースコードになります。
flickr.mxml
- <?xml
version="1.0" encoding="utf-8"?> - <mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" horizontalAlign="center" verticalAlign="middle"> - <mx:Script
source="flickr.as"></mx:Script> - <mx:Label
x="10" y="11" text="Flexサンプル" fontWeight="bold" fontSize="15"/> - <mx:Panel
layout="absolute" top="43" id="flickr" title="Flickr" right="10" bottom="10" left="10"> <mx:TileList id="tile" dataProvider="{photos}" top="10" left="20" right="20" horizontalScrollPolicy="off" verticalScrollPolicy="off" borderStyle="none" bottom="54"> <mx:itemRenderer> <mx:Component> <mx:VBox width="138" height="108" horizontalScrollPolicy="off" verticalScrollPolicy="off" horizontalAlign="center" verticalAlign="middle"> <mx:Image id="photo" width="100" height="88" source="http://static.flickr.com/{data.server}/{data.id}_{data.secret}_t.jpg" verticalAlign="middle" horizontalAlign="center" /> <mx:Label id="title" text="{data.title}" /> </mx:VBox> </mx:Component> </mx:itemRenderer> </mx:TileList> <mx:ControlBar x="19" y="473" verticalAlign="middle" horizontalAlign="right"> <mx:ComboBox id="combo_limit" height="22"> <mx:dataProvider> <mx:Array> <mx:Object label="10件" data="10" /> <mx:Object label="20件" data="20" /> <mx:Object label="30件" data="30" /> </mx:Array> </mx:dataProvider> </mx:ComboBox> <mx:Button label="最近の写真" id="btn_1"/> <mx:Button label="flowerタグで探す" id="btn_2"/> </mx:ControlBar> - </mx:Panel>
- </mx:Application>
flickr.as
- import
mx.collections.ArrayCollection; - import
com.adobe.webapis.flickr.*; - import
com.adobe.webapis.flickr.events.*; - //import
org.osflash.thunderbolt.Logger; - private
var API_KEY:String = 'ここにFlickrのAPI KEYを記述'; - private
var max_result:Number; - private
var flickr_service:FlickrService; - [Bindable]
public var photos:ArrayCollection; - private
function init():void - {
max_result = Number(combo_limit.value.toString()); flickr_service = new FlickrService(API_KEY); flickr_service.addEventListener(FlickrResultEvent.PHOTOS_GET_RECENT, onPhotosResult); flickr_service.addEventListener(FlickrResultEvent.PHOTOS_SEARCH, onPhotosResult); btn_1.addEventListener(MouseEvent.CLICK, onClickBtn1); btn_2.addEventListener(MouseEvent.CLICK, onClickBtn2); - }
- private
function onClickBtn1(e:MouseEvent):void - {
max_result = Number(combo_limit.value.toString()); flickr_service.photos.getRecent('', max_result, 1); - }
- private
function onClickBtn2(e:MouseEvent):void - {
max_result = Number(combo_limit.value.toString()); flickr_service.photos.search('', 'flower', 'any', '', null, null, null, null, -1, '', max_result, 1, 'date-posted-desc'); - }
- private
function onPhotosResult(e:FlickrResultEvent):void - {
//Logger.debug('debug', '結果は?'); if (e.success) { var photo_list:PagedPhotoList photo_list = e.data.photos; photos = new ArrayCollection(photo_list.photos); //Logger.debug('debug', '取得できました'); } else { //Logger.error('error', '取得できませんでした'); } - }
で、実行すると以下のような感じになります。
サンプルやドキュメントを見ても初めのうちは処理の流れがわからなかったのですが、ようはaddEventListenerを使って最近の写真(getRecent)や検索(search)のイベントを登録して、それらが実行されたときの処理(取得された画像を表示する)を記述する、ボタンを押したら最近の写真(getRecent)や検索(search)を実行する。ということなんですね!
以上のように、私なりの解釈でようやく意味が理解できてきた今日この頃、次はAPIを使って認証してなんだかんだと言うことを勉強してみたいと思います。
ちなみに、FlexといかActionScriptのデバッグのやり方がわからないというか難しいというか面倒というか、そんな今日この頃、ThunderBoltというFirebugでFlexやActionScriptのデバッグができるものがあるということを知りました。
早速使ってみたのですが、Logger.debugでFirebugのコンソールに表示できたりして私的にこれは便利!勉強がさらにはかどります!
コメント
コメントフォーム
トラックバック
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



紹介記事を実際に作ってみようと思ったのですが、ちょっとてこずっております。。
flickr.swc、corelib.swcともに入れてからビルドしたのですが、
型が見つからないか、コンパイル時定数ではありません:FlickerResultEvent
とエラー吐き出されてしまいます。。
ライブラリを追加して利用するのは初めてなもので。。何か理由をご存知でしたらおしえてください
返信が遅くなり申し訳ありません。この記事を書いた当時はflex builderを使用してコンパイルを行っていました。で、せいさんからのこのコメントをいただきまして、コマンドラインからコンパイルをしてみました。
flickr.swc、corelib.swcともにクラスパス等々に設定すれば大丈夫だと思うのですが、一番ってとりばやい方法としては、私の記事で書かれているソースファイルと同じディレクトリにflickr.swc、corelib.swcをおいて、
mxmlc -compiler.include-libraries=flickr.swc,corelib.swc flickr.mxml
というような感じでコマンドラインでコンパイルすればコンパイルできると思います。試してみてください。
つい先日なんとか動かすことができました。
わざわざお返事いただきありがとうございます^^
またちょくちょく覗かせていただきます。
ではでは
質問があります。
紹介してあるプログラムをAIRで動かそうとしたのですが動きません。
何かほかに必要な処理があるのでしょうか??
よろしくお願いします。
自己解決です。
失礼しました。