2009-05-12 4 views
11

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

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

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

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

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

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

Edit: благодаря ответу, я скачал пакет 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 дней в будущем требуется).

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

ответ

8

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

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

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

+0

Я видел это, прежде чем спрашивать, но был испуган «Zend» в названии. Теперь вы сказали, что мне не нужны все рамки, я дам ему правильный взгляд. Благодарю. – Oli

1

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

Вот отрывок, который должен напечатать что-нибудь:

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

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

+0

Спасибо ... прочесывали в Интернете, как это сделать! –

Смежные вопросы