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つの遷移の間にユーザの同意画面が挟まってしまうことになり、ちょっとインターフェース的にくどいが、そこは実験ということで御容赦。
このサービスの利用ケースとして考えられるのは、例えば、サイトへの訪問者に対して、スケジュールの空き時間に開催されているおすすめイベントを表示するパーソナライズサービスなど。