CodeZine(コードジン)

特集ページ一覧

PHPアプリケーションからGoogle Calendarを利用しよう(前編)

Zend FrameworkでGoogleアプリケーションを使い倒す(2)

  • LINEで送る
  • このエントリーをはてなブックマークに追加

ダウンロード sample.zip (1.9 KB)

目次

カレンダーリストの取得(④)

 作成したCalendarサービスのインスタンスを通じてカレンダーリストを取得します。取得方法にはすべて取得するものと、特定の一つのカレンダーを取得する2つの方法があります。

すべてのカレンダーリストを取得

 これはZend_Gdata_CalendarクラスのgetCalendarListFeedメソッドを使用することで行えます。戻り値としてはカレンダーの集合であるZend_Gdata_Calendar_ListFeedオブジェクトとなります。今回のサンプルではこちらを使用しています。

[リスト7]index.php(抜粋)
// カレンダーリストの取得【④】
try {
    $listFeed= $serviceCal->getCalendarListFeed();
} catch (Zend_Gdata_App_Exception $e) {
    echo "エラー: " . $e->getMessage();
}

 これは「http://www.google.com/calendar/feeds/default」にアクセスすると見ることのできるXMLを取得しています。実際にブラウザからアクセスしてソースを表示させてみてください。次のようなXMLファイルを得られます。

[リスト8]カレンダーフィード(抜粋)
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:gCal="http://schemas.google.com/gCal/2005" xmlns:gd="http://schemas.google.com/g/2005">
  <id>http://www.google.com/calendar/feeds/default</id> <!-- このフィードのID -->
  <updated>2009-02-21T05:08:32.144Z</updated> <!-- 最終更新日 -->
  <title type="text">【ユーザー名】's Calendar List</title> <!-- このフィードのタイトル -->
  <link xmlns="http://www.w3.org/2005/Atom" rel="alternate" type="text/html" href="http://www.google.com/calendar/render"/> <!-- このフィードへのHTMLリンク -->
  <link xmlns="http://www.w3.org/2005/Atom" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default"/> <!-- 取得元URI -->
  <link xmlns="http://www.w3.org/2005/Atom" rel="http://schemas.google.com/g/2005#post" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default"/> <!-- POST先URI -->
  <link xmlns="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default"/> <!-- このリソースのURI -->
  <author>
    <name>【ユーザー名】</name> <!-- 作成者名 -->
    <email>【ユーザーのアドレス】</email> <!-- 作成者のアドレス -->
  </author>
  <generator version="1.0" uri="http://www.google.com/calendar">Google Calendar</generator> <!-- フィード生成者 -->
  <startIndex>1</startIndex>
  <entry> <!-- entryブロックが一つのカレンダーリストの情報 -->
    <id>http://www.google.com/calendar/feeds/default/【ユーザーアカウント】</id> <!-- このエントリーのID -->
    <published>2009-02-21T05:08:32.149Z</published> <!-- 公開日 -->
    <updated>2009-02-20T16:54:36.000Z</updated> <!-- 最終更新日 -->
    <title type="text">第1会議室</title> <!-- エントリーのタイトル -->
    <content xmlns="http://www.w3.org/2005/Atom" type="application/atom+xml" src="http://www.google.com/calendar/feeds/【ユーザーアカウント】/private/full"/> <!-- このエントリーの内容 -->
    <link xmlns="http://www.w3.org/2005/Atom" rel="alternate" type="application/atom+xml" href="http://www.google.com/calendar/feeds/【ユーザーアカウント】/private/full"/> <!-- このエントリーへのリンク -->
    <link xmlns="http://www.w3.org/2005/Atom" rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="http://www.google.com/calendar/feeds/【ユーザーアカウント】/acl/full"/> <!-- アクセスコントロールリスト(ユーザーとそのアクセスレベルをコントロール)取得URI -->
    <link xmlns="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/【ユーザーアカウント】"/> <!-- このエントリーのURI -->
    <author> <!-- エントリーの作成者情報 -->
      <name>【エントリー作成者名】</name> <!-- 名前 -->
      <email>【エントリー作成者のアドレス】</email> <!-- 作成者のアドレス -->
    </author>
    <gCal:timezone xmlns:gCal="http://schemas.google.com/gCal/2005" value="Asia/Tokyo"/> <!-- タイムゾーン -->
    <gCal:timesCleaned xmlns:gCal="http://schemas.google.com/gCal/2005" value="0"/> <!-- ManageCalendarsを通じて操作された回数 -->
    <gCal:hidden xmlns:gCal="http://schemas.google.com/gCal/2005" value="false"/> <!-- 表示するかしないか -->
    <gCal:color xmlns:gCal="http://schemas.google.com/gCal/2005" value="#A32929"/> <!-- 色 -->
    <gCal:selected xmlns:gCal="http://schemas.google.com/gCal/2005" value="true"/> <!-- 選択しているかしていないか -->
    <gCal:accesslevel xmlns:gCal="http://schemas.google.com/gCal/2005" value="owner"/> <!-- カレンダーへのアクセスレベル -->
  </entry>
  <entry>・・・</entry>
  <entry>・・・</entry>
</feed>

特定のカレンダーを取得

 Zend_Gdata_CalendarクラスのgetCalendarListEntryメソッドを使用することで、特定のカレンダーを取得することもできます。戻り値としては次項で説明する、カレンダー一つを表すZend_Gdata_Calendar_ListEntryオブジェクトを返します。

[リスト9]getCalendarListEntryメソッド
getCalendarListEntry(string/Zend_Gdata_Query $location)

 この引数である$locationには要求するフィードのURIを記載します。前項のXMLで取得した「http://www.google.com/calendar/feeds/【ユーザーアカウント】/private/full」といった文字列になります。もしあらかじめ取得すべきURIが分かっているようであればstring型で記載します。

 また、Zend_Gdata_Queryオブジェクトを使用してこのURIを引き渡す方法もあります。その場合は次のような記載となります。

[リスト10]Zend_Gdata_Queryオブジェクト使用
$query = $serviceCal->newEventQuery();
$query->setUser('default');
$query->setVisibility('private');
$query->setProjection('full');

$serviceCal->getCalendarListEntry($query);

 以下Zend_Gdata_Queryオブジェクトに設定できる主な項目です。

Zend_Gdata_Queryオブジェクトの主な設定項目
メソッド名 既定値 内容
setUser default ユーザー名。上記URLの【ユーザーアカウント】部分になる。defaultは現在ログインしているユーザー。
setVisibility public privateは非公開カレンダー、publicは公開カレンダーを示す。
setProjection full 取得するカレンダーの情報量とフォーマット。すべて取得するfullが一般的(公式ドキュメント上は既定値の明記はありませんでしたが、動作上はfullが既定値のようです)。ほかにメタデータ情報を各イベントのcontentフィールドの可読形式で格納するbasicや、コメント情報も付加するcompositeが指定可能。

カレンダー名の表示(⑤、⑥)

 取得したカレンダーリストからカレンダーを一つずつ抜き出して、タイトルを表示します。

 カレンダーリストであるZend_Gdata_Calendar_ListFeedオブジェクトにはカレンダー一つをあらわすZend_Gdata_Calendar_ListEntryオブジェクトが複数格納されています。

[リスト11]index.php(抜粋)
// カレンダーリストごとに処理【⑤】
foreach ($listFeed as $list) {

    // タイトル(会議室名)の取得【⑥】
    $roomName = $list->title;
    ...中略...
}

 Zend_Gdata_Calendar_ListEntryオブジェクトのtitleという変数を取得し、カレンダー名、つまり会議室名として表示します。

 このほかにもZend_Gdata_Calendar_ListEntryクラスには取得したカレンダーの情報をあらわす変数が多く定義されています。またCalendarサービスに限らず、ほかのサービスでも共通な情報をあらわす定数からも情報を抜き出すことができます。

Zend_Gdata_Calendar_ListEntryのメンバ変数
変数名 内容 継承元
color カレンダーに設定されている色。Googleカレンダーサービスにログインしてみると分かる。
hidden カレンダーを表示するかしないか
selected カレンダーが選択されているかいないか
timezon カレンダーのタイムゾーン
title カレンダーのタイトル Zend_Gdata_App_FeedEntryParent
id カレンダーのID Zend_Gdata_App_FeedEntryParent
author カレンダーの作成者 Zend_Gdata_App_FeedEntryParent

まとめ

 いかがでしょうか。Zend_Gdata_Calendarについて、まずは認証とカレンダーリストの取得を行いました。認証については他のGoogleサービスにおいても共通の処理となります。またデータの取得については、使用するクラス、メソッドは違えど、他のGoogleサービスのAPIにおいても同様の考え方でサーバ上のデータを扱うことができるようになります。

 次回はカレンダーリストごとのイベントの取得、新規登録、更新、削除といったサーバ上のデータの操作について解説します。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Zend FrameworkでGoogleアプリケーションを使い倒す

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト 森山 絵美 (モリヤマ エミ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5