mixiアプリ用に、いい感じにユーザ情報を取得してくれるAPIはないものかと探しまわって、opensocial-actionscript-clientというライブラリが見つかったので、試してみました。とはいえ、まだまだ頻繁に更新が入っていて、実用に耐える代物になるのかはよく分からないので、ほんとに試してみただけ。
ライブラリは、Google Code のページの Downloads にありますが、12月18日(金)の時には、一部ファイルの中身が空っぽだったりと、不完全なものだったので、直接 Source から、SVNでダウンロードしました。
ファイルを取得できたら、src/org/ 以下を適切な場所に移動してあげてください。
JsWrapperClient クラスが、Externalinterface でもってJSとのやり取りをするんだと思います。このクラスを初期化して準備が完了するまで、利用することができない様子。
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.text.TextField; import org.opensocial.client.base.Person; import org.opensocial.client.core.Feature; import org.opensocial.client.core.OpenSocialClientEvent; import org.opensocial.client.features.AsyncDataRequest; import org.opensocial.client.features.PeopleRequestOptions; import org.opensocial.client.features.ResponseItemEvent; import org.opensocial.client.jswrapper.JsWrapperClient; [SWF(width=210, height=130, backgroundColor=0xaaaaaa, frameRate=30)] public class Main extends Sprite { private var _client:JsWrapperClient; public function Main() { // ラッパークライアントの初期化とスタート // 完了してからリクエスト処理へ _client = new JsWrapperClient('opensocial.flash'); _client.addEventListener(OpenSocialClientEvent.CLIENT_READY, function(e:OpenSocialClientEvent):void { _client.removeEventListener(OpenSocialClientEvent.CLIENT_READY, arguments.callee); request(); } ); _client.start(); } private function request():void { // リクエストオプションインスタンスを作成する var options:PeopleRequestOptions = new PeopleRequestOptions() .setUserId('@me') .setGroupId('@self'); // 非同期データリクエストインスタンスを作成する var req:AsyncDataRequest = new AsyncDataRequest(Feature.PEOPLE_GET, options); // 完了時のイベントリスナーを追加する req.addEventListener(ResponseItemEvent.COMPLETE, function(e:ResponseItemEvent):void { req.removeEventListener(ResponseItemEvent.COMPLETE, arguments.callee); // 結果表示用 var loader:Loader = new Loader(); loader.x = loader.y = 5; addChild(loader); var tf:TextField = new TextField(); tf.width = tf.height = 90; tf.x = 100; tf.y = 10; addChild(tf); // 取得したデータを取り出す var person:Person = e.response.getData(); // ニックネームを取得 var displayName:String = person.getDisplayName(); tf.appendText(displayName + "\n"); // サムネイル画像を取得 try { var urlRec:URLRequest = new URLRequest(person.getThumbnailUrl()); loader.load(urlRec); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(event:Event):void { trace('load complete'); } ); } catch (e:Error) { throw Error('load error'); } } ); // 呼び出しを行う req.send(_client); } } }
必要な機能があるかどうかは、Docs とにらめっこしないといけないです。そもそもどういう機能が必要なんだろう...。