2008年4月22日(火曜日)

piCal用Googleカレンダープラグインの実験(2)

カテゴリー: - gusagi @ 23時52分08秒

大型連休を目の前に、何をしようか悩み中のgusagiです :-D
今日は、前回の記事の続きです。

前回は、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.

ƤˤϡޤȤդƤޤ

Ȥ

ʤߥȤդ뤳ȤϽޤ

10 queries. 0.010 sec.
Powered by WordPress Module based on WordPress ME & WordPress

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.