Google-Kalender-Ereignisse in PHP

Ich bin in den Prozess der Erstellung ein blog für jemanden. Sie wollen, ziehen in eine Menge von Daten und integrieren Sie es ganz fest in das design, so standard-widgets sind ein no-no. Das ist schon in Ordnung, bis jetzt.

Haben Sie einen öffentlichen Zugriff auf Google-Kalender mit verschiedenen Veranstaltungen auf Sie, und ich will zu greifen, die nächsten 5 Veranstaltungen (von "jetzt" an) und die Anzeige der event-Titel, wenn diese Instanz des Ereignisses beginnt, Ihren Standort und einen link zu den gcal Element.

Aus, was ich sehen kann, gibt es drei Möglichkeiten zum greifen gcal-feeds: XML, ical oder HTML-Format (mit einigen wirklich whack JSON). XML scheint die logische Wahl, richtig?

Sowie der XML-feed ist (nach dem atom-feed Beschreibung) tatsächlich nur eine Menge von faffy HTML. Analysieren es ist möglich, aber es ist ein großer Schmerz in den Hintern, weil wiederkehrende Ereignisse (von denen es mehrere auf dem Kalender) zeigen nur die erste Instanz der Ereignis-und (scheinbar) keine information darüber, Wann die nächste Instanz ist.

So, ich bin einfach ein bisschen dichten? Gibt es eine Möglichkeit zu zeigen, was ich will, einfach hacken über die XML-API?

Oder müsste ich mehr Glück durch iCal? Ich habe noch nie getan, alle iCal mit PHP, so, wenn Sie, bitte haben, schlagen alle libs, die Sie verwendet haben, um die Dinge einfacher für sich selbst.

Edit: Dank für die Antwort, ich habe die Zend Gdata-pack (die, zum Glück, ist zu trennen, um den rest des Zend Framework). Tun, was ich brauche, war so einfach wie diese:

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

Das sollte Sie eine Woche im Wert von events (ja setStartMax ist exklusiv, sodass die Einstellung es 8 Tage in der Zukunft erforderlich ist).

Hoffe, das hilft jemand in der Zukunft.

InformationsquelleAutor Oli | 2009-05-12
Schreibe einen Kommentar