Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将单个Google日历事件导出到ICS?_Php_Wordpress_Google Calendar Api_Icalendar - Fatal编程技术网

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

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提

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

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


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

它太简单了,只是一个页面,真的,试试这个:(当然,你需要替换你自己的变量…)


我通过谷歌找到了一些PHP库,都是为了PHP,我打赌还有更多:

  • ()

我还想为单个事件生成一个.ics文件。我不想搞乱PHP,所以我打算使用grymala的技巧。不幸的是,我不知道要导出的事件的calendarID,因此我导出了所有gcal的日历,并编辑了结果文件,使其仅包含日历标题、基脚和vevent lsiting。我还删除了日历名,因为我不知道这是否必要。 我从来没有像gymala建议的那样找到一种获取特定日历url的方法,但我确实是基于此找到的

  • 在页面左侧的日历列表中,移动鼠标 在您要从中导出的日历上

  • 您将看到日历名称旁边出现一个下拉箭头。单击下拉箭头并选择日历设置。(或者,单击“我的日历”旁边的下拉箭头并选择“设置”,然后从列表中单击相应的日历。)

  • 单击页面底部“私人地址”部分中的ICAL按钮,然后单击显示的URL

  • 将导出的文件保存到计算机上所需的文件夹中,可能通过将该URL粘贴到另一个浏览器窗口、复制窗口文本并将其粘贴到编辑器中


  • 我意识到这是多么陈旧——但它几乎排在了这个阴险的搜索引擎关于如何获得某个事件的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';
    
    
    ?>