とあるサイトの企画の中で、
毎月の日ごとのイベントをカレンダー方式で表示させるというものがあって、
当然、毎月更新があるのである程度使用に耐えるインターフェイスを
用意しなくちゃならないんだけど、設計はともかく実際に用意するのは結構面倒。

で、どうしたもんかなーと思っていたのだけど、ああ、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