2009年12月22日火曜日

opensocial-actionscript-client を試してみた

mixiアプリ用に、いい感じにユーザ情報を取得してくれるAPIはないものかと探しまわって、opensocial-actionscript-clientというライブラリが見つかったので、試してみました。とはいえ、まだまだ頻繁に更新が入っていて、実用に耐える代物になるのかはよく分からないので、ほんとに試してみただけ。

ライブラリは、Google Code のページDownloads にありますが、12月18日(金)の時には、一部ファイルの中身が空っぽだったりと、不完全なものだったので、直接 Source から、SVNでダウンロードしました。


ファイルを取得できたら、src/org/ 以下を適切な場所に移動してあげてください。

JsWrapperClient クラスが、Externalinterface でもってJSとのやり取りをするんだと思います。このクラスを初期化して準備が完了するまで、利用することができない様子。

  1. package {  
  2.     import flash.display.Loader;  
  3.     import flash.display.Sprite;  
  4.     import flash.events.Event;  
  5.     import flash.net.URLRequest;  
  6.     import flash.text.TextField;  
  7.       
  8.     import org.opensocial.client.base.Person;  
  9.     import org.opensocial.client.core.Feature;  
  10.     import org.opensocial.client.core.OpenSocialClientEvent;  
  11.     import org.opensocial.client.features.AsyncDataRequest;  
  12.     import org.opensocial.client.features.PeopleRequestOptions;  
  13.     import org.opensocial.client.features.ResponseItemEvent;  
  14.     import org.opensocial.client.jswrapper.JsWrapperClient;  
  15.       
  16.     [SWF(width=210, height=130, backgroundColor=0xaaaaaa, frameRate=30)]  
  17.       
  18.     public class Main extends Sprite  
  19.     {  
  20.           
  21.         private var _client:JsWrapperClient;  
  22.           
  23.         public function Main()  
  24.         {  
  25.             // ラッパークライアントの初期化とスタート  
  26.             // 完了してからリクエスト処理へ  
  27.             _client = new JsWrapperClient('opensocial.flash');  
  28.             _client.addEventListener(OpenSocialClientEvent.CLIENT_READY,   
  29.                 function(e:OpenSocialClientEvent):void {  
  30.                     _client.removeEventListener(OpenSocialClientEvent.CLIENT_READY, arguments.callee);   
  31.                     request();  
  32.                 }  
  33.             );  
  34.             _client.start();  
  35.         }  
  36.           
  37.         private function request():void   
  38.         {  
  39.             // リクエストオプションインスタンスを作成する  
  40.             var options:PeopleRequestOptions = new PeopleRequestOptions()  
  41.                                                     .setUserId('@me')  
  42.                                                     .setGroupId('@self');  
  43.               
  44.             // 非同期データリクエストインスタンスを作成する  
  45.             var req:AsyncDataRequest = new AsyncDataRequest(Feature.PEOPLE_GET, options);  
  46.               
  47.             // 完了時のイベントリスナーを追加する  
  48.             req.addEventListener(ResponseItemEvent.COMPLETE,   
  49.                 function(e:ResponseItemEvent):void {  
  50.                     req.removeEventListener(ResponseItemEvent.COMPLETE, arguments.callee);  
  51.                       
  52.                     // 結果表示用  
  53.                     var loader:Loader = new Loader();  
  54.                     loader.x = loader.y = 5;  
  55.                     addChild(loader);  
  56.                       
  57.                     var tf:TextField = new TextField();  
  58.                     tf.width = tf.height = 90;  
  59.                     tf.x = 100; tf.y = 10;  
  60.                     addChild(tf);  
  61.                       
  62.                     // 取得したデータを取り出す  
  63.                     var person:Person = e.response.getData();  
  64.                       
  65.                     // ニックネームを取得  
  66.                     var displayName:String = person.getDisplayName();  
  67.                     tf.appendText(displayName + "\n");  
  68.                       
  69.                     // サムネイル画像を取得  
  70.                     try {  
  71.                         var urlRec:URLRequest = new URLRequest(person.getThumbnailUrl());  
  72.                         loader.load(urlRec);  
  73.                         loader.contentLoaderInfo.addEventListener(Event.COMPLETE,   
  74.                             function(event:Event):void {  
  75.                                 trace('load complete');  
  76.                             }  
  77.                         );  
  78.                     } catch (e:Error) {  
  79.                         throw Error('load error');  
  80.                     }  
  81.                       
  82.                 }  
  83.             );  
  84.               
  85.             // 呼び出しを行う  
  86.             req.send(_client);  
  87.         }  
  88.           
  89.     }  
  90. }  


本当に単純に表示だけ。

必要な機能があるかどうかは、Docs とにらめっこしないといけないです。そもそもどういう機能が必要なんだろう...。

0 件のコメント:

コメントを投稿