Creé un sitio en PHP 5 y MySQL con una tabla que realiza un seguimiento de las sesiones fotográficas programadas. Quiero enviar un feed de esos "eventos" programados a un archivo ical.Dynamic ical creado a partir de una base de datos que no funciona
Originalmente asked this question y obtuve una buena respuesta de S. Gehrig. Obtuve un archivo de muestra funcionando y actualicé regularmente en Google Calendar cada vez que ajusté el archivo manualmente en Dreamweaver. Sin embargo, ahora que he agregado el PHP dinámico extrayendo de la base de datos, no funcionará.
Aquí está el PHP:
<?php
require_once('../../_includes/initialize.php');
$ical = " BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN ";
$slots = Slot::find_all();
foreach($slots as $slot) {
$job = Job::find_by_id($slot->job_id);
$start_stamp = strtotime($slot->start);
$end_stamp = strtotime($slot->endtime);
$dtstart = gmdate('Ymd', $start_stamp).'T'. gmdate('His', $start_stamp) . "Z"; // converts to UTC time
$dtend = gmdate('Ymd', $end_stamp).'T'. gmdate('His', $end_stamp) . "Z"; // converts to UTC time
$summary = $job->title;
$ical .= " BEGIN:VEVENT
UID:" . $slot->id . "@homewoodphoto.jhu.edu
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:" . $dtstart . "
DTEND:" . $dtend . "
SUMMARY:" . $summary . "
END:VEVENT ";
}
$ical .= " END:VCALENDAR";
//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=homewoodphoto_master.ics');
echo $ical;
exit;
?>
La salida de este archivo es exactamente el mismo que el manual, la versión modificable que he de trabajar, por lo que yo puedo decir. ¿Alguien puede ver por qué esto no está funcionando?
PD Aquí está el código del archivo que está funcionando - Acabo de publicarlo en mi servidor y suscrito a través de la URL en Google Calendar. Cuando codifiqué en el segundo evento, apareció brevemente en Google Calendar por sí mismo.
<?php
$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:20090925T170000Z
DTEND:20090928T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
BEGIN:VEVENT
UID:" . md5(uniqid(mt_rand(), true)); . "@yourhost.test
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:20090929T170000Z
DTEND:20090930T035959Z
SUMMARY:Camping Trip
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;
?>
HELP!
Un comentarista sugirió que realice una prueba quitando los encabezados y haciendo eco de la varilla $ ical. Aquí están los resultados de esa prueba, con saltos de línea agregados para su conveniencia:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20090929T212141Z
DTSTART:20091001T230000Z
DTEND:20091001T230000Z
SUMMARY:little title
END:VEVENT
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20090929T212141Z
DTSTART:20090926T230000Z
DTEND:20090927T010000Z
SUMMARY:A big photo shoot
END:VEVENT
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20090929T212141Z
DTSTART:20091003T230000Z
DTEND:20091004T010000Z
SUMMARY:A big photo shoot
END:VEVENT
END:VCALENDAR
¡Gracias!
En Google Calendar, aparece un error con el título "Error de configuración" y texto: "No pudimos analizar el calendario en la url solicitada". – rhodesjason
Entourage no lo abrirá en absoluto e iCal dice: "Este archivo de calendario no se puede leer. No se han agregado eventos a su calendario de iCal". – rhodesjason