mixiアプリでFlashにデーターを渡す方法
mixiアプリを使ってて、Flashにどうしても値を渡したい!
ってことでやってみました。
mixiアプリ側(ガジェット)
swf?hoge=mogeでパラメーターを追加して値を渡す。
gadgets.flash.embedFlash( "http://moeten.info/maidcafe/main.swf?" + "&d=" + (new Date()).getTime() + "&mixiid_arr=" + mixiid_arr + '&nickname_arr=' + nickname_arr + '&thumbnailUrl_arr=' + thumbnailUrl_arr , document.getElementById("target") , 9 );
#Flashがキャッシュされないように getTime() を追加しておくと便利。
マイミク全部のデーターを渡す方法はちょっと面倒で、
?hoge=aaa,bbb,ccc
として「,」を挟むで、複数のデーターを送信する。#配列で渡せないっぽい汗
そしてFlash側ではsplit(',')で配列に変換してあげる。
if( this.parameters.mixiid_arr ) mixiid_arr = this.parameters.mixiid_arr; //配列に分解 var mixiid_arr2:Array = mixiid_arr.split(",");
#直接FlashからmixiのJavascriptを読んだりできないんかなぁ
こんな感じにマイミクさんのデーターをFlashで表示できます!
mixiアプリに参加している方はみれると思いまっす。
http://platform001.mixi.jp/run_appli.pl?id=4968
すべてのソースはこちら。
mixi側(ガジェット)
<?xml version="1.0" encoding="UTF-8"?> <Module> <ModulePrefs title="Hello, world!"> <Require feature="opensocial-0.8" /> <Require feature="flash" /> </ModulePrefs> <Content type="html"><![CDATA[ <div style="border:1px solid gray; width:700px;height:495px;padding:0px;"><span id="target"></span></div> <script type="text/javascript"> function init() { var ip = {}; ip[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER; ip[opensocial.IdSpec.Field.GROUP_ID] = "FRIENDS"; var idSpec = opensocial.newIdSpec(ip); var dp = {}; dp[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] = [ opensocial.Person.Field.PROFILE_URL, mixi.PersonField.BLOOD_TYPE ]; var req = opensocial.newDataRequest(); req.add(req.newFetchPeopleRequest(idSpec, dp), "friends"); //var req = opensocial.newDataRequest(); //req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER), "viewer"); req.send( function(data) { var mixiid_arr = new Array(); var nickname_arr = new Array(); var thumbnailUrl_arr = new Array(); var friends = data.get("friends").getData(); friends.each( function(friend) { mixiid_arr.push( friend.getId() ); nickname_arr.push( friend.getDisplayName() ); thumbnailUrl_arr.push( friend.getField(opensocial.Person.Field.THUMBNAIL_URL) ); }); var param = { 'width':'700px' , 'height':'490px' } gadgets.flash.embedFlash( "http://moeten.info/maidcafe/main.swf?" + "&d=" + (new Date()).getTime() + "&mixiid_arr=" + mixiid_arr.join(',') + '&nickname_arr=' + nickname_arr.join(',') + '&thumbnailUrl_arr=' + thumbnailUrl_arr.join(',') , document.getElementById("target") , 9 , param); }); } gadgets.util.registerOnLoadHandler(init); </script> ]]></Content> </Module>
Flash側(メイン)
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" horizontalAlign="left" backgroundColor="0xffffff" backgroundGradientColors="[0xffffff,0xffffff]" width="640" height="480" creationComplete="init()" > <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; private var mixiid_arr :String; private var nickname_arr :String; private var thumbnailUrl_arr :String; private var ac:ArrayCollection = new ArrayCollection(); private function init():void{ //外部パラメーターを参照 if( this.parameters.mixiid_arr ) mixiid_arr = this.parameters.mixiid_arr; if( this.parameters.nickname_arr ) nickname_arr = this.parameters.nickname_arr; if( this.parameters.thumbnailUrl_arr ) thumbnailUrl_arr = this.parameters.thumbnailUrl_arr; //配列に分解 var mixiid_arr2:Array = mixiid_arr.split(","); var nickname_arr2:Array = nickname_arr.split(","); var thumbnailUrl_arr2:Array = thumbnailUrl_arr.split(","); for( var i:int = 0 ; i < mixiid_arr2.length ; i ++ ){ //DataGrid用に配列を作成 ac.addItem( {"mixiid":mixiid_arr2[i], "nickname":nickname_arr2[i] , "thumbnailUrl" : thumbnailUrl_arr2[i] } ); } } ]]> </mx:Script> <mx:Label text="mixiからの情報をFlashに受け渡す方法" fontSize="20"/> <mx:HRule width="100%"/> <mx:TileList itemRenderer="mycanvas" dataProvider="{ac}" width="100%" height="100%" rowHeight="100" rollOverColor="0xffccff" /> </mx:Application>
mycanvas(アイテムレンダー用)
<?xml version="1.0" encoding="utf-8"?> <mx:Canvas verticalScrollPolicy="off" horizontalScrollPolicy="off" creationComplete="init()" showEffect="Fade" xmlns:mx="http://www.adobe.com/2006/mxml" width="490" height="100" cornerRadius="4" borderStyle="solid" borderThickness="2" themeColor="#64809B" borderColor="#DC7200"> <mx:Image x="5" y="4" width="78" height="86" source="{data.thumbnailUrl}"/> <mx:Button x="406" y="59" label="ボタン" width="69" height="31"/> <mx:Label textAlign="left" x="87" y="4" text="{data.nickname}" width="405" height="25" fontSize="16" color="#BA7600" fontWeight="bold"/> <mx:Label textAlign="right" x="122" y="63" text="mixi id =>{data.mixiid}" width="277" height="25" fontSize="16" color="#BA7600" fontWeight="bold"/> <mx:AnimateProperty id="myAnim" fromValue="90" toValue="0" property="rotationX" target="{this}" duration="2000"/> <mx:Script> <![CDATA[ private function init():void{ myAnim.play(); } ]]> </mx:Script> </mx:Canvas>