トップ > ラボブログ

ラボブログ

« ソーシャルアプリ活用の目立った例はバーキンだけ? | メイン | jQuery流プログラミング入門(1) »

Owner = Viewer のチェック方法いろいろ

あとで読む

スパイスラボ神部です。


メジャーな欲求かどうかわからないのですが、自分の場合はOpenSocial アプリケーションを作る上でよく、Owner と Viewer が同じであるかをチェックしたくなります。なので、簡単にそのチェック方法を共有してみたいと思います。


-本人確認が好きだ! - Favorites!


普通に 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...
}

});

 



関連記事



ブックマークに追加する この記事についてTwitterでツイート

トラックバック

このエントリーのトラックバックURL:
http://www.spicebox.jp/cgi-bin/mt/mt-tb.cgi/1009

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

mixiアプリ本
4/22発売!

mixiアプリをつくろう!
OpenSocialで学ぶ
ソーシャルアプリ



(株)スパイスボックス
神部 竜二(著)

書籍情報






検索



神部竜二
ブログ執筆者の一人です。ネットの新しい話題や Web まわりのプログラミング、Web 広告について書いていきたいと思います。


About

2009年05月05日 10:11 に投稿されたエントリーのページです。

ひとつ前の投稿は「 ソーシャルアプリ活用の目立った例はバーキンだけ? 」です。

次の投稿は「 jQuery流プログラミング入門(1) 」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

SEO ブログパーツ  

+ インデックス数計測 +