2009年7月13日月曜日

カレンダーのIDを指定してgoogle calendarから情報を受け取る方法。

newEventQuery()を実行することで、Zend_Gdata_Calendar_EventQueryオブジェクトを受け取る。
getCalendarEventFeed(Zend_Gdata_Calendar_EventQueryオブジェクト)を実行することで、Zend_Gdata_Calendar_EventEntryの配列を受け取る。
getWhenという関数を用いてZend_Gdata_Extension_When Objectの配列を受け取る。
あとは、自由に必要なモノをとりだすだけ。


require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
// ClientAuth 認証用のパラメータ
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$user = "googleのアカウント";
$pass = "アカウントのパスワード";
// 認証済みの HTTP クライアントを作成します
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);

$service = new Zend_Gdata_Calendar($client);

$calendar_id = "カレンダーのID";

$query = $service->newEventQuery();
$query->setUser($calendar_id);
$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setFutureevents('true');

try {
$eventFeed = $service->getCalendarEventFeed($query);
} catch (Zend_Gdata_App_Exception $e) {
echo "エラー: " . $e->getMessage();
}

echo "<ul>";
foreach ($eventFeed as $event) {
$when = $event->getWhen();
$starttime = $when[0]->startTime;
preg_match("/(....)-(.*?)-(.*?)T(.*?):(.*?):(.*?)\./" , $starttime, $startrow);
$timestamp[start] = gmmktime($startrow[4], $startrow[5], $startrow[6], $startrow[2], $startrow[3], $startrow[1]);

$x = getdate($timestamp[start]);
$date = $x[year].'年'.$x[mon].'月'.$x[mday].'日'.$x[hours].'時'.$x[minutes].'分'.$x[seconds].'秒';
print $date;

echo "<li>" . $event->title . " (Event ID: " . $event->id . ")</li>";
}
echo "</ul>";


追記
・カレンダーのXMLは、自分のカレンダーの設定画面からも確認することができる。
/User/Visibility/Projectionという形でアクセスするので必要にZend_Gdata_Calendar_EventQueryにセットする。
・時間を指定して検索する場合、

//$query->setFutureevents('true');
//上のコードを消して、下記を追加する必要がある。
$query->setStartMin('2009-07-23');
$query->setStartMax('2009-07-30');

0 件のコメント:

コメントを投稿