我目前正在研究在网页上显示来自多个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 Events构建ICS文件,我更愿意使用它们。
答案 0 :(得分: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';
?>
答案 1 :(得分:0)
我能够通过谷歌挖掘一些PHP库,全部用于PHP,我打赌还有更多:
答案 2 :(得分:0)
我还想为单个事件生成.ics文件。我不想弄乱PHP,所以我打算使用grymala的小费。不幸的是,我不知道我想导出的事件的calendarID,所以我导出了所有gcal的日历并编辑了生成的文件,以便它只包含日历标题,基础和vevent lsiting。我还删除了日历名称,因为我不知道这是否必要。 我没有找到像gymala建议的那样获取特定日历的URL的方法,但我确实根据help text找到了这个。
在页面左侧的日历列表中,移动鼠标 在您希望从中导出的日历上。
您会在日历名称旁边看到一个下拉箭头。单击下拉箭头并选择日历设置。 (或者,单击“我的日历”旁边的下拉箭头,选择“设置”,然后从列表中单击相应的日历。)
点击“私人地址”中的“ICAL”按钮。页面底部的部分,然后单击显示的URL。
将导出的文件保存到计算机上的所需文件夹中。 ,可能将该URL粘贴到另一个浏览器窗口,复制窗口文本,然后将其粘贴到编辑器中。
答案 3 :(得分:0)
我意识到这是多么的陈旧-但它已接近如何获取单个事件的ics的阴险搜索引擎排名之首-以上内容对我而言都无济于事,也许不足为奇了。 / p>
我的解决方案-为导出单个事件创建一个特殊的日历-将要导出的事件复制到该日历中-导出日历-然后删除该事件,以便下次使用它是干净的-我能够将单个事件导入到T'bird。
我意识到导出其中仅包含一个事件的日历与导出单个事件(或者也许是导出)并不完全相同,但这似乎是一个有用的解决方法。