スパイスラボ神部です。
メジャーな欲求かどうかわからないのですが、自分の場合はOpenSocial アプリケーションを作る上でよく、Owner と Viewer が同じであるかをチェックしたくなります。なので、簡単にそのチェック方法を共有してみたいと思います。
普通に Opener = Viewer のチェック
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest('OWNER'), 'owner');
req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER), 'viewer');
req.send(function(data) {
var owner = data.get('owner').getData();
var oid = owner.getField(opensocial.Person.Field.ID);
var viewer = data.get('viewer').getData();
var vid = viewer.getField(opensocial.Person.Field.ID);
var viewer = data.get("viewer").getData();
if(vid == oid){
//一致したときの処理
}else{
//一致しなかったときの処理
}
});
opensocial-jquery を使った場合(試行中)
こちらはちょっと苦労しました。というのは
・jQuery の扱いに慣れていない
・コールバック関数地獄
みたいなあたりに悩まされたためです。
で、試行錯誤の結果このへんに落ち着きました。
jQuery(function($) {
$.getData('/people/@owner/@self', {}, owner = function(people) {
var person = people[0];
var owner = encodeURIComponent(person.nickname);
$.postData('/appdata/@viewer/@self', { owner: owner }, function() {});
});
$.getData('/people/@viewer/@self', {}, function(people) {
var person = people[0];
var viewer = encodeURIComponent(person.nickname);
$.postData('/appdata/@viewer/@self', { viewer: viewer }, function() {});
});$.getData('/appdata/@viewer/@self', {}, function(data) {
var owner;
var viewer;
$.each(data, function(userId, data) {
owner = data.owner;
viewer = data.viewer;
});
if(owner == viewer){
//一致した場合
}else{
//一致しなかった
}
});
});
…という感じでコールバック関数の外に変数を持ち出す方法がわからなかったのですが、IdSpec の時と違い一回の DataRequest で Owner ・ Viewer (ときには永続化された個別のパラメータ)を取り出すやりかたがよくわからなかったので、一度 postData で外部に持ち出す形になっています。
opensocial-jquery では、取得対象のサービスを URL で /appdata/@viewer/@self という感じで指定するのですが、もしかしてここをカンマ区切りとかで指定するとかそういう指定の方法なんでしょうか?ここはもう少し調べてみたいと思います。
isOwnerというのがあるらしい
こちらのフォローによると、なんか isOwner というのがあるようです。そういえば一度そんなメソッドを目にした覚えがなくはなかったですが、こういうときに使うんですね…。これを使うと、コードがこんなに短くなります。
普通の OpenSocial JavaScript API
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER),
"viewer");
req.send(function(data) {
var viewer = data.get("viewer").getData();
if (viewer.isOwner()) {
// do something...
}});
opensocial-jquery の場合
jQuery(function($) {
$.getData('/people/@viewer/@self', {}, function(people) {
var person = people[0];
if(person.isOwner){
//一致したときの処理
}
});
});
v0.9のLightweight JavaScript API
返信記事中にあったコードですが、v0.9のLightweight JavaScript API を使うと、こんなに簡単になるそうです。
osapi.people.getViewer().execute(function(result) {
if (result.isOwner) {
// do something...
}});
関連記事


