12

私は誰かのためにブログを作成中です。彼らは大量のデータを取り込み、それをデザインにしっかりと統合したいと考えているため、標準のウィジェットは使えません。それは今まで大丈夫だった。

彼らはさまざまなイベントを含むパブリック アクセスの Google カレンダーを持っており、次の 5 つのイベント (「今」以降) を取得し、イベントのタイトル、イベントのインスタンスの開始時、その場所、および gcal へのリンクを表示したいと考えています。アイテム。

私が見る限り、gcal フィードを取得するための 3 つのオプションがあります。XML は論理的な選択のように思えますよね?

XML フィードは (atom フィードの説明の後に) 実際にはたくさんの安っぽい HTML です。これを解析することは可能ですが、定期的なイベント (カレンダーにはいくつかあります) はそのイベントの最初のインスタンスのみを表示し、(明らかに) 次のインスタンスがいつであるかに関する情報を表示しないため、背後では大きな苦痛です。

それで、私は少し密度が高いだけですか?XML API を使ってハッキングしたいものを表示する方法はありますか?

それとも、iCal を使った方がうまくいくでしょうか? 私は PHP で iCal を使用したことがありません。

編集:答えのおかげで、Zend Gdataパックをダウンロードしました(ありがたいことに、Zend Frameworkの残りの部分とは別のものです)。私が必要とすることは、これと同じくらい簡単でした:

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_HttpClient');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
$service = new Zend_Gdata_Calendar();
$query = $service->newEventQuery();

$query->setUser('your_user@googlemail.com');

$query->setVisibility('public');
$query->setProjection('full');
$query->setStartMin(date('Y-n-j'));
$query->setStartMax(date('Y-n-j', time() + (60*60 *24*8)));
$query->setOrderby('starttime');

try { $eventFeed = $service->getCalendarEventFeed($query); }
catch (Zend_Gdata_App_Exception $e) { return; }

foreach ($eventFeed as $event) 
    echo $event; // do something real here

これで 1 週間分のイベントが取得できます (setStartMax は排他的であるため、8 日後に設定する必要があります)。

これが将来誰かに役立つことを願っています。

4

3 に答える 3

8

もう 1 つのオプションは、Zend Google カレンダー ライブラリを使用することです。これは zend フレームワークの別の部分であるため、zend フレームワーク全体は必要ありません。

http://framework.zend.com/manual/en/zend.gdata.calendar.html

例を見ればそれほど難しいことではありません。

于 2009-05-12T10:23:13.930 に答える
4

他の誰かに役立つ場合に備えて、デフォルト以外のカレンダーを取得する方法を見つけました。Google カレンダーにアクセスしてカレンダー設定を調べると、下部に非常に長いメール アドレスのような形式のカレンダー ID があります (例: adg5jcq8gk7lsp6rrbmrm8c@group.calendar.google.com)。 >setUser() を使用して、その特定のカレンダーを使用します。

于 2010-05-26T19:51:36.343 に答える
1

コードを使用している人へのecho $event;注意として、何も表示されなかったので、クエリが失敗していると思いました。

何かを印刷するスニペットを次に示します。

foreach ($eventFeed as $event) {
  echo $event->title->text . '<br />';
}
于 2010-01-20T09:04:47.863 に答える