Jestem w trakcie tworzenia bloga dla kogoś. Chcą wciągnąć dużo danych i zintegrować je z projektem, więc standardowe widżety to nie nie. Do tej pory było dobrze.Uzyskiwanie wydarzeń z Kalendarza Google w PHP
Mają publiczny dostęp do Kalendarza Google z różnymi wydarzeniami na nim i chcę wziąć udział w kolejnych 5 wydarzeniach (od "teraz") i wyświetlić tytuł wydarzenia, kiedy ta instancja zdarzenia się rozpocznie, jego lokalizacja i link do elementu gcal.
Z tego co widzę, dostępne są trzy opcje przechwytywania kanałów danych Gcal: XML, ical lub HTML (zawierające naprawdę naprawiony JSON). XML wydaje się logicznym wyborem, prawda?
Cóż, źródło danych XML (po opisie podawania atomu) to po prostu mnóstwo niezobowiązującego HTML. Analizowanie tego jest możliwe, ale jest to ogromny problem z tyłu, ponieważ zdarzenia cykliczne (z których kilka znajduje się w kalendarzu) pokazują tylko pierwszą instancję tego zdarzenia i (podobno) brak informacji o tym, kiedy następna instancja jest.
Czy jestem po prostu trochę gęsty? Czy istnieje sposób, aby pokazać, co chcę, po prostu hackowanie za pośrednictwem interfejsu API XML?
A może mam więcej szczęścia dzięki iCal? Nigdy nie robiłem żadnego programu iCal z PHP, więc jeśli masz, zasugeruj wszystkie biblioteki, których używałeś, aby uprościć sobie pracę.
Edit: dzięki odpowiedzi Pobrałem pakiet Zend GData (który, na szczęście, jest oddzielne do reszty Zend Framework). Robi to, co trzeba było tak łatwe, jak to:
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
To powinno Ci tygodniowy wartości zdarzeń (tak setStartMax jest wyłącznym więc ustawienie go 8 dni w przyszłości jest to wymagane).
Mam nadzieję, że to pomoże komuś innemu w przyszłości.
Widziałem to przed pytaniem, ale byłem przerażony przez "Zend" w nazwie. Powiedziałeś już, że nie potrzebuję całej struktury osuszania, więc nadaję jej odpowiedni wygląd. Dzięki. – Oli