Frage

Ich bin in dem Prozess ein Blog für jemanden zu schaffen. Sie wollen in einer Menge von Daten ziehen und integrieren sie ganz fest in das Design, so Standard-Widgets sind ein No-No. Das ist schon bisher in Ordnung.

Sie haben einen öffentlichen Zugang Google Kalender mit verschiedenen Veranstaltungen auf, und ich mag die nächsten 5 Veranstaltungen greifen (von „jetzt“ an) und die Ereignistitel angezeigt werden, wenn die Instanz des Ereignisses beginnt, seine Lage und einen Link zum gcal Artikel.

Von dem, was ich sehen kann, gibt es drei Möglichkeiten für die Ergreifung gcal-Feeds: XML, isch oder HTML (mit einigen wirklich JSON Whack). XML scheint, wie die logische Wahl, nicht wahr?

Nun, der XML-Feed ist (nach der Atom-Feed Beschreibung) eigentlich nur eine Menge faffy HTML. Parsen dies ist möglich, aber es ist ein großer Schmerz in den Hintern, weil wiederkehrender Ereignisse (von denen es auf dem Kalender mehrere sind) nur die erste Instanz dieses Ereignisses zeigen und (scheinbar) keine Informationen darüber, wann die nächste Instanz ist.

So bin ich nur ein bisschen dicht zu sein? Gibt es eine Möglichkeit zu zeigen, was ich will nur über den XML-API Hacking?

Oder habe ich mehr Glück durch iCal? Ich habe nie iCal mit PHP getan, wenn Sie haben, können Sie alle Libs vorschlagen, dass Sie verwendet haben, Dinge zu machen, einfacher für sich selbst.

Edit: dank der Antwort, ich das Zend Gdata Pack heruntergeladen (die, Gott sei Dank, ist getrennt vom Rest des Zend Framework). Zu tun, was ich brauche, ist 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('your_user@googlemail.com');

$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 sollten Sie eine Woche im Wert von Event (ja setStartMax exklusiv ist, so dass es 8 Tage in der Zukunft Einstellung erforderlich).

Hope, das hilft jemand anders in der Zukunft.

War es hilfreich?

Lösung

Eine andere Möglichkeit ist es, 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 ist nicht so schwer, wenn Sie einen Blick auf die Beispiele haben.

Andere Tipps

Im Fall hilft es jemand anderes, ich herausgefunden, wie Kalender anders als der Standard zu bekommen. Wenn Sie in Ihrem Google Kalender gehen und Kalendereinstellungen sehen, auf der Unterseite befindet sich ein Kalender-ID, die wie eine wirklich lange E-Mail-Adresse formatiert ist. (Beispiel: adg5jcq8gk7lsp6rrbmrm8c@group.calendar.google.com) verwenden, die mit $ query- > setUser (), dass bestimmte Kalender zu verwenden.

Als ein Heads-up zu jemand den Code verwenden, echo $event; nichts für mich angezeigt hat, so dachte ich, die Abfrage versagte.

Hier ist ein Ausschnitt, der etwas gedruckt werden soll:

foreach ($eventFeed as $event) {
  echo $event->title->text . '<br />';
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top