カレンダーリストの取得(④)
作成したCalendarサービスのインスタンスを通じてカレンダーリストを取得します。取得方法にはすべて取得するものと、特定の一つのカレンダーを取得する2つの方法があります。
すべてのカレンダーリストを取得
これはZend_Gdata_CalendarクラスのgetCalendarListFeedメソッドを使用することで行えます。戻り値としてはカレンダーの集合であるZend_Gdata_Calendar_ListFeedオブジェクトとなります。今回のサンプルではこちらを使用しています。
// カレンダーリストの取得【④】
try {
$listFeed= $serviceCal->getCalendarListFeed();
} catch (Zend_Gdata_App_Exception $e) {
echo "エラー: " . $e->getMessage();
}
これは「http://www.google.com/calendar/feeds/default」にアクセスすると見ることのできるXMLを取得しています。実際にブラウザからアクセスしてソースを表示させてみてください。次のようなXMLファイルを得られます。
<?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オブジェクトを返します。
getCalendarListEntry(string/Zend_Gdata_Query $location)
この引数である$locationには要求するフィードのURIを記載します。前項のXMLで取得した「http://www.google.com/calendar/feeds/【ユーザーアカウント】/private/full」といった文字列になります。もしあらかじめ取得すべきURIが分かっているようであればstring型で記載します。
また、Zend_Gdata_Queryオブジェクトを使用してこのURIを引き渡す方法もあります。その場合は次のような記載となります。
$query = $serviceCal->newEventQuery();
$query->setUser('default');
$query->setVisibility('private');
$query->setProjection('full');
$serviceCal->getCalendarListEntry($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オブジェクトが複数格納されています。
// カレンダーリストごとに処理【⑤】
foreach ($listFeed as $list) {
// タイトル(会議室名)の取得【⑥】
$roomName = $list->title;
...中略...
}
Zend_Gdata_Calendar_ListEntryオブジェクトのtitleという変数を取得し、カレンダー名、つまり会議室名として表示します。
このほかにもZend_Gdata_Calendar_ListEntryクラスには取得したカレンダーの情報をあらわす変数が多く定義されています。またCalendarサービスに限らず、ほかのサービスでも共通な情報をあらわす定数からも情報を抜き出すことができます。
| 変数名 | 内容 | 継承元 |
| 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においても同様の考え方でサーバ上のデータを扱うことができるようになります。
次回はカレンダーリストごとのイベントの取得、新規登録、更新、削除といったサーバ上のデータの操作について解説します。
