канал XML в календарь Google

1376
jaap

У меня есть XML-файл с семинарами, который я хотел бы передать в Google-календарь. XML-файл поддерживается кем-то другим и регулярно обновляется, поэтому я хотел бы сделать это таким образом, чтобы Google автоматически собирал эти изменения. У меня нет особого опыта в таких вещах, поэтому я надеюсь, что кто-то может указать мне правильное направление.

Это пример XML, который я хочу обработать.

(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> 

Я бы сказал, что наиболее очевидным способом достижения этого является использование таблицы стилей XSLT, которая обрабатывает XML и создает файл, который может прочитать google-calendar. У меня есть веб-сайт / сервер, на котором я могу разместить этот XSL-файл, поэтому в идеале я надеюсь, что мне удастся сделать только одну загрузку нужного файла.

Лист XSL у меня выглядит следующим образом.

(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> 

Это работает, если я обработаю XML-файл, направлю его в iCal-file ( xsltproc seminars.xml > mycal.ics) и импортирую в какой-либо календарь в google-calendar. В результате mycal.icsвыглядит так

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 

Теперь проблема в том, что (1) Google не обрабатывает XML, таким образом генерируя ошибку при импорте, и (2) Я не уверен, что этот метод автоматически «захватит изменения», так как это потребовало бы периодической перезагрузки XML.

Итак, есть ли способ заставить Google (или веб-сервер) обрабатывать этот файл, чтобы он распознавался как файл iCal и поддерживал его актуальность?

Наконец, небольшая проблема заключается также и в том, что исходный XML содержит другой XSL-файл. Есть ли простой способ сделать что-то вроде символической ссылки на моем сайте на этот файл или включить XML без заголовка, чтобы я мог просто заменить исходный XSL своим?

Извините за длинный вопрос. Заранее спасибо.

1

0 ответов на вопрос