2009-05-12 21 views
11

Sono in procinto di creare un blog per qualcuno. Vogliono inserire molti dati e integrarli in modo abbastanza preciso nella progettazione, quindi i widget standard sono un no-no. Questo è stato bene fino ad ora.Ottenere eventi di Google Calendar in PHP

Hanno un accesso pubblico a Google Calendar con vari eventi su di esso e voglio afferrare i prossimi 5 eventi (da "ora" in poi) e visualizzare il titolo dell'evento, quando inizia l'istanza dell'evento, la sua posizione e un link all'elemento gcal.

Da quello che posso vedere, ci sono tre opzioni per l'acquisizione di feed gcal: XML, ical o HTML (contenente alcuni JSON veramente whack). XML sembra la scelta logica, giusto?

Bene il feed XML è (dopo la descrizione del feed atom) in realtà solo un sacco di codice HTML. L'analisi è possibile ma è un enorme dolore nel retro perché gli eventi ricorrenti (di cui ce ne sono diversi sul calendario) mostrano solo la prima istanza di quell'evento e (apparentemente) nessuna informazione su quando è l'istanza successiva.

Quindi sono solo un po 'denso? C'è un modo per mostrare ciò che voglio semplicemente hackerando tramite l'API XML?

Oppure avrei più fortuna con iCal? Non ho mai fatto alcun iCal con PHP, quindi se lo hai, ti preghiamo di suggerire eventuali librerie che hai usato per semplificare le cose da solo.

Edit: grazie alla risposta, ho scaricato il pacchetto Zend Gdata (che, per fortuna, è separato per il resto della Zend Framework). Fare ciò che ho bisogno è stato facile come questo:

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 

Questo dovrebbe farti valore di una settimana di eventi (sì setStartMax è esclusivo in modo impostazione 8 giorni in futuro è richiesto).

Spero che questo aiuti qualcun altro in futuro.

risposta

8

Un'altra opzione è quella di utilizzare la libreria calendario Zend Google, si tratta di una parte separata del Zend Framework in modo non è necessario l'intero Zend Framework

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

non è così difficile una volta che dare un'occhiata agli esempi

+0

Ho visto questo prima di chiedere ma era spaventato dal "Zend" nel nome. Ora hai detto che non ho bisogno del quadro completo a cui dare un'occhiata, gli darò un'occhiata corretta. Grazie. – Oli

1

Come testa di chi utilizza il codice, echo $event; non ha visualizzato nulla per me, quindi ho pensato che la query non riuscisse.

Ecco un frammento che dovrebbe stampare qualcosa:

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

In caso aiuta chiunque altro, ho capito come ottenere i calendari diversi da quello di default. Se vai nel tuo calendario di google e cerchi le impostazioni del calendario, nella parte inferiore c'è un ID del calendario che è formattato come un indirizzo email veramente lungo. (Esempio: [email protected]) Usa quello con $ query- > setUser() per utilizzare quel calendario specifico.

+0

Grazie ... ho setacciato il web per come farlo! –

Problemi correlati