Получение событий Календаря Google на PHP - PullRequest
12 голосов
/ 12 мая 2009

Я нахожусь в процессе создания блога для кого-то. Они хотят собрать много данных и довольно плотно интегрировать их в дизайн, поэтому стандартные виджеты - нет-нет. Это было хорошо до сих пор.

У них есть общедоступный Календарь Google с различными событиями на нем, и я хочу получить следующие 5 событий (начиная с «сейчас») и отобразить заголовок события, когда этот экземпляр события начинается, его местоположение и ссылку в Гкал.

Из того, что я вижу, есть три варианта захвата каналов gcal: XML, ical или HTML (содержащие некоторые действительно отличные JSON). XML кажется логичным выбором, верно?

Что ж, XML-фид (после описания фида атомов) на самом деле просто бесполезный HTML. Синтаксический анализ этого возможен, но это огромная боль сзади, потому что повторяющиеся события (которых в календаре несколько) показывают только первый экземпляр этого события и (по-видимому) никакой информации о том, когда следующий экземпляр.

Так я просто немного хладнокровен? Есть ли способ показать, что я хочу, просто взломав XML API?

Или мне лучше повезет через iCal? Я никогда не делал iCal с PHP, поэтому, если у вас есть, пожалуйста, предложите какие-нибудь библиотеки, которые вы использовали, чтобы упростить себе задачу.

Редактировать: благодаря ответу я скачал пакет 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

Это должно дать вам количество событий в неделю (да, setStartMax является эксклюзивным, поэтому в будущем потребуется установить его на 8 дней).

Надеюсь, это поможет кому-то еще в будущем.

Ответы [ 3 ]

8 голосов
/ 12 мая 2009

Другой вариант - использовать библиотеку Zend Google Calendar, она является отдельной частью Zend Framework, поэтому вам не нужна вся Zend Framework

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

это не так сложно, если вы посмотрите на примеры.

4 голосов
/ 26 мая 2010

В случае, если это кому-нибудь еще поможет, я выяснил, как получать календари, отличные от стандартных. Если вы зайдете в свой календарь Google и посмотрите настройки календаря, внизу есть идентификатор календаря, который отформатирован как очень длинный адрес электронной почты (пример: adg5jcq8gk7lsp6rrbmrm8c@group.calendar.google.com) Используйте это с $ query > setUser () для использования этого конкретного календаря.

1 голос
/ 20 января 2010

Как никто другой, использующий код, echo $event; ничего не показывал для меня, поэтому я подумал, что запрос не удался.

Вот фрагмент кода, который должен что-то напечатать:

foreach ($eventFeed as $event) {
  echo $event->title->text . '<br />';
}
...