Mam plik XML z seminariami, które chciałbym podać do google-kalendarza. Plik XML jest obsługiwany przez kogoś innego i jest regularnie aktualizowany, więc chciałbym zrobić to w taki sposób, że Google automatycznie chwyta te zmiany.Feed XML do kalendarza Google
Nie mam zbyt dużego doświadczenia w tego typu sprawach, więc mam nadzieję, że ktoś wskaże mi właściwy kierunek.
To jest przykład XML, który chcę przetworzyć.
(plik 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>
Najbardziej oczywistym sposobem osiągnięcia tego celu, powiedziałbym, jest przy użyciu arkusza stylów XSLT, który przetwarza XML i buduje jakiś plik Google -calendar może czytać. Mam stronę internetową/serwer, na którym mogę umieścić ten plik XSL, więc najlepiej byłoby mieć nadzieję, że będę mógł to zrobić za pomocą jednego przesłania właściwego pliku.
Arkusz XSL wyglądam tak.
(plik 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>
Działa to gdybym przetworzyć pliku XML, rury go do akt iCal (xsltproc seminars.xml > mycal.ics
) i zaimportować go do kalendarza w jakimś kalendarz Google. Powstały mycal.ics
wygląda to
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
Teraz problemem jest to, że (1) google nie przetwarza XML, generując błąd przy imporcie i (2) nie jestem pewien, czy ta metoda będzie automatycznie " chwyć zmiany ", ponieważ wymagałoby to od czasu do czasu przeładowania XML.
Czy istnieje sposób, aby google (lub serwer WWW) przetworzył ten plik, aby był rozpoznawany jako plik iCal, i utrzymał go na bieżąco?
Wreszcie drobnym problemem jest również to, że oryginalny plik XML zawiera inny plik XSL. Czy istnieje prosty sposób, aby zrobić coś takiego jak dowiązanie symboliczne na mojej stronie internetowej do tego pliku, lub dołączyć XML bez nagłówka, aby móc po prostu zastąpić oryginalny XSL moim?