2009-04-20
■[mixiアプリ][OpenSocial][FLASH] OpenSocial + FLASHのライブラリ
OpenSocialでFLASHを使うに当たって、ライブラリはないもんかと探してみたところ、google codeにいくつかのプロジェクトが存在を確認しました。下記の上から2つまでが実際にファイルが上がっております。
どちらかというとflex向けかもしれません。
flash CS3とかでもいけるかもしれません。
- opensocial-as-client(なにもない)
- as3opensociallib(adobeの中の人?なにもない)
なにもないかもしれません。
どれもまだざっとしか見ていないのですが、ActionScript側にもJavaScript APIと同様の構造を用意してあげて、Gadget XMLからJavaScript APIを呼ぶのと同じような感覚で実行して出来ますよ、というのが基本スタンスのようです。
とりあえず勝手に決めた本命はopensocial-as3-clientです。今度ちゃんと使い方とかまとめます。
でも、ActionScriptからだってライブラリ使わずにOpenSocial JavaScript APIを実行したいんだぜ、という人向けのチップスを思いついたので紹介します。たぶんまねしないほうがいいです。
FlashからJavaScript APIを実行したい
ところで、FlashからJavaScriptのalertを実行するには以下のようにすることで実行できます。
ExternalInterface.call("function() { alert('hoge');}");
もうお分かりですね。これを使えばいいんです。
まずは、なんのへんてつもないGadget XMLを用意。
Gadget XML
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="flash test" author="naoto koshikawa">
<Require feature="opensocial-0.8" />
<Require feature="views" />
<Optional feature="content-rewrite">
<Param name="include-urls"></Param>
<Param name="exclude-urls">.*</Param>
<Param name="include-tags"></Param>
<Param name="expires">0</Param>
</Optional>
</ModulePrefs>
<Content type="html">
<![CDATA[
<script src="<PathTo>prototype.js"></script>
<script src="<PathTo>swfobject.js"></script>
<div id="externalContainer">
<h1>Alternative content</h1>
<p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
</div>
<script type="text/javascript">
function init() {
swfobject.embedSWF(
"<PathToYourSWF>", "externalContainer", "200", "200", "9.0.0",
undefined,
{}, // flashvars
{
quality : 'high',
allowScriptAccess : 'always'
}, // params
{
id : "externalswf"
} // attributes
);
}
gadgets.util.registerOnLoadHandler(init);
</script>
]]>
</Content>
</Module>
DocumentClass
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.external.ExternalInterface;
import flash.net.URLRequest;
import flash.system.Security;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
/**
* アグレッシブなOpenSocial JavaScript APIの利用方法
*/
public class Work extends Sprite
{
private var _txt:TextField;
private var _loader:Loader;
public function Work()
{
Security.allowDomain(ExternalInterface.call("function() { return location.hostname }"));
ExternalInterface.addCallback("loadImage", loadImage);
_txt = new TextField();
_txt.autoSize = TextFieldAutoSize.LEFT;
_txt.text = "画像を取得";
_txt.x = stage.stageWidth /2 - _txt.width / 2;
_txt.y = stage.stageHeight /2 - _txt.height / 2;
_txt.border = true;
_txt.addEventListener(MouseEvent.CLICK, clickHandler);
_txt.selectable = false;
addChild(_txt);
_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
}
private function loadImage(url:String):void
{
_loader.load(new URLRequest(url));
}
private function clickHandler(event:MouseEvent):void
{
ExternalInterface.call(
"function() {"
+ " var req = opensocial.newDataRequest();"
+ " req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER), 'viewer');"
+ " req.send(function(data) {"
+ " if (data.hadError()) {"
+ " alert(data.getErrorMessage());"
+ " } else {"
+ " var item = data.get('viewer');"
+ " if (item.hadError()) {"
+ " alert(item.getErrorMessage());"
+ " } else {"
+ " var viewer = item.getData();"
+ " $('externalswf').loadImage(viewer.getField(opensocial.Person.Field.THUMBNAIL_URL));"
+ " }"
+ " }"
+ " });"
+ "}"
);
}
private function completeHandler(event:Event):void
{
_loader.x = stage.stageWidth /2 - _loader.width / 2;
_loader.y = stage.stageHeight /2 - _loader.height / 2;
addChild(_loader);
}
}
}
ちゃんとプロフィール画像が表示されました。でも保守しづらそうなにおいがぷんぷんしますね、すみません。次はもうちょっとちゃんと考えたエントリーを書きます。
トラックバック - http://d.hatena.ne.jp/naoto5959/20090420/1240213715
リンク元
- 7 http://reader.livedoor.com/reader/
- 3 http://blog.spicebox.jp/labs/2009/04/_mixi_7.html
- 3 http://twitter.com/home
- 3 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4ADBR_jaJP238JP238&q=ファイル構成
- 2 http://d.hatena.ne.jp/keyword/mixiアプリ
- 2 http://www.google.co.jp/reader/view/
- 2 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=ruU&q=JSON+HEADER+PHP&btnG=検索&lr=lang_ja
- 2 http://www.google.co.jp/search?hl=ja&q=actionscript3+規約+イベントハンドラ&lr=
- 2 http://www.google.co.jp/search?hl=ja&rlz=1B3GGGL_jaJP309JP309&q=opensocial-actionscript-client&btnG=検索&lr=lang_ja
- 2 http://www.google.co.jp/search?q=opensocial+as3+client&ie=UTF-8&oe=UTF-8&client=safari
