Google Calendar API

Zend Gdata

Google Calendar APIを扱うライブラリ。

使い方

ローカルサーバー上で上記のサンプルコードを動かそうとすると、

リクエストされたページは表示できません。他のサイトから Google アカウント へのアクセスが要求されましたが、不正な形式のリクエストが送信されました。このメッセージを受信したときにアクセスしようとしていたサイトに、エラーが発生したことを連絡してください。エラー メッセージの詳細は次のとおりです:

“next” パラメータに問題があるか、見つかりませんでした。

というメッセージが出てくる。ローカルじゃないサーバーで試すしか無いらしい。

iCalendar

上記のAPIが使えない場合はiCalendarというスケジュールの標準フォーマットでファイルを作ってGoogleカレンダーから取り込むという方法がある。取り込み方はカレンダの左側にある「他のカレンダー」の▼をクリックして「URLで追加」にiCalendarのURLを入力する。

PHPでiCalendarを扱うにはiCalcreatorというライブラリがあるのでそれを使えばいいかもしれない。

もちろん自分でファイルを出力しても良い。

Google カレンダーをiCalendarにエクスポートすると以下のようなファイルが出来てくる。こんな形式で書けばおk。コメントを付け足して書いておく。

BEGIN:VCALENDAR
  
PRODID:-//Google Inc//Google Calendar 70.9054//EN #ほかのiCalendarツールと識別できるID。PRODIDの書式は特に定められていない、
  
VERSION:2.0
  
CALSCALE:GREGORIAN #グレゴリオ暦
  
METHOD:PUBLISH
  
X-WR-CALNAME:予定
  
X-WR-TIMEZONE:Asia/Tokyo
  
BEGIN:VTIMEZONE
  
TZID:Asia/Tokyo
  
X-LIC-LOCATION:Asia/Tokyo
  
BEGIN:STANDARD
  
TZOFFSETFROM:+0900
  
TZOFFSETTO:+0900
  
TZNAME:JST
  
DTSTART:19700101T000000
  
END:STANDARD
  
END:VTIMEZONE
  
BEGIN:VEVENT #個別のイベントの始まり
  
DTSTART;VALUE=DATE:20100202 #開始日時
  
DTEND;VALUE=DATE:20100203 #終了日時。終了日時はその日を含めないで定義。この場合は2011年2月2日終日のイベント
  
#終日ではなく、時間指定のイベントは以下のように書く
  
#DTSTART:20111021T103000Z #標準時で2011年10月21日10時30分(日本時間19時30分)から
  
#DTEND:20111021T123000Z #2011年10月21日12時30分(日本時間12分30分)まで
  
DTSTAMP:20111103T125043Z #このファイルが作られた時間(標準時)
  
UID:[email protected] #識別子。形式はない
  
CREATED:20100126T084827Z
  
DESCRIPTION:
  
LAST-MODIFIED:20100222T074044Z
  
LOCATION:
  
SEQUENCE:0 #更新番号
  
STATUS:CONFIRMED
  
SUMMARY:ほげほげ
  
TRANSP:TRANSPARENT #外部向けの表示で予定なし。予定ありはOPAQUE
  
END:VEVENT
  
BEGIN:VEVENT
  
…
  
END:VEVENT
  
…

iCalendarについて以下を参考にした。

この形式でiCalendarを出力してGoogle カレンダーから読み込みばいい。ファイルができたらいったんローカルに保存してインポートしてみよう。構文がおかしい時はエラーを表示してくれる。

エラーが出ず、ちゃんとインポート出来るようなら、「URLで追加」してみる。ただしちゃんとヘッダーを加えてやらないと読み込んでくれない。

例えば

[php title=”ical.php”]

<?php

header(‘Content-Type: text/calendar; charset=utf-8’);

readfile(“hoge.ics”);

?>

[/php]

とか

[php title=”ical.php”]

<?php

$ical = <<<EOT

BEGIN:VCALENDAR

END:VCALENDAR

EOT;

header(‘Content-Type: text/calendar; charset=utf-8’);

echo $ical;

?>

[/php]

のようにしてURLにical.phpを指定してPHPでヘッダーをはいてやる。

もしくはhoge.icsファイルがあるディレクトリに

[text title=”.htaccess”]

AddType “text/calendar; charset=utf-8” ics

[/text]

を追加して、URLにhoge.icsを指定する。

「URLで追加する」でGoogle Calendarに追加したカレンダーは半日に一回程度しか更新されないらしい。

参照