Cacooガジェットで友達の公開図が見れるようになりました!
先日Cacooガジェットに機能追加を行い
友達同士で公開している図を参照しあえるようになりました。
http://code.google.com/p/cacoo-gadget/
たとえばiGoogleであれば、
iGoogleの友達画面で共有したいユーザのGoogleアカウントを追加して
「プロフィールへのアクセスと友だちグループの表示を許可する。」
をチェックすることで相手の共有図を
ガジェット内で見ることができるようになります*1。
この設定を行うことで
友達が公開している図をスライドショーで見たりコピーしたりといった
操作が簡単にできるようになります。
また、友達の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:友達も同じ設定を行う必要があります