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からmixiJavascriptを読んだりできないんかなぁ
こんな感じにマイミクさんのデーターを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 =&gt;{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>