我目前正在研究在网页上显示来自多个Google日历的事件列表的可能性。目前,我正在使用WordPress的Google Calendar Events插件来显示网站上的事件(防火墙后面的开发网站,所以我无法共享链接);但是我想知道是否有任何简单的方法可以为每个单独的事件动态生成ICS文件。
我们希望允许网站访问者将个别事件添加到其日历中,但Google Calendar Data API似乎只提供以ICS格式下载整个日历的选项。我尝试将带有eid(事件ID)的查询字符串附加到ICAL Feed地址的末尾,但仍会打开标准Google ICAL Feed,其中包含当前包含在日历中的所有事件。
我有点熟悉从头开始动态构建ICS文件,过去曾经做过一次,从本地Perl日历程序中提取事件并为每个事件生成ICS文件;但如果有任何预先构建的API或PHP类已经设置为从各个Google Calendar事件构建ICS文件,我更愿意使用它们。
它真的很简单它只是一个页面,试试这个:(当然,你需要用自己的变量代替......)
<?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';
?>
一些PHP库我能够通过谷歌挖掘,全部用于PHP,我打赌还有更多:
我还想为单个事件生成一个.ics文件。我不想乱用PHP所以我打算使用grymala的提示。不幸的是,我不知道我想要导出的事件的calendarID,所以我导出了所有gcal的日历并编辑了生成的文件,以便它只包含日历标题,基础和vevent lsiting。我还删除了日历名称,以为我不知道是否有必要。我从来没有找到一种方法来获取特定日历的URL作为gymala建议但我确实发现这基于这个help text。
我意识到这是多么陈旧 - 但它接近于阴险的搜索引擎排名如何获得个别事件的ics - 上述没有一个对我有用,也许并不奇怪这个线程的年龄。
我的解决方案 - 为个别事件的导出创建一个特殊日历 - 复制您想要导出到该日历的事件 - 导出日历 - 然后删除事件以便下次清理 - 我能够将个别事件导入T'bird 。
我意识到导出一个仅包含1个事件的日历与导出单个事件(或者可能是它)不完全相同,但它似乎是一个有用的工作。