Feed XML a Google Calendar
csv xslt (1)
La solución más fácil es probablemente crear un CGI en su servidor web que convierta de xml a ical. Si su servidor web se ejecuta en Linux, entonces el CGI puede ser tan simple como el siguiente archivo (lo llamé seminars
)
#!/usr/bin/sh
echo Content-type: text/calendar
echo
/usr/bin/xsltproc ical.xsl seminars.xml 2> /dev/null
Este script CGI es procesado por el shell Bourne. Eso está especificado por la primera línea. Las siguientes 2 líneas finalizan el encabezado HTTP con el tipo de medio (tipo mime) de los calendarios ical. La última línea realiza la conversión con su transformación XSLt. Tenga en cuenta que los errores debidos a la instrucción de procesamiento se ignoran (se redirigen a / dev / null).
Tenga en cuenta que su servidor debe estar configurado para ejecutar CGI. Lo probé en Apache 2 y necesitaba
chmod 755 seminars # make CGI file executable
chmod . 711 # close directory to others (suexec)
También creé un archivo .htacces$
en el directorio para asegurarme de que el script de seminars
se procesa como un CGI
<Files seminars>
SetHandler cgi-script
</Files>
Tengo un archivo XML con seminarios que me gustaría publicar en google-calendar. El archivo XML es mantenido por otra persona y se actualiza regularmente, por lo que me gustaría hacer esto de forma que google automáticamente tome estos cambios.
No tengo mucha experiencia con este tipo de cosas, así que espero que alguien pueda señalarme en la dirección correcta.
Este es un ejemplo del XML que quiero procesar.
(Archivo XML: "seminars.xml")
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="ical.xsl"?>
<seminars>
<lastupdate>20150707</lastupdate>
<seminar>
<speaker>A. Einstein</speaker>
<location>Zurich</location>
<date>20150607</date>
<time>15:45:00</time>
<university>Princeton</university>
<abstract>
<title>On the structure of generalized patent office spaces</title>
<content>To be announced.</content>
</abstract>
</seminar>
</seminars>
La forma más obvia de lograr esto, diría yo, es usar una hoja de estilo XSLT que procese el XML y construya algún archivo que google-calendar pueda leer. Tengo un sitio web / servidor donde puedo poner este archivo XSL de manera ideal, espero poder hacerlo con solo una carga del archivo correcto.
La hoja XSL que tengo tiene este aspecto.
(Archivo XSL: "ical.xsl")
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1" media-type="text/calendar"/>
<xsl:variable name="crlf"> </xsl:variable>
<xsl:template match="/">BEGIN:VCALENDAR<xsl:value-of select="$crlf"/>
CALSCALE:GREGORIAN<xsl:value-of select="$crlf"/>
VERSION:2.0<xsl:value-of select="$crlf"/>
SEQUENCE:1<xsl:value-of select="$crlf"/>
X-WR-TIMEZONE:Europe/Paris<xsl:for-each select="seminars/seminar"><xsl:value-of select="$crlf"/>
BEGIN:VEVENT<xsl:value-of select="$crlf"/>
LOCATION:<xsl:value-of select="location"/><xsl:value-of select="$crlf"/>
DTSTART:<xsl:value-of select="date"/>T154500<xsl:value-of select="$crlf"/>
DTEND:<xsl:value-of select="date"/>T164500<xsl:value-of select="$crlf"/>
DESCRIPTION:seminar by <xsl:value-of select="speaker"/><xsl:value-of select="$crlf"/>
SUMMARY:<xsl:value-of select="abstract/title"/><xsl:value-of select="$crlf"/>
END:VEVENT<xsl:value-of select="$crlf"/></xsl:for-each>
END:VCALENDAR<xsl:value-of select="$crlf"/>
</xsl:template>
</xsl:stylesheet>
Esto funciona si proceso el archivo XML, lo xsltproc seminars.xml > mycal.ics
a un archivo iCal ( xsltproc seminars.xml > mycal.ics
) y lo importo a algún calendario en google-calendar. El resultado mycal.ics
ve así
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
VERSION:2.0
SEQUENCE:1
X-WR-TIMEZONE:Europe/Paris
BEGIN:VEVENT
LOCATION:Zurich
DTSTART:20150607T154500
DTEND:20150607T164500
DESCRIPTION:seminar by A. Einstein
SUMMARY:On the structure of generalized patent office spaces
END:VEVENT
Ahora, el problema es que (1) Google no procesa el XML, generando un error al importarlo y (2) no estoy seguro de si este método "captará cambios" automáticamente ya que requeriría volver a cargar el XML ocasionalmente.
Entonces, ¿hay alguna manera de hacer que google (o el servidor web) procese este archivo para que se reconozca como un archivo iCal y lo mantenga actualizado?
Finalmente, un problema menor es también que el XML original tiene un archivo XSL diferente dentro. ¿Hay alguna manera simple de hacer algo como un enlace simbólico en mi sitio web a este archivo, o incluir el XML sin el encabezado para que pueda simplemente reemplazar el XSL original por el mío?