PHPでGoogleカレンダーのイベントを取得
-
21-08-2019 - |
質問
私が誰かのためにブログを作成するプロセスにいますよ。彼らは大量のデータをプルし、デザインにかなりしっかりとそれを統合したいので、標準のウィジェットである無無ありません。それは今まで罰金をされています。
彼らは、その上に様々なイベントとパブリックアクセスGoogleカレンダーを持っていると私は(「今」以降から)次の5つのイベントを取得し、イベントのインスタンスは、その場所とリンクを開始したときにイベントのタイトルを、表示したいですGCAL項目にます。
私が見ることができるものから、GCALをつかむための3つのオプションがありますフィード:XML、iCalのか、HTML(一部は実際にJSONを打つ含みます)。 XMLは、論理的な選択のように思える、右?
さてXMLフィードはfaffy HTMLの実際には多くの(Atomフィードの説明の後)です。パースこれが可能であるが、(カレンダー上のいくつかあるうち)イベントを定期的にのみ次のインスタンスがあるときに、そのイベントの最初のインスタンスと、(明らかに)いない情報を表示するので、それは背後にある巨大な痛みです。
は、だから私は少しだけ密集しているのですか?私はXML APIを介してハッキング欲しいものを表示する方法はありますか?
または私はiCalのを通じて、より良い運を持っているでしょうか?あなたが持っているので、もし私がPHPで任意のiCalのをやったことがない、あなた自身のために物事を簡単にするために使用したすべてのlibsを提案してくださいます。
の編集の答えのおかげで、私は(Zend Frameworkのの残りの部分とは別の、ありがたいことに、はの)のZend Gdataのパックをダウンロードしました。
:私は必要なものを行うと、このように簡単でした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
それはあなたのイベントの週間分を取得する必要があります(はいsetStartMaxがとても必要とされ、将来的に8日間、それを設定し、排他的である)。
が、これは将来的に他の誰かを助けることを望みます。
解決
別のオプションは、Zendのフレームワークの別の部分である、ZendのGoogleカレンダーライブラリを使用することで、あなたが全体のZendのフレームワークを必要としないので、
http://framework.zend.com/manual/en /zend.gdata.calendar.htmlする
あなたは例を見てみたら、それは難しいことではありません。
他のヒント
の場合、それは他の誰を助け、私は、デフォルト以外のカレンダーを取得する方法を考え出しました。あなたのGoogleカレンダーにアクセスし、カレンダー設定を見ると、一番下に本当に長いメールアドレスのようにフォーマットされたカレンダーIDがある。(例:adg5jcq8gk7lsp6rrbmrm8c@group.calendar.google.com)を使用して$ query-こと> SETUSER()は、特定のカレンダーを使用します。
のコードを使用して誰にもヘッドアップとして、echo $event;
は私のために何も表示されませんでしたので、私は、クエリが失敗したと思っています。
ここで何かを印刷する必要がありスニペットはあります:
foreach ($eventFeed as $event) {
echo $event->title->text . '<br />';
}