2009-05-12 16 views
11

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.

Respuesta

8

Otra opción es utilizar la biblioteca Zend Calendario Google, es una parte separada del Zend Framework por lo que no es necesario todo el Zend Framework

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

no es tan difícil una vez que echa un vistazo a los ejemplos.

+0

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

1

Como aviso a cualquiera que use el código, echo $event; no mostró nada para mí, así que pensé que la consulta estaba fallando.

Aquí hay un fragmento que se debe imprimir algo:

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

En caso de que ayuda a nadie más, me di cuenta de cómo conseguir calendarios distintos del defecto. Si accede a su calendario de Google y busca la configuración del calendario, en la parte inferior hay una ID de calendario con el formato de una dirección de correo electrónico realmente larga. (Ejemplo: [email protected]) Úselo con $ query- > setUser() para usar ese calendario específico.

+0

Gracias ... ¡he estado buscando en la web cómo hacerlo! –

Cuestiones relacionadas