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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Andere Möglichkeit ist die Verwendung des Zend-Google-Kalender-Bibliothek, es ist ein separater Teil des zend framework, so dass Sie nicht brauchen, die gesamte zend framework
http://framework.zend.com/manual/en/zend.gdata.calendar.html
ist es nicht schwer, sobald Sie einen Blick auf die Beispiele.
Falls es hilft jemand anderes, ich habe herausgefunden, wie man Kalender von anderen als den Standardwert. Wenn Sie in Ihrem google-Kalender und look-up-Kalender-Einstellungen", auf der Unterseite gibt es eine Kalender-ID, die formatiert ist, wie eine richtig lange E-Mail-Adresse.(Beispiel: [email protected]) Verwenden, die mit $query->setUser() zu verwenden, bestimmte Kalender.
Als ein heads-up für jeden, der den code
echo $event;
haben nicht angezeigt, nichts für mich, so dass ich dachte, dass die Abfrage fehlschlägt.Hier ist ein snippet, dass sollte etwas drucken: