GoogleカレンダーのプライベートスケジュールをJSONPで配信するサービス

「Google Account Authentication APIを利用してGoogleカレンダーのフィードを取ってくる」で作ったアプリを発展させて、ユーザのプライベートスケジュールデータをJSONPでプロキシ配信するサービスを実験的に実装してみた。

これは以前パーソナルデータのマッシュアップの構想で言っていた仕組みを、実際に実装したもの。

http://gcal2json.ning.com/

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, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
}
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>

→ GoogleカレンダーJSONクライアントのサンプル


gcal2json.ning.com はGoogleカレンダーに接続してスケジュールデータを取得し、JSON形式で外部アプリケーションに配信するプロキシサービス。Google Account Authentication での認証処理およびプライベートフィードの取得はこのサービスが代行する。そして各アプリケーションに対して、ユーザが設定したアクセス制御のポリシーを考慮した上でそのフィードを再配信する。

そのため、

Google → gcal2json.ning.com (GoogleカレンダーJSONプロキシサービス)
gcal2json.ning.com → (JSONPリクエストを発行するアプリケーション)

の2つの遷移の間にユーザの同意画面が挟まってしまうことになり、ちょっとインターフェース的にくどいが、そこは実験ということで御容赦。

このサービスの利用ケースとして考えられるのは、例えば、サイトへの訪問者に対して、スケジュールの空き時間に開催されているおすすめイベントを表示するパーソナライズサービスなど。