Cacooガジェットで友達の公開図が見れるようになりました!

先日Cacooガジェットに機能追加を行い
友達同士で公開している図を参照しあえるようになりました。
http://code.google.com/p/cacoo-gadget/


たとえばiGoogleであれば、
iGoogleの友達画面で共有したいユーザのGoogleアカウントを追加して
「プロフィールへのアクセスと友だちグループの表示を許可する。」
をチェックすることで相手の共有図を
ガジェット内で見ることができるようになります*1
http://cacoo-gadget.googlecode.com/svn/trunk/help/social_setting.png


この設定を行うことで
友達が公開している図をスライドショーで見たりコピーしたりといった
操作が簡単にできるようになります。
また、友達のCacooのアカウント名も確認できるようになるので
図を共同編集に誘う際にも便利かと思います。


とても楽しい機能なのでもしCacooを使っている友達がいれば
是非使ってみてください。


追記(2011/01/29):現状見ることができる友達の共有図は最新の10枚までです。

技術的なお話

CacooガジェットはOpen Socialという規格の仕様に則って作成されています。
iGoogle等のソーシャルアプリケーション対応プラットフォームの
多くはOpen Socialに対応しており、
規格に則ってアプリを作ることで簡単にどのプラットフォームでも
利用できるアプリを作ることができます。


今回はその基本の機能である
ソーシャルグラフを使った情報共有の仕組みを使って
友達同士のCacooの図の参照を実現してみました。


仕組みとしてはとても簡単でキーバリューの方式でデータを登録し
そのキーで参照側からデータを取得します。
Cacooガジェットのソースを要約するとデータを登録する際は、

var req = opensocial.newDataRequest();
req.add(req.newUpdatePersonAppDataRequest('VIEWER', 'diagrams', gadgets.json.stringify(diagrams)));
req.send();


のように書くことができます。
newUpdatePersonAppDataRequestというメソッドを使用して
'diagrams'というキーで公開図が入ったdiagramsオブジェクトを保存しています。
newUpdatePersonAppDataRequestでは文字列しか保存できないようになっているので
gadgets.json.stringifyメソッドでオブジェクトを文字列(JSON)に変換しています。


友達の図を表示する側では

var req = opensocial.newDataRequest();
var viewerFriends = opensocial.newIdSpec({ "userId" : "VIEWER", "groupId" : "FRIENDS" });
var opt_params = {};
opt_params[opensocial.DataRequest.PeopleRequestFields.FILTER] = opensocial.DataRequest.FilterType.HAS_APP;
req.add(req.newFetchPersonAppDataRequest(viewerFriends, 'diagrams', opt_params), 'viewerFriendDiagrams');

req.send(function(data) {
  var viewerFriendDiagrams = data.get('viewerFriendDiagrams').getData();

  var diagrams = gadgets.json.parse(gadgets.util.unescapeString(viewerFriendDiagrams[friend].diagrams));
});

と書いてデータを取得しています。
指定としては友達("FRIENDS")かつ同じアプリを使用している(FilterType.HAS_APP)
ユーザのdiagramsというキーのデータを取得するといった設定になります。


取り出したデータはやはり文字列になっているので
gadgets.util.unescapeStringで一度文字列をエスケープしたあとに
gadgets.json.parseでJSONをオブジェクトに戻しています。


Open Socialではこのように友達同士でのデータをやり取りする仕組みが
いろいろと用意されているので
今後Cacooガジェットでも積極的に利用していきたいと思います。

*1:友達も同じ設定を行う必要があります