GoogleカレンダーのプライベートスケジュールをJSONPで配信するサービス
「Google Account Authentication APIを利用してGoogleカレンダーのフィードを取ってくる」で作ったアプリを発展させて、ユーザのプライベートスケジュールデータをJSONPでプロキシ配信するサービスを実験的に実装してみた。
これは以前パーソナルデータのマッシュアップの構想で言っていた仕組みを、実際に実装したもの。
JSONPの呼び出しURLは以下の通り。
http://gcal2json.ning.com/json/gcalendar?callback=handleCalendarResult
プライバシー保護のため、呼び出し側のアプリケーションはユーザの同意を得ないとスケジュール情報を取得できないようになっている。
スケジュール情報を取得するのに必要なのはJavaScriptコードのみ。認証のための複雑なプロトコルを実装する必要はない。
コード例:
<html>
<head>
<title>Google Calendar JSONP client sample</title>
<script type="text/javascript">
function $(id) {
return document.getElementById(id)
};
function escapeHTML(str) {
return str.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
}
function requestCalendarFeed() {
var script = document.createElement('script');
script.type='text/javascript';
script.charset='utf-8';
script.src='http://gcal2json.ning.com/json/gcalendar?callback=handleCalendarResult';
document.getElementsByTagName('head')[0].appendChild(script);
}
function handleCalendarResult(result) {
if (result.error) {
alert(result.error.message);
var url = result.error.subscriptionUrl;
url += '?resource_name=gcalendar&application_url=';
url += encodeURIComponent(location.href.replace(/[^\/]+$/, ''));
url += '&return_url=';
url += encodeURIComponent(location.href);
$('view').innerHTML='<a href="'+url+'">Please grant calendar access to us!</a>';
} else {
var html = '<ul>';
for (var i=0; i<result.entry.length; i++) {
html += '<li>'+escapeHTML(result.entry[i].title)+'</li>';
}
html += '</ul>';
$('view').innerHTML=html;
}
}
</script>
</head>
<body onload="requestCalendarFeed()">
<div id="view"></div>
</body>
</html>gcal2json.ning.com はGoogleカレンダーに接続してスケジュールデータを取得し、JSON形式で外部アプリケーションに配信するプロキシサービス。Google Account Authentication での認証処理およびプライベートフィードの取得はこのサービスが代行する。そして各アプリケーションに対して、ユーザが設定したアクセス制御のポリシーを考慮した上でそのフィードを再配信する。
そのため、
Google → gcal2json.ning.com (GoogleカレンダーJSONプロキシサービス) gcal2json.ning.com → (JSONPリクエストを発行するアプリケーション)
の2つの遷移の間にユーザの同意画面が挟まってしまうことになり、ちょっとインターフェース的にくどいが、そこは実験ということで御容赦。
このサービスの利用ケースとして考えられるのは、例えば、サイトへの訪問者に対して、スケジュールの空き時間に開催されているおすすめイベントを表示するパーソナライズサービスなど。