Marilenaでアイドル(2)
さてさて。
少し日にちがあいてしまいましたが、前回の続きです。
今日はFlickrから写真を読むところをしてみたいと思います。
参考にさせていただいたサイト
先に参考にさせていただいたサイトを上げておきます。
というのも、これ以上の事はほぼ書いていないからです、、。
[ActionScript3.0] AS3でFlickrAPI を使ってみる(with as3flickrlib) その1[AS3] | moriBlog
FlickrViewer:as3flickrlibを使ってFlickrから画像を読み込む方法 - プログラミングとかそんなの
とりあえず自分のメモのためにもまとめてみます。
概要
Flickrから画像を落としてくる、というか、画像のURLを取得するには、
自力での実装も出来ますが、as3flickrlibというライブラリを使うと便利そうです。
このas3flickrlibを使うには別途、as3corelibというライブラリも必要みたいです。
(これはこれで便利なライブラリみたいです。)
それぞれ、Google Codeからダウンロードして、パスを通しておきます。
それから、FlickrのAPIを使用して画像を使わせてもらうので、Flickrにユーザー登録をして、APIキーをゲットする必要があります。
で、いよいよ、、、といきたいところですが、なんだかこのライブラリ、バグがちょこちょこあるみたいです。
なのでとりあえず、修正しておきます。
下記のリンク先の通り修正しました。ありがたいです。
public var むらけん:Flasher; Flickr api のas3flickrlibのバグ修正。
FlickrViewer:as3flickrlibを使ってFlickrから画像を読み込む方法 - プログラミングとかそんなの
画像を検索する
さて、準備が整ったところで、いよいよ使ってみます。
とりあえず、検索したいワードの画像のURL一覧を取得する、というくらいならすごい簡単でした。
(それ以上のものはわかりませんが、、)
まず、APIキーを渡しつつ、初期設定。
-
var fls :FlickrService = new FlickrService("APIキーを入れて下さい。");
-
var photo : Photos = new Photo(fls);
Photosは、検索とかするのに使うみたい。
で、検索する単語を与えつつ、イベントを登録。
-
photo.search("", "", "any", "idol", null, null, null, 1, "", 100, 1);
-
fls.addEventListener(FlickrResultEvent.PHOTOS_SEARCH, searchComplete);
searchに設定する引数は、かなりいっぱいあって、ダウンロードした中にあるドキュメントによれば、
public function search(user_id:String = "", tags:String = "", tag_mode:String = "any", text:String = "", min_upload_date:Date = null, max_upload_date:Date = null, min_taken_date:Date = null, max_taken_date:Date = null, license:Number = -1, extras:String = "", per_page:Number = 100, page:Number = 1, sort:String = "date-posted-desc"):void
こんな感じ。詳しくはここ。
なんか、いっぱいあって何がなんだか、、、だけど、第4引数のtextのところが検索ワードをいれるところなんで、そこだけ入れといたらいいかと。
上の例だと、「idol」で検索した結果の1ページ目の画像情報を100個とってくる、ってこと(だと思う。)
で、その結果がを渡す先がこんな感じ。
-
function searchComplete(e:FlickrResultEvent):void
-
if(e.success){
-
//処理
-
}
-
}
successプロパティにロードが成功したか返ってくるので、成功した時のみ処理をするように、とかってする。
で、その処理の中で、画像のURLと、その画像があるFlickrのURLを取ってくる。
-
var photoArr : Array = e.data.photos.photos;
-
for(var i:Number = 0; i<photoArr.length; i++){
-
farm = photoArr[i].farm;
-
server = photoArr[i].server;
-
id = photoArr[i].id;
-
secret = photoArr[i].secret;
-
owner = photoArr[i].ownerId;
-
//画像のURL
-
trace( 'http://farm' + farm + '.static.flickr.com/' + server + '/' + id + '_' + secret + '.jpg');
-
//FlickrのURL
-
trace('http://www.flickr.com/photos/' + owner + '/' + id);
-
}
各URLがどういう構成になってるかは、FlickrAPIのドキュメントを見ればわかります。
Flickr Service - Photo Source URLs
これを元に、取り出した各要素から、URLを再現しています。
これで、URLはわかったので、あとはそのURLから画像を引っ張ってくるだけ!
なのですが、Flashで別ドメインから画像をひっぱってこようと思うと、クロスドメインってのが必要です。
これは、通常はセキュリティーの問題で他ドメインからはデータを取って来れないようになっているけれど、
このクロスドメインのファイル(crossdomain.xml)が設置してあれば、他ドメインでも大丈夫、ってやつです。
Flash ドキュメンテーション - ドメイン間のデータロード許可
なので、このcrossdomain.xmlを読ませるように指定してやらないといけません。
それがこれ。
-
loader.load(new URLRequest(URL), new LoaderContext(true));
データをロードする時に、Loaderのloadの第二引数に、new LoaderContext(true)と、指定してやるといいみたいです。
まとめ
もうあとは、MarilenaのほうでFlickrからとって来たURLを指定してやるだけなんですが、、
長くなってきましたし、疲れてきたんで今日はここまでで。
最後にまとめたソース。
idolで検索した結果のURLを100個、traceで吐き出すだけです。
-
package {
-
import com.adobe.webapis.flickr.*;
-
import com.adobe.webapis.flickr.events.*;
-
import com.adobe.webapis.flickr.methodgroups.*;
-
import flash.display.*;
-
public class Main extends Sprite
-
{
-
private var fls :FlickrService;
-
private var photo :Photos;
-
private var _photoURLArr :Array = [];
-
private var _flickrURLArr :Array = [];
-
//______________________________________________________________
-
//Constructor
-
public function Main()
-
{
-
//API Key
-
fls = new FlickrService("APIキーを入れるところ");
-
photo = new Photos(fls);
-
//idol で検索
-
photo.search("", "", "any", "idol");
-
fls.addEventListener(FlickrResultEvent.PHOTOS_SEARCH, searchComplete);
-
}
-
//______________________________________________________________
-
//searchComplete
-
private function searchComplete(event:FlickrResultEvent):void
-
{
-
if ( event.success )
-
{
-
var photoArr : Array = event.data.photos.photos;
-
for (var i:Number = 0; i <photoArr.length; i++)
-
{
-
var farm:String = photoArr[i].farm;
-
var server:String = photoArr[i].server;
-
var id:String = photoArr[i].id;
-
var secret:String = photoArr[i].secret;
-
var owner:String = photoArr[i].ownerId;
-
//画像のURL
-
trace( 'http://farm' + farm + '.static.flickr.com/' + server + '/' + id + '_' + secret + '.jpg');
-
//FlickrのURL
-
trace('http://www.flickr.com/photos/' + owner + '/' + id);
-
}
-
}
-
}
-
}
-
}
・Marilenaシリーズ
Marilenaでアイドル(1)
Marilenaでアイドル(3)

1 Comment
Jump to comment form | comments rss [?] | trackback uri [?]