使用PHP中的订阅选项将日历显示为iCal

时间:2014-04-21 22:01:11

标签: php mysql calendar webdav webcal

我在PHP中有一个应用程序,每个用户都有自己的相关事件。

我想要做的是以类似于facebook上的事件的方式展示他的事件,这些事件以webcal://www.facebook.com/ical/b.php?uid=123456789&key=ASD123ASD123ASD格式提供网址,并且每当有新事件时,它会自动传播到我的日历。我已添加到我的谷歌日历中。

我想要做的是在http://whatever.org/someLongUniquePerUserIdentifier.ics等网址上公开此日历。

我尝试使用位于同一网址的简单文件来模拟事件生成脚本。这是一个由谷歌消费的ics文件,事件已被添加,但是当我更改了文件内容(删除了一个事件)=更改了资源时,谷歌日历应该订阅,更改根本就没有去看看gcal。

由于我无法找到任何可靠的文档来源,我尝试使用不同的关键字进行谷歌搜索,我只被引导到像DAVical,sabredav等webdav服务器。

我在我的服务器上安装了DAVical只是为了进入我正确安装服务器的状态但不知道如何在我想要的URL上公开我的MySQL数据库中的事件,这是客户订阅的。

与sabredav相同,除了事实,我还没有尝试过它,因为我无法看到使用任何dav服务器将我的事件发送到世界的任何记录方式。

我基本上陷入了这样一个地方,我在PHP中进行工作ics导出,日历客户端没有要求更新,而且运行的CalDAV服务器可能会被客户端要求更新,但没有数据要返回。

有什么想法吗?

已编辑的问题:

实现即时单向日历同步的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

.ics格式在RFC 55456868中定义。您可以自己实现输出。但由于它包含像UTC日期时间这样棘手的位,因此在使用库时可能会更强大。

订阅您的活动只不过是将您的网址添加到日历应用中,日历应用会轮询它以进行更改。删除活动可能无法将其从日历中删除,并将其status更改为已取消。

我对该格式没有任何PHP库的经验,但是googling for it会让你很多。它看起来像Drupal project is discussing it,正在尝试iCalcreator


如果你不相信我:

Outlook

  

向Outlook添加Internet日历订阅   Internet日历订阅是您在Outlook中下载和查看的日历。但是,与日历快照不同,Internet日历订阅会自动更新。

     

这些日历可以在人们托管日历的网站上找到。在这样的网站上,您可以单击链接以下载和订阅日历,或者有人可以通过电子邮件向您发送指向Internet日历订阅的链接。此链接是一个Internet网址,以webcal://开头,而不是http://,并以具有.ics文件扩展名的文件名结尾。

Google Calendar

  

从菜单中选择“按网址添加”。   以iCalendar格式查找Google日历的地址,或者如果您拥有来自其他应用程序(例如Apple的iCal)的日历的iCalendar地址,您也可以使用此地址。   在提供的字段中输入地址。

     

[...]

     

注意:ICS Feed中的更改最多可能需要8小时才能反映在您的Google日历中

以来一直如此

Wayback

  

[...]您还应将此日历视为应定期检查更改的内容,而不是一次导入的日历。简单但有效。

因此,如果it really isnt the case,where you just add url to your the ics resource to your calendar and it will automatically update,则可能与webcal uri-scheme非官方且IANA文档充满未知数这一事实相关。


如果您只想要单向同步,那么您就不需要DAV服务器。您只需要一台CalDAV服务器进行双向同步;如果您希望客户也更新服务器上的日历。

答案 1 :(得分:4)

如果我没弄错的话,您似乎只需要更改http://whatever.org/someLongUniquePerUserIdentifier.ics的链接 至 webcal://whatever.org/someLongUniquePerUserIdentifier.ics

网络协议应该触发"订阅"日历软件中的操作。如果您看到它下载文件,那么它就不会订阅。