Aptana Jaxer のサーバサイド JavaScript 向けの OpenSocial Client Library を作りました。opensocial-jaxer-client と名付け Apache License 2.0 のオープンソースとして Google Code で公開します。
opensocial-jaxer-client は OS API ( Lightweight JavaScript API ともいう) のソースコードをそのままベースとして Aptana Jaxer 向けに手直ししたものです。なので opensocial-jaxer-client を使うと OS API の手軽さそのままで OpenSocial の Server-side integration ができちゃうわけです。
さっそく実例を紹介します。
はじめに opensocial-jaxer-client.js をロードし osapi.init を使って初期化します。rpcUrl は RPC Protocol のエンドポイントです。fcauth は Google FriendConnect の cookie ベースのセキュリティトークンです。現在のリリース 0.1.0 は fcauth のみサポートします。近いうちに consumer key, consumer secret もサポートします。
<script src="opensocial-jaxer-client.js" runat="server"></script>
<script runat="server">
osapi.init({
rpcUrl: 'http://friendconnect.gmodules.com/ps/api',
fcauth: Jaxer.Util.Cookie.get('fcauth03382920006806842951')
});
osiapi.people を使って、プロフィールや友達リストを取得できます。OS API は execute メソッドの引数に与えた関数を非同期でコールバックしますが、opensocial-jaxer-client は同期して結果を戻り値で返します。
var viewer = osapi.people.getViewer().execute();
Jaxer.Log.info('Your name is ' + viewer.displayName);
var viewer = osapi.people.getViewer({
fields: ['profileUrl', 'thumbnailUrl']
}).execute();
Jaxer.Log.info('Your profile URL is ' + viewer.profileUrl);
Jaxer.Log.info('Your thumbnail URL is ' + viewer.thumbnailUrl);
osiapi.appdata を使って、アプリケーションデータの取得、更新、削除ができます。
var r = osapi.appdata.update({
userId: '@viewer', data: { gifts: 'a crazed monkey' }
}).execute();
var data = osapi.appdata.get({
userId: '@viewer', keys: ['gifts']
}).execute();
Jaxer.Log.info('AppData gifts is ' + data[viewer.id].gifts);
var r = osapi.appdata.deleteData({
userId: '@viewer', keys: ['gifts']
}).execute();
osiapi.activities を使って、アクティビティの取得と追加ができます。
var r = osapi.activities.create({
userId: '@viewer', activity: {
title: 'Hello!', url: 'http://example.com/'
}
}).execute();
var list = osapi.activities.get({
userId: '@viewer'
}).execute();
list.forEach(function(data) {
Jaxer.Log.info('Activity title is ' + data.title);
Jaxer.Log.info('Activity URL is ' + data.url);
});
osapi.batch を使って、上記の people, appdata, activities のバッチ操作もできます。
var batch = osapi.newBatch()
.add('viewer', osapi.people.getViewer())
.add('data', osapi.appdata.get({ userId: '@viewer' }))
.execute();
Jaxer.Log.info('Viewer id is ' + batch.viewer.id);
Jaxer.Log.info('Viewer name is ' + batch.viewer.displayName);
Jaxer.Log.info('Viewer thumbnail URL is ' + batch.viewer.thumbnailUrl);
Jaxer.Log.info('AppData gifts is ' + batch.data[batch.viewer.id].gifts);
Aptana Jaxer 向けということで、ほとんどニーズがないかと思いますが、わたし自身、目的があって使えていますので、もしかしたら必要とする人や場面があったりするかも... という願いを込めて、オープンソースとして公開しました。