Php 将单个Google日历事件导出到ICS?
我目前正在研究在一个网页上显示来自多个谷歌日历的事件列表的可能性。目前,我正在使用WordPress的Google日历事件插件在网站上显示事件(开发网站位于防火墙后面,因此我无法共享链接);但我想看看是否有任何简单的方法可以为每个单独的事件动态生成ICS文件 我们希望允许网站访问者将个人事件添加到他们的日历中,但谷歌日历数据API似乎只提供了以ICS格式下载整个日历的选项。我试图简单地在ICAL提要地址的末尾添加一个带有eid(事件ID)的查询字符串,但这仍然会打开标准的Google ICAL提要,其中包含当前日历上包含的所有事件Php 将单个Google日历事件导出到ICS?,php,wordpress,google-calendar-api,icalendar,Php,Wordpress,Google Calendar Api,Icalendar,我目前正在研究在一个网页上显示来自多个谷歌日历的事件列表的可能性。目前,我正在使用WordPress的Google日历事件插件在网站上显示事件(开发网站位于防火墙后面,因此我无法共享链接);但我想看看是否有任何简单的方法可以为每个单独的事件动态生成ICS文件 我们希望允许网站访问者将个人事件添加到他们的日历中,但谷歌日历数据API似乎只提供了以ICS格式下载整个日历的选项。我试图简单地在ICAL提要地址的末尾添加一个带有eid(事件ID)的查询字符串,但这仍然会打开标准的Google ICAL提
我对从头开始动态构建ICS文件有些熟悉,过去也做过一次,从本地Perl日历程序中提取事件并为每个事件生成ICS文件;但是,如果有任何预先构建的API或PHP类已经被设置为从单个Google日历事件构建ICS文件,我更愿意使用它们。它太简单了,只是一个页面,真的,试试这个:(当然,你需要替换你自己的变量…)
我通过谷歌找到了一些PHP库,都是为了PHP,我打赌还有更多:
- ()
我意识到这是多么陈旧——但它几乎排在了这个阴险的搜索引擎关于如何获得某个事件的ics的排名的首位——以上这些对我来说都不起作用,也许这条线索有多古老也就不足为奇了 我的解决方案-为导出单个事件创建一个特殊的日历-复制要导出到该日历中的事件-导出日历-然后删除事件,以便下次能保持干净-我能够将单个事件导入T'bird
我意识到导出只有一个事件的日历与导出单个事件(或者,可能是这样)并不完全相同,但这似乎是一个有用的解决方法。有问题吗?谢谢提示。这看起来很简单。我还发现谷歌似乎确实为单个事件生成了ICS文件;但我只是使用了错误的URL结构(似乎没有任何文档记录)。我想如果你使用像:
http://google.com/calendar/ical/[calendarID]/[visibility,即“public”]/[projection,即full]/[eventID]。ics
您将获得该事件的ics文件。自动生成的ICS文件包含有关源日历的信息,因此如果要将其作为约会打开,则必须删除以X-WR-CALNAME:
开头的行。还有更多的测试要做。@cgrymala我试着用我的私人日历url让它工作。然而,要么我不明白什么是eventID(我想它可能是我从完整的日历ics中得到的UID),要么是有其他问题,每次都会导致404。您能否确认这在私有可见性下有效,以及如何获得正确的eventID?
<?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';
?>