feed XML para o Google Agenda [fechado]

1

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">&#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>

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.

    
por jaap 16.07.2015 / 14:03

0 respostas