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 とにらめっこしないといけないです。そもそもどういう機能が必要なんだろう...。
0 件のコメント:
コメントを投稿