ここは僕の冷蔵庫。後はあれして食べるだけ。

I love the frozen FOOD.

2014年11月17日だかに、Google CalendarのV2のAPIが停止されました。
それに伴い、V2からV3の移行が必要となってます。

feedのbasicアクセス

v2でRSSフィードでカレンダーを吸い上げていることもあるかと思うのですが、この時、fullとかbasicとか指定しますよね。
本日、2014年11月21日現在、fullは停止されていますが、basicは生きている様子。
ただ、今後、停止されるとおもわれるので、適宜改修しないとです。

何が変わったか

v2まで、APIキーなしでもAPIがたたけましたが、今回からAPIキーを指定しないとたたけません。キーに対して、呼出し制限情報なども、設けられますのでご注意を。
キーの取得は、googleアカウントでログインしたのち、
Google Developers Console
に行ってプロジェクト作成後、つくりましょう。

呼出しフォーマット

https://www.googleapis.com/calendar/v3/calendars/カレンダーID/events?’.
‘key=APIKEY&timeMin=取得対象期間開始日&timeMax=取得対象期間最大日&maxResults=最大取得件数&orderBy=startTime&singleEvents=true

のようなアクセスでOKです。
取得対象期間開始日から、最大日までのイベントを、最大取得件数分もってきます。
カレンダーIDは、ブラウザで、googleカレンダーへ行き、取得対象となるカレンダーの設定情報からIDをもってきてください。「カレンダーのアドレス」という欄に「カレンダーID」と書いてあるかと思いますよ。

取得データ

先ほどのURLをHTTPでたたくと、下記のようなjsonが返答されます。

{
 "kind": "calendar#events",
 "etag": "\"etagデータ\"",
 "summary": "カレンダーの名前",
 "description": "カレンダーの情報",
 "updated": "最終更新日",
 "timeZone": "Asia/Tokyo",
 "accessRole": "reader",
 "defaultReminders": [],
 "items": [
  {
   "kind": "calendar#event",
   "etag": "\"etagデータ\"",
   "id": "イベントID",
   "status": "confirmed",
   "htmlLink": "イベントのhtmlリンク先",
   "created": "カレンダー作成日",
   "updated": "更新日",
   "summary": "イベントタイトル",
   "description": "イベントの詳細",
   "location": "場所情報",
   "creator": {
    "email": "作成者メールアドレス",
    "displayName": "作成車名"
   },
   "organizer": {
    "email": "カレンダーID",
    "displayName": "カレンダー名",
    "self": true
   },
   "start": {
    "dateTime": "イベント開始日時"
   },
   "end": {
    "dateTime": "イベント終了日時"
   },
  :
   {
    他イベント情報
    }
  },

みたいな感じでかえってきます。”items”の下に、イベントが1つずつarrayで返答されてくる感じです。
尚、冒頭でいいましたが、これはjson形式なので、phpであればjson_decodeかましましょう。
日付は、2012-12-26T22:14:42.972Zのような形式になってるので、ご注意を、

実際の取得方法

phpで紹介します。

$urlinfo = "先ほど紹介したURL";
$results = file_get_contents( $urlinfo );
$jsn = json_decode($results,true); /*jsonをarray形式の情報で取得*/
foreach ($jsn['items'] as $item){ /*itemsの下のイベントを1つずつ処理*/
  $startTime = $item['start']['dateTime']; /*イベント開始日時*/
  $endTime   = $item['end']['dateTime'];   /*イベント終了日時*/
  $title     = $item['summary']; /*イベント名*/
  :
  : イベントごとの処理
   :
}

のような感じで、1つ1つイベントを取得・処理していけばよろしいかと。
尚、$item[‘start’]などで指定するdateTime属性ですが、googleカレンダー上で日付だけの指定の場合(時間を入れてない場合)、この属性で日時は取得できません。
$item[‘start’][‘date’]で取得するようにしてください。

  if ( array_key_exists( 'dateTime' , $item['start'] == TRUE ) {
    $startTime = $item['start']['dateTime'];
  } else {
    $startTime = $item['start']['date'] );
  }

みたいな処理をすればよろしいかと。

参考

外部サイト