将单个 Google 日历事件导出到 ICS?

cgr*_*ala 6 php wordpress icalendar google-calendar-api

我目前正在研究在网页上显示多个 Google 日历的事件列表的可能性。目前,我正在使用 WordPress 的 Google 日历事件插件来显示网站上的事件(开发网站位于防火墙后面,因此我无法共享链接);但我想看看是否有任何简单的方法可以为每个单独的事件动态生成 ICS 文件。

我们希望允许网站访问者将单个事件添加到他们的日历中,但 Google 日历数据 API 似乎只提供以 ICS 格式下载整个日历的选项。我尝试简单地将带有 eid(事件 ID)的查询字符串附加到 ICAL 提要地址的末尾,但这仍然会打开标准的 Google ICAL 提要,其中包括日历中当前包含的所有事件。

我对从头开始动态构建 ICS 文件有些熟悉,并且过去曾经做过一次,从本地 Perl 日历程序中提取事件并为每个事件生成 ICS 文件;但如果已经设置了任何预构建的 API 或 PHP 类来从各个 Google 日历事件构建 ICS 文件,我更愿意使用它们。

Cup*_*ups 3

它是如此简单,实际上只是一个页面,试试这个:(当然,你需要替换你自己的变量......)

<?php
    /*
    * generates calendar ics file
    */ 

if( 
    empty($_GET['summary']) || 
    empty($_GET['dtstart']) || 
    empty($_GET['dtend']) 
){
header ("Location: /diary/this-week") ;
exit();
} 

  header("Content-type: text/calendar");
  header("Content-Disposition: attachment; filename=".urlencode($_GET['summary']).'-'.time().".ics");
  header("Pragma: no-cache");
  header("Expires: 0");
  echo 'BEGIN:VCALENDAR
VERSION:2.0
PRODID:councilsites
METHOD:PUBLISH
BEGIN:VEVENT
URL:'. htmlentities( $_GET['url'] ) .'
UID:'. htmlentities( $_GET['url'] ) .'
SUMMARY:'. htmlentities( $_GET['summary'] ) .'
DTSTAMP:'. date('Ymd\THis\Z') .'
DTSTART:'. htmlentities( $_GET['dtstart'] ) .'
DTEND:'. htmlentities( $_GET['dtend'] ) .'
LOCATION:'. htmlentities( $_GET['location'] ) .' 
END:VEVENT
END:VCALENDAR';


?>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的提示。这看起来确实很简单。我还发现 Google 似乎确实为单个事件生成 ICS 文件;但我只是使用了错误的 URL 结构(它似乎没有在任何地方记录)。我认为,如果您使用如下 URL 结构:`http://google.com/calendar/ical/[calendarID]/[visibility ie 'public']/[projection ie full]/[eventID].ics`,您会得到一个事件的 ICS 文件。自动生成的 ICS 文件包含有关源日历的信息,因此如果您希望将其作为约会打开,则必须删除以“X-WR-CALNAME:”开头的行。还需要进行更多测试。 (4认同)