Google Calendar APIを使ってスケジュール管理のシステム部分をGoogleで。

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

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