毎月の日ごとのイベントをカレンダー方式で表示させるというものがあって、
当然、毎月更新があるのである程度使用に耐えるインターフェイスを
用意しなくちゃならないんだけど、設計はともかく実際に用意するのは結構面倒。
で、どうしたもんかなーと思っていたのだけど、ああ、GoogleCalendarで管理して、
そのデータを引っ張ってきてサイトに載せればいいじゃない、ということに気づいた。
ある程度パブリックな情報だから、直接GoogleCalendarを参照されても困らないし、
ユーザを増やせば複数で管理することも出来るし。
ライブラリを探せばなにがしかあるだろうけど、
ただ引っ張ってきたいだけでPOSTしたりしないので、自分で書いてみた。
使用言語は例によってPHPです。
GoogleCalendarの使い方については省略。
登録するデータは、「毎月第2金曜」という感じのデータと、その他単発のもの。
1. カレンダーのアドレスを用意する。
GoogleCalendarから設定 » カレンダーを選択 » カレンダー情報の、非公開URLのXMLのリンクを保存。
こんな形式になっています。
http://www.google.com/calendar/feeds/<userid>/private-<magicCookie>/basic
ここから、useridとmagicCookieを抜き出しておきます。
2. リクエストするURLを作成
データを参照するためのAPIの仕様についてはこのあたりを参考に。API Reference Guide – Google Calendar APIs and Tools – Google Code
例えば…2008年11月の予定を古い方から並べるとすると、
こんな感じのリクエストを送ることになります。
http://www.google.com/calendar/feeds/<userid>/private-<magicCookie>/full?start-min=2008-11-01T00:00:00&start-max=2008-11-30T23:59:59&orderby=starttime&sortorder=a
そのあたりは各自設定のこと。
3. リクエストを送ってデータを取得。
例えばこんなコード。$target = 'http://www.google.com/calendar/feeds/'
. $userId
. '/private-'
. $magicCookie
. '/full?'
. 'start-min=2008-11-01T00:00:00'
. '&start-max=2008-11-30T23:59:59'
. '&orderby=starttime&sortorder=a';
$xml = simplexml_load_file($target);
そこから、イベントの開始時刻と、タイトル、説明を抜き出すにはこんな感じで。
foreach ($xml->entry as $item):
$gd = $item->children('http://schemas.google.com/g/2005');
$startTime = $gd->when->attributes()->startTime);
$title = $item->title;
$description = $item->content;
endforeach;
4. HTMLで書き出し
で、得られたデータを適当にゴニョゴニョして仕立てればできあがり。例えばこんな感じ。
(サンプル) Google Calendar API Sample: Retrieving events
おけ。出来そう。
きっちりとしたインターフェイスを作るのは大変だけど、
APIなんかがきっちり整備されてて、中間部分のプログラムが難しくなければ、
ある程度他のサービスにアウトソースしちゃうってのは便利だなーと思った。
それでなくてもGoogle Calendarは繰り返しの設定とか痒いところに手が届くしね。
(もちろん、機密情報とかは無理だけどね)
テストとか考えると、確実に何日か分の作業は節約出来たかなー
参考リンク
XPath を使用して Google Calendar イベントを PHP Web サイトに表示するAPI Developer’s Guide: The Protocol – Google Calendar APIs and Tools – Google Code
API Reference Guide – Google Calendar APIs and Tools – Google Code