【问题标题】:Feed XML to Google Calendar将 XML 馈送到 Google 日历
【发布时间】:2015-10-08 17:49:26
【问题描述】:

我有一个 XML 文件,其中包含我想提供给 google-calendar 的研讨会。 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 文件 (xsltproc seminars.xml &gt; 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 替换原始 XSL?

【问题讨论】:

    标签: xml csv xslt


    【解决方案1】:

    最简单的解决方案可能是在您的 Web 服务器上创建一个从 xml 转换为 ical 的 CGI。如果你的 web 服务器在 Linux 上运行,那么 CGI 可以像下面的文件一样简单(我称之为seminars

    #!/usr/bin/sh
    echo Content-type: text/calendar
    echo
    /usr/bin/xsltproc ical.xsl seminars.xml 2> /dev/null
    

    此 CGI 脚本由 Bourne shell 处理。这是由第一行指定的。以下 2 行使用 ical 日历的媒体类型(mime 类型)最终确定 HTTP 标头。最后一行使用您的 XSLt 转换进行转换。请注意,由于处理指令导致的错误将被忽略(重定向到 /dev/null)。

    请注意,您的服务器必须配置为运行 CGI。我在 Apache 2 上对其进行了测试,需要

     chmod 755 seminars          # make CGI file executable
     chmod . 711                 # close directory to others (suexec)  
    

    我还在目录中创建了一个.htacces$ 文件,以确保将seminars 脚本作为CGI 处理

     <Files seminars>
      SetHandler cgi-script
     </Files>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 2011-11-06
      • 2012-04-22
      • 1970-01-01
      相关资源
      最近更新 更多