Подтвердить что ты не робот

Получение событий Календаря Google в PHP

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

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

Из того, что я вижу, есть три варианта захвата gcal feeds: 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('[email protected]');

$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 дней в будущем).

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

В случае, если это помогает кому-то еще, я понял, как получить календари, отличные от значения по умолчанию. Если вы заходите в свой календарь Google и просматриваете настройки календаря, внизу находится идентификатор календаря, который отформатирован как очень длинный адрес электронной почты (пример: adg5jcq8gk7lsp6rrb[email protected]). Используйте это с $query- > setUser() для использования этого конкретного календаря.

Ответ 3

Как кто-то, кто использует код, echo $event; ничего не отобразил для меня, поэтому я думал, что запрос не работает.

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

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