2009-02-27

opensocial-jquery を jQuery Plugins サイトに登録しました

おはようございます。なかじまんです。

opensocial-jquery を jQuery Plugins に登録しました。↓こんな感じです。



jQuery Plugins は、アカウントさえ作成すれば、誰でもいつでもプラグインを登録できちゃうんですね。申請とか許可とか、そいう手続きは不要でした。また、リポジトリは備えていませんが、release や issues, patchs といった管理もできるので、プラグインのプロジェクトポータルとしての使い方もありかもしれません。

2009-02-19

opensocial-jquery は IdSpec を URL で代替します

おなようございます。なかじまんです。なんか最近は opensocial-jquery ネタばかりですね。

Twitter / Yoichiro Tanaka: 僕はIdSpecに違和感はない。なんでそんなに毛嫌い ...
僕はIdSpecに違和感はない。なんでそんなに毛嫌いするの?IdSpecがあるからこそ、ソーシャルグラフから特定の集合を得るための条件を作ることができるんじゃん。面倒だ、という人は代替案を示すべき。
私も IdSpec に違和感はありません。ですが、OpenSocial API を知ろうとしたときは、少し理解のしにくさを覚えた記憶があります。

それは IdSpec を使うところと、使わない(使えない) API があるというところです。え?なんでここは IdSpec じゃなく VIEWER_FRIENDS とかなの?え?じゃぁ IdSpec の意味や目的とすることはなんなの?という使い分けが懐疑心を呼び起こされ、なんだか落ち着かなくなるのです。

ということもあって、opensocial-jquery は URL を使って IdSpec を表現する ようにデザインしました。@viewer や @owner などオリジナルのセレクタを導入していますが、原則は opensocial RESTful API に準じています。

というのが代替案です。でも IdSpec に違和感はないし、面倒だとも思いません。

opensocial-jquery はあらゆるリクエストのタイムアウトを検出できます

おはようございます。なかじまんです。今後 opensocial-jquery を使うちょっとした理由をちょくちょく投稿していきます。

opensocial-jquery は gadgets.io.makeRequest や opensocial.DataRequest をすべて jQuery.ajax で扱う ようにデザインしています。

そのため、jQuery.ajax があらかじめ持つタイムアウトの検出もそのまま使えます。つまり、外部サイトへのリクエストであっても、OpenSocial コンテナへ(から)のリクエストであっても、あらゆるリクエストのタイムアウトが検出できるというわけです。

↓これとか。

$.ajax({
url: 'http://example.com/data.json',
dataType: 'json',
success: function(data, status) {
console.log(data, status);
},
error: function(xhr, status, e) {
console.info(xhr, status, e);
},
timeout: 5000 // 5s
});

↓これとか。

$.ajax({
url: '/people/@viewer/@friends',
data: {},
dataType: 'data',
success: function(data, status) {
console.log(data, status);
},
error: function(xhr, status, e) {
console.info(xhr, status, e);
},
timeout: 5000 // 5s
});

opensocial-jquery が jQuery plugin ではなく、あえて jQuery 自体に手を加えている理由は、こういうメリットを享受するためなんですよ。

2009-02-17

opensocial-jquery 0.5.1 MySpace と Partuza フィード形式のクロスコンテナ対応

おはようございます。なかじまんです。opensocial-jquery のマイナーアップデートのお知らせです。MySpace と Partuza (Shindig PHP) との互換性を高めました。

MySpace

MySpace 独自のフィード形式を Shindig 形式に変換するようにしました。これにより、次のソースコードが MySpace でも他のコンテナでも、修正や調整することなく、同じ振る舞いをするようになりました。

http://code.google.com/p/opensocial-jquery/wiki/AjaxFeed

$.ajax({
url: 'http://rss.rssad.jp/rss/gihyo/feed/rss2',
data: {},
dataType: 'feed',
success: function(feed) {
console.info(feed.URL);
console.info(feed.Link);
console.info(feed.Title);
console.info(feed.Description);
console.info(feed.Author);
$.each(feed.Entry, function(i, entry) {
console.info(entry.Link);
console.info(entry.Title);
// console.info(entry.Summary);
console.info(entry.Date);
var date = new Date();
date.setTime(entry.Date);
console.info(date.toLocaleString());
});
},
error: function(xhr, status, e) {
console.info(xhr, status, e);
}
});

また、MySpace はエラーレスポンスも独自の形式 であるため、MySpace のときだけ固有のエラーハンドリングをし、その差を吸収するようにしました。

MySpace でいろいろ気が付くことがありました。どうやら RSS 2.0 形式しか扱えないようです。また、gadgets.io.makeRequest のオプションに GET_SUMMERIES を指定すると、必ずエラーになるようです。何か勘違いしてるかもしれませんが、参考までお伝えしておきます。

Partuza (Shindig PHP)

Partuza (Shindig PHP) は Entry.Date が秒単位であるため、Partuza (Shindig PHP) のときだけミリ秒に変換し、その差を吸収するようにしました。長瀬さん のコメントによる対応です。貴重な情報をありがとうございました。

サンプルの訂正

Picasa Web Albums 中の JavaScript のロード URL が間違っていましたので訂正しました。

2009-02-16

opensocial-jquery の日本語ドキュメントを公開します。

おはようございます。なかじまんです。opensocial-jquery 日本語ドキュメント公開のお知らせです。

今まで opensocial-jquery は、このブログのエントリで、特徴や技術的なトピックを断片的にしかお伝えしていませんでした(つまり、サボっていました)。が、ちょっとだけ頑張って、日本語ドキュメントを用意できました。

opensocial-jquery 日本語ドキュメント



ドキュメントは、なるべく 読む というストレスを感じないように、小さなソースコードの実例を並べて、小さく説明するというスタイルをとっています。ですので、ざっと流し見をして 何か感じてもらえれば... というのが目標としているところです。

いままでは、謎が多く、ソースコードを解析しないと使えない印象があったと思いますが、このドキュメントを見れば、何ができて、何ができないのか、どんなメリットがあるのか、デメリットがあるのか、手軽に判断できるようになったと期待しています。

デブサミの日程に合わせてでしょうか? mixi に続いて gooホーム も OpenSocial プラットフォーム化のアナウンスがありました。プラットフォームが広がってくると、どうアプリケーションを開発するか、といった議論が広がってくるに違いないです。その中で opensocial-jquery が1つの選択や方向性のヒントになればいいなという感じです。

安藤日記 [&] Developer Summit 2009 (OpenSocial)
天使やカイザーと呼ばれて: デブサミ2009「OpenSocialパネルディスカッション」に参加してきました
デブサミ2009で『OpenSocial パネルディスカッション』開催 Kawa.netブログ(川崎有亮)/ウェブリブログ
デブサミ2009で『OpenSocial パネルディスカッション』開催 : Media Technology Labs (MTL) : メディアテクノロジーラボ ブログ
デブサミ2009のOpenSocial関連の話題がほとんどない件に関して - 0-9

2009-02-01

opensocial-jquery 0.5.0 jQuery.ajax deferred と appdata の対応と people の強化

なかじまんです。opensocial-jquery 0.5.0 をリリースしました。主な内容は、次のとおりです。

次のとおり、プロフィールや友達リストを取得するとき、プロフィール項目、フィルタ条件、ソート条件、ページング条件を指定できるようになりました。指定できる項目や条件は は Wiki にまとめています。

$.ajax({
url: '/people/@viewer/@friends',
data: {
fields: 'profileUrl,addresses',
filterBy: 'hasApp',
sortBy: 'name',
startIndex: 0, count: 10
},
dataType: 'data',
success: function(people) {
console.info(people.startIndex);
console.info(people.itemsPerPage);
console.info(people.totalResults);
$.each(people, function(i, person) {
console.info(person.id);
console.info(person.nickname);
});
},
error: function(xhr, status, e) {
console.info(xhr, status, e);
}
});

次のとおり、アプリケーションのデータを保存できるようになりました。指定できるデータや条件 は Wiki にまとめています。

$.ajax({
type: 'post',
url: '/appdata/@viewer/@self',
data: {
comment: { text: 'Say Hello!', lastModified: new Date().getTime() },
feeling: 'well',
footprint: true
},
dataType: 'data',
success: function() {},
error: function(xhr, status, e) {
console.error(xhr, status, e);
}
});

また、次のとおり、アプリケーションのデータを取得できるようになりました。取得するデータや条件 は Wiki にまとめています。

$.ajax({
url: '/appdata/@viewer/@friends',
data: { fields: 'comment,feeling' },
dataType: 'data',
success: function(data) {
$.each(data, function(userId, data) {
console.info(data.comment.text);
console.info(data.comment.lastModified);
console.info(data.feeling);
});
},
error: function(xhr, status, e) {
console.error(xhr, status, e);
}
});

Enhancing of jQuery.ajax with JSDeferred を組み込みました。これにより、JSDeferred を使って jQuery.ajax が拡張され、次のとおり、非同期メソッドのチェーンとエラーハンドリングが容易になりました。

$.ajax({
url: '/people/@viewer/@friends',
data: {},
dataType: 'data'
}).next(function(people) {
return $.ajax({
url: '/appdata/@viewer/@friends',
data: {},
dataType: 'data'
}).next(function(data) {
return $.map(people, function(person) {
if (data[person.id])
person.data = data[person.id];
return person;
});
});
}).next(function(people) {
$.each(people, function(i, person) {
console.info(person.id);
console.info(person.data);
});
}).error(function(e) {
console.error(e);
});

次のとおり、feature が利用できるか確認でき、その feature パラメータを取得できるようにしました。

var params = $.feature('locked-domain');
if (!params ) {
// locked-domain is not supported.
} else {
console.info(params.foo);
console.info(params.bar);
}

MySpace Developer Platform での動作を確認しました。MySpace はいろいろな経緯(でしょうかね)から、インタフェースが同じでも、他の OpenSocial コンテナと振る舞いが異なるところがあります。opensocial-jquery では、他のコンテナのソースコードをそのまま MySpace でも動作するように、その差異を吸収しています。

実用性も考慮し、今回から YUI Compressor を使って、jQuery を含めて 1つにまとめて圧縮したファイルを、アーカイブに含めるようにしました。

OpenSocial jQuery plugin - jOpenSocial
こちらや、こちらの方が、同じようなものを作ってらっしゃいますが、カスタマイズされたjQueryを使いたくなかったり、AppDataを取り扱いたかったり、Simpleにはしたくなかったので、jQuery用OpenSocialプラグインを作りました。
opensocial-jquery をリンクしてくださったのでリンクをお返しします。opensocial-jquery と jOpenSocial はコンセプトが違うようですね。その違いから触発されるものがあります。そう。今回から AppData を使えるようにしましたので、この場で補足しときます。