2009-05-12 18 views
11

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.

Odpowiedz

8

Inną opcją jest użycie biblioteki Zend Kalendarz Google, to jest oddzielna część Zend Framework więc nie trzeba cały Zend Framework

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

to nie jest trudne, gdy pojawi spójrz na przykłady.

+0

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

1

Jako osoba kierująca do każdego, kto użył kodu, echo $event; nic mi nie wyświetlił, więc pomyślałem, że zapytanie się nie udawało.

Oto fragment, który powinien wydrukować coś:

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

W przypadku Pomaga nikogo innego, zorientowali się, jak uzyskać kalendarzy innych niż domyślny. Jeśli przejdziesz do kalendarza google i przejrzysz ustawienia kalendarza, u dołu znajduje się identyfikator kalendarza sformatowany jako naprawdę długi adres e-mail (na przykład: [email protected]) Użyj go z $ query- > setUser(), aby użyć tego konkretnego kalendarza.

+0

Dzięki ... przeszukiwam internet, żeby to zrobić! –

Powiązane problemy