Estoy en el proceso de crear un blog para alguien. Quieren obtener una gran cantidad de datos e integrarlos de manera ajustada en el diseño, por lo que los widgets estándar son un no-no. Eso ha estado bien hasta ahora.Obtener eventos de Google Calendar en PHP
Tienen un Google Calendar de acceso público con varios eventos y quiero obtener los próximos 5 eventos (desde "ahora" en adelante) y mostrar el título del evento, cuando se inicia esa instancia del evento, su ubicación y un enlace al elemento gcal.
Por lo que puedo ver, hay tres opciones para capturar feeds gcal: XML, ical o HTML (que contiene algo realmente impactante JSON). XML parece ser la elección lógica, ¿verdad?
Bueno, la fuente XML es (después de la descripción de la fuente del átomo) en realidad solo un montón de HTML faffy. Analizar esto es posible pero es un gran dolor en la parte posterior porque los eventos recurrentes (de los cuales hay varios en el calendario) solo muestran la primera instancia de ese evento y (aparentemente) no hay información sobre cuándo será la siguiente instancia.
Entonces, ¿estoy siendo un poco denso? ¿Hay alguna forma de mostrar lo que quiero simplemente piratear a través de XML API?
¿O tendré mejor suerte con iCal? Nunca he hecho iCal con PHP, así que, si tiene, sugiera cualquier biblioteca que haya utilizado para simplificar las cosas.
Editar: gracias a la respuesta, he descargado el paquete de Zend Gdata (que, afortunadamente, es independiente al resto del Zend Framework). Haciendo lo que necesidad era tan fácil como esto:
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
Eso debe conseguir que el valor de una semana de eventos (sí setStartMax es exclusiva lo que establecer que 8 días en el futuro se requiere).
Espero que esto ayude a alguien más en el futuro.
Vi esto antes de preguntar, pero estaba asustado por el "Zend" en el nombre. Ahora que has dicho que no necesito todo el marco de clud, le daré una mirada adecuada. Gracias. – Oli