Ho un file XML con seminari che vorrei alimentare per google-calendar. Il file XML è gestito da qualcun altro e viene aggiornato regolarmente, quindi mi piacerebbe farlo in un modo che google acquisisce automaticamente queste modifiche.Feed XML a Google Calendar
Non ho molta esperienza con questo genere di cose quindi spero che qualcuno possa indicarmi la giusta direzione.
Questo è un esempio dell'XML che desidero elaborare.
(file 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>
Il modo più ovvio per raggiungere questo obiettivo, direi, sta utilizzando un foglio di stile XSLT che elabora i dati XML e costruisce alcuni file di Google -Calendario può leggere. Ho un sito web/server in cui posso inserire questo file XSL in modo ideale, spero di poterlo fare con un solo upload del file giusto.
Il foglio XSL che ho assomiglia a questo.
(file 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>
Questo funziona se elaborare il file XML, pipe a un iCal file (xsltproc seminars.xml > mycal.ics
), e importarlo in qualche calendario google-calendario. La risultante mycal.ics
assomiglia a questo
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
Ora, il problema è che (1) google non elabora l'XML, generando così un errore su l'importazione e (2) Io non sono sicuro se questo metodo potrebbe automaticamente " afferra le modifiche "poiché richiederebbe di ricaricare l'XML occasionalmente.
Quindi, c'è un modo per rendere google (o il server web) elaborare questo file in modo che sia riconosciuto come un file iCal, e mantenuto aggiornato?
Infine, un problema minore è anche che l'XML originale ha un file XSL diverso all'interno. C'è un modo semplice per creare qualcosa come un link simbolico sul mio sito web in questo file, o includere l'XML senza l'intestazione in modo che io possa semplicemente sostituire l'XSL originale con il mio?