Eu tenho um arquivo XML com seminários que gostaria de alimentar no google-calendar. O arquivo XML é mantido por outra pessoa e é atualizado regularmente, então eu gostaria de fazer isso de uma maneira que o Google agarre automaticamente essas alterações. Eu não tenho muita experiência com esse tipo de coisa, então espero que alguém possa me apontar na direção certa.
Este é um exemplo do XML que eu quero processar.
(arquivo 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>
A maneira mais óbvia de conseguir isso, eu diria, é usar uma folha de estilo XSLT que processa o XML e cria algum arquivo que o google-calendar pode ler. Eu tenho um site / servidor onde eu posso colocar este arquivo XSL tão idealmente que eu esperaria poder fazer com apenas um upload do arquivo correto.
A folha XSL que eu tenho é assim.
(arquivo 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>
Isso funciona se eu processar o arquivo XML, canalizá-lo para um arquivo iCal ( xsltproc seminars.xml > mycal.ics
) e importá-lo para algum calendário no google-calendar.
O mycal.ics
resultante é semelhante a este
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
Agora, o problema é que (1) o google não processa o XML, gerando um erro na importação e (2) não tenho certeza se esse método iria automaticamente "pegar mudanças" já que seria necessário recarregar o XML ocasionalmente .
Então, existe uma maneira de fazer o google (ou o servidor web) processar esse arquivo para que ele seja reconhecido como um arquivo iCal, e mantendo-o atualizado?
Finalmente, uma questão secundária é também que o XML original possui um arquivo XSL diferente. Existe uma maneira simples de fazer algo como um link simbólico no meu site para este arquivo, ou incluir o XML sem o cabeçalho para que eu possa substituir o XSL original pelo meu?
Desculpe pela longa pergunta. Desde já, obrigado.