Saltar al contenido

¿Cómo puedo usar PHP para publicar dinámicamente un archivo ical para que lo lea Google Calendar?

Solución:

Esto debería ser muy simple si Google Calendar no requiere la *.ics-extension (que requerirá una reescritura de URL en el servidor).

$ical = "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:" . md5(uniqid(mt_rand(), true)) . "@yourhost.test
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR";

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=calendar.ics');
echo $ical;
exit;

Eso es esencialmente todo lo que necesita para que un cliente piense que está sirviendo un archivo iCalendar, aunque puede haber algunos problemas relacionados con el almacenamiento en caché, la codificación de texto, etc. Pero puedes empezar a experimentar con este sencillo código.

Una nota de experiencia personal además de la respuesta de Stefan Gehrig y la respuesta de Dave None (y la respuesta de mmmshuddup):

Tenía problemas de validación al usar ny PHP_EOL cuando usé el validador ICS en http://severinghaus.org/projects/icv/

Aprendí que tenía que usar r n para que se validara correctamente, así que esta fue mi solución:

function dateToCal($timestamp) {
  return date('YmdTgisZ', $timestamp);
}

function escapeString($string) {
  return preg_replace('/([,;])/','\$1', $string);
}    

    $eol = "rn";
    $load = "BEGIN:VCALENDAR" . $eol .
    "VERSION:2.0" . $eol .
    "PRODID:-//project/author//NONSGML v1.0//EN" . $eol .
    "CALSCALE:GREGORIAN" . $eol .
    "BEGIN:VEVENT" . $eol .
    "DTEND:" . dateToCal($end) . $eol .
    "UID:" . $id . $eol .
    "DTSTAMP:" . dateToCal(time()) . $eol .
    "DESCRIPTION:" . htmlspecialchars($title) . $eol .
    "URL;VALUE=URI:" . htmlspecialchars($url) . $eol .
    "SUMMARY:" . htmlspecialchars($description) . $eol .
    "DTSTART:" . dateToCal($start) . $eol .
    "END:VEVENT" . $eol .
    "END:VCALENDAR";

    $filename="Event-".$id;

    // Set the headers
    header('Content-type: text/calendar; charset=utf-8');
    header('Content-Disposition: attachment; filename=" . $filename);

    // Dump load
    echo $load;

Eso detuvo mis errores de análisis e hizo que mis archivos ICS se validaran correctamente.

Existe un excelente paquete eluceo / ical que le permite crear fácilmente archivos ics.

A continuación, se muestra un ejemplo de uso de los documentos:

// 1. Create new calendar
$vCalendar = new EluceoiCalComponentCalendar("www.example.com');

// 2. Create an event
$vEvent = new EluceoiCalComponentEvent();
$vEvent->setDtStart(new DateTime('2012-12-24'));
$vEvent->setDtEnd(new DateTime('2012-12-24'));
$vEvent->setNoTime(true);
$vEvent->setSummary('Christmas');

// Adding Timezone (optional)
$vEvent->setUseTimezone(true);

// 3. Add event to calendar
$vCalendar->addComponent($vEvent);

// 4. Set headers
header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename="cal.ics"');

// 5. Output
echo $vCalendar->render();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *