piCal用Googleカレンダープラグインの実験(2)
大型連休を目の前に、何をしようか悩み中のgusagiです
今日は、前回の記事の続きです。
前回は、piCalのカレンダー形式に合わせて、何日から何日までのイベントを取得するか、というところまでのサンプルコードを書かせて頂きました。
次にやることは、どのカレンダーのイベントを取得するか、です。
これは、Zend_Gdata_CalendarクラスのgetCalendarListFeedメソッドを利用するのが簡単です。
前回も書いたように、あるアカウントに共有されているカレンダーのイベントを取得したいので、まずはそのアカウントで認証を行うことが必要です。
set_include_path( get_include_path() . PATH_SEPARATOR . XOOPS_ROOT_PATH . '/common/ZF/' );
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Http_Client');
$zfService = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$gcUser = "example@example.com";
$gcPass = "password";
$client = Zend_Gdata_ClientLogin::getHttpClient($gcUser, $gcPass, $zfService);
上記のコードでは、"example@example.com"というアカウントで認証を行っています。
次に、先ほど認証を行った接続を利用して、共有しているカレンダーのリストを取得します。
$zfService = new Zend_Gdata_Calendar( $client );
$users = array();
$message = '';
$body = '';
try {
$listFeed = $zfService->getCalendarListFeed();
} catch (Zend_Gdata_App_Exception $e) {
$message = $e->getMessage();
$message = mb_convert_encoding( $message, mb_internal_encoding(), 'utf-8' );
echo 'error : ' . $message . "<br />";
$response = $e->getResponse();
if ( isset($response) && is_object($response) ) {
$body = $response->getBody();
$body = mb_convert_encoding( $body, mb_internal_encoding(), 'utf-8' );
echo $body . "<br />";
}
}
foreach ( $listFeed as $calendar ) {
$users[] = basename( $calendar->id->getText() );
}
エラーが発生した場合のことを考え、try catchを用いてリストを取得します。
リストは、utf-8のXML形式で出力されるので、エラー内容を画面に表示させる場合は、一度内部エンコーディングに変換するのが良いでしょう。
カレンダーのリストを取得できた場合は、リストから「誰のカレンダー」という情報を取得して、$usersという配列型の変数に格納しています。
ここで、basenameを利用している理由ですが、カレンダーから取得したid自体は、URL形式をしており、この最後の部分に「誰のカレンダー」という情報があるからです。
※ここらへん、私もGoogleのAPIをしっかり理解している訳ではないので、間違っているかも知れません。
ここまでで問題がなければ、$usersという変数に、イベントを取得する対象となるカレンダーの情報が格納されているはずです。
次回は、この$usersを利用して、カレンダーごとのイベントを取得し、piCalに返すための部分を書かせて頂きます。
RSS feed for comments on this post.
ƤˤϡޤȤդƤޤ
Ȥ
ʤߥȤդ뤳ȤϽޤ