2009-05-12 6 views
11

Ich bin gerade dabei, einen Blog für jemanden zu erstellen. Sie möchten eine Menge Daten einlesen und sie ziemlich eng in das Design integrieren, so dass Standard-Widgets ein No-No sind. Das war bis jetzt gut.Google Kalender-Ereignisse in PHP erstellen

Sie haben einen öffentlichen Google Kalender mit verschiedenen Ereignissen darauf und ich möchte die nächsten 5 Ereignisse (ab "jetzt") erfassen und den Ereignistitel anzeigen, wann diese Instanz des Ereignisses startet, ihren Standort und a Link zum gcal-Artikel.

Von dem, was ich sehen kann, gibt es drei Möglichkeiten, um gcal Feeds zu greifen: XML, ical oder HTML (enthält einige wirklich whack JSON). XML scheint die logische Wahl zu sein, oder?

Nun der XML-Feed ist (nach der Atom-Feed-Beschreibung) eigentlich nur eine Menge von HTML. Das zu parsen ist möglich, aber es ist ein großer Schmerz im Hintergrund, weil wiederkehrende Ereignisse (von denen es mehrere im Kalender gibt) nur die erste Instanz dieses Ereignisses und (anscheinend) keine Information darüber zeigen, wann die nächste Instanz ist.

Also bin ich nur ein bisschen dicht? Gibt es eine Möglichkeit zu zeigen, was ich will, nur durch die XML-API hacken?

Oder hätte ich mehr Glück durch iCal? Ich habe noch nie einen iCal mit PHP gemacht. Wenn Sie dies getan haben, schlagen Sie bitte alle Bibliotheken vor, die Sie verwenden, um die Dinge für Sie einfacher zu machen.

Edit: dank der Antwort, die ich heruntergeladen habe das Zend Gdata Pack (die, zum Glück, getrennt vom Rest des Zend Framework ist). Zu tun, was ich brauche so einfach wie das war:

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 

, dass Sie sollte von Event einer Woche im Wert (ja setStartMax exklusiv ist, so dass es 8 Tage in der Zukunft Einstellung erforderlich).

Hoffe das hilft jemand anderen in der Zukunft.

Antwort

8

Eine weitere Option ist die Zend Google Kalender-Bibliothek zu verwenden, es ist ein separater Teil des Zend Framework ist, so dass Sie die ganze zend framework nicht brauchen

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

es nicht so schwer, wenn Sie ist Schau dir die Beispiele an.

+0

Ich sah dies vor der Frage, wurde aber von der "Zend" im Namen abgeschreckt. Jetzt hast du gesagt, ich brauche nicht den ganzen Cludging-Rahmen, ich werde es richtig ansehen. Vielen Dank. – Oli

1

Als Kopf zu jemand mit dem Code, zeigte echo $event; nichts für mich, so dass ich dachte, die Abfrage fehlgeschlagen ist.

Hier ein Ausschnitt ist, dass etwas gedruckt werden soll:

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

Im Fall habe ich herausgefunden, wie Kalender anders als der Standard zu bekommen. Wenn Sie in Ihren Google-Kalender gehen und nach Kalendereinstellungen suchen, befindet sich unten eine Kalender-ID, die wie eine wirklich lange E-Mail-Adresse formatiert ist (Beispiel: [email protected]). Verwenden Sie diese mit $ query- > setUser(), um diesen bestimmten Kalender zu verwenden.

+0

Danke ... habe das Web nach diesem Programm durchforstet! –