カテゴリー 'サンプル' のアーカイブ

FlickrAPIクラス(Actionscript2.0)

ちょっと仕事で
Actionscript2.0Flickrの画像を取得することをやったので
そのとき作ったクラスをアップします。

ソースを見ていただければ分かりますが、
クラスを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;
};

Bitmaps&Wavesで画像を音声に変換してみる

Aphex Twinの曲をスペクトラムアナライザにかけると顔が浮かび上がるで話題になったネタを試してみる。

まず、Bitmaps&Wavesをダウンロード

今年の干支は牛(丑)年ということで、Flickrにアップされているクリエイティブ・コモンズのライセンスが付与された牛の画像をピックアップ
牛
続きを読む »

スクロールバーの座標を取得するscrollTop

Javascriptでスクロールバーの上端の座標を取得するとき、
こちら の記事を参考にすると、

document.body.scrollTop
document.documentElement.scrollTop
window.scrollTop

の3つのどれかで値がとれます。
onLoadのタイミングで取得すると、
大概のブラウザではスクロールバーが初期値に戻ってしまうため 0 が返ってきます。
ボタンアクションなどの任意のタイミングなら
IE、Firefox、Operaはdocument.documentElement.scrollTop
Safari(windows)、Google Chromeはdocument.body.scrollTop
で値がとれます。
ブラウザ分岐処理をせず、これをまとめてしまうには以下でOK!
Flashから呼んでも無事にとれた!

function getScrollPosition() {
  return (document.documentElement.scrollTop || document.body.scrollTop);
}

サーバーの時間をPHP+Flash(AS3)で取得する


仕事でちょこっとやったのでメモメモ。

続きを読む »

FlashでTwitterの発言を取得してみる



世界最大のつぶやき共有サービス「Twitter」での発言を取得してみるテスト。
APIが公開されているのですが、
今回はTwitterユーザー全員の発言情報を5秒おきに最新10件表示するというものを作ってみました。
読み込みのフォーマットはXMLJSONRSSAtomのフォーマットで情報を使うことができます。
今回はXMLで読み込みます。以下、API仕様をざっくりと書きました。

続きを読む »

Flash CS3でGoogle Maps APIを利用してみる



Google Mapコンポーネントで簡単にFlashでも地図を扱うことができるので今回は表示部分だけやってみました。
で、CS3で作る際にまず準備として

1.APIキー取得
http://code.google.com/apis/maps/signup.html

2.SDK(swcファイル)をダウンロード
http://code.google.com/apis/maps/documentation/flash/

解凍して中のswcファイル(最新はmap_1_8a.swc)を
C:\Program Files\Adobe\Adobe Flash CS3\ja\Configuration\Components
にGoogleフォルダを作って中に格納します。
CS3を起動すると、コンポーネントパネルにGoogleMapsConponentが入っているのが分かります。
それをライブラリにドラッグするだけで準備OK!
1.6以前の古いバージョンは ここ にあります。
mxpファイルが入っていればダブルクリックで簡単にインストールできますね。

こちらのページが大変参考になりました!
http://1ka2ka.com/archives/200808/24_005443.html

続きを読む »

Flickrの画像を取得してPapervision3Dで動かす

Flickrの画像を取得してPapervision3Dで動かす

FlickrのAPIより画像を取得してPapervision3Dライブラリで3D上に配置するサンプルを作ってみました。
使用したライブラリは
tweener
papervision3D(ver1.7)
as3flickrlib
です。

続きを読む »

teraClockでパーティクル時計「particlock」



9月に作った

getPixelを使ってテキストの座標をピクセル単位で取得する

に改良を加えてパーティクル時計にしてみました。
その名も「particlock」(パーティクロック)。そのまんまww
ライブラリはもちろん、teraClockです。

時、分、秒の文字をパーティクルで形成します。
時、分は粒子が集まり、秒は粒子が弾けます。(Tweener使用)

Flash CS4英語体験版でPixel Benderを試してみる



FlashPlayer10からPixel Bender Toolkitを使ったカスタムフィルタの作成ができるようになりましたね。
Flash CS4からFlashPlayer10のはき出しができるようになったので、先日落とした英語体験版で早速試してみました。
今回はPixel Bender Toolkitを使わずに Pixel Bender ExchangePixel Bender Toolkit:Galleryなどで提供されているフィルタをDLしてステージ上に配置したムービークリップに適用するだけです。

まずはPixel Bender ExchangeからZoom Blur、waveReflection、FisheyeのpbjpbkファイルをDLします。あとついでにgotoAndLearnのソースも。
Flashから読み込むのはpbjの方です。読み込んだ後に、それぞれのパラメータをステージ上に配置したスライダーに割り当てます。zoomBlurの場合はamount値を可変にします。
読み込み部分はこんなかんじです。

続きを読む »

Flash CS4英語体験版でボーンツールを使ってみる



Flash CS4(英語)体験版がダウンロードできるようになったので一足先に落としてみました。
タイムラインが下でツールが左隅といきなり慣れないインターフェイスに戸惑う人もいるかもしれませんね。

CS4から加わった新機能のひとつとしてボーン(骨)ツールがありますが、
関節表現が簡単に作れそうなので挑戦してみました。
アホの坂田かMCハマーの横歩きみたいのをやってみたかったのですが、意外に難しいものですね。
人体の動きとしては完全に骨がボッキボキに折れてるような物理に反した動きになってます。w
途中挫折してでんぐり返りに方向転換。B-BOY調の頭で側転であらら、完全に地面えぐってますね。
しかも、偶然ビートたけしの首捻りのような奇跡的なモノマネポーズが一瞬入る出来ばいとなりました。 コレ

続きを読む »

次のページへ »