8

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

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

我想要做的是在一个 url 上公开这个日历,例如http://whatever.org/someLongUniquePerUserIdentifier.ics.

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

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

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

与 sabredav 相同,除了我没有尝试让它工作的事实,因为我看不到使用任何 dav 服务器将我的事件发布到世界的任何记录方式。

我基本上被困在一个地方,我在 PHP 中工作 ics 导出,日历客户端不会要求更新,而客户端可能会要求更新,但没有数据要返回。

有什么想法吗?

编辑问题:

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

4

2 回答 2

8

如果我没记错的话,您似乎只需将链接从更改http://whatever.org/someLongUniquePerUserIdentifier.icswebcal://whatever.org/someLongUniquePerUserIdentifier.ics

webcal 协议应该在您的日历软件中触发“订阅”操作。如果您看到它下载文件,那么它没有订阅。

于 2014-04-28T04:16:58.067 回答
6

.ics 格式在 RFC 55456868中定义。你可以自己实现你的输出。但由于它包含 UTC 日期时间等棘手的部分,因此在使用库时可能会更加健壮。

订阅您的活动只不过是将您的网址添加到日历应用程序中,该应用程序将对其进行轮询以进行更改。删除事件可能不会将其从日历中删除,应该将其状态更改为 CANCELLED。

我对这种格式的任何 PHP 库都没有经验,但是用谷歌搜索它会给你很多。看起来Drupal 项目正在讨论它并正在尝试iCalcreator


如果你不相信我:

外表

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

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

谷歌日历

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

[...]

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

从那以后就一直这样

回程

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

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


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

于 2014-04-24T13:42:00.647 回答