xml csv xslt

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">&#13;&#10;</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?