使用PHP中的订阅选项将日历公开为iCal

使用PHP中的订阅选项将日历公开为iCal,php,mysql,calendar,webdav,webcal,Php,Mysql,Calendar,Webdav,Webcal,我有一个PHP应用程序,每个用户都有自己的关联事件 我想做的是以类似于facebook上的事件的方式公开他的事件,facebook上的事件以webcal://www.facebook.com/ical/b.php?uid=123456789&key=ASD123ASD123ASD每当有新事件发生时,它都会自动传播到我的日历中,我已将其添加到我的谷歌日历中 我要做的是在url上公开此日历,如http://whatever.org/someLongUniquePerUserIdentifier.ic

我有一个PHP应用程序,每个用户都有自己的关联事件

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

我要做的是在url上公开此日历,如
http://whatever.org/someLongUniquePerUserIdentifier.ics

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

由于我找不到任何可靠的文档来源,我尝试用不同的关键字在谷歌上搜索很多内容,只被引导到像DAVical、sabredav等webdav服务器

我已经在我的服务器上安装了DAVical,但我已经正确安装了服务器,但不知道如何在我想要的url上公开MySQL数据库中的事件,客户端将订阅该url

sabredav也一样,只是我还没有试着让它工作,因为我看不到任何使用dav服务器将我的事件发布到世界上的文档化方法

我基本上被困在一个地方,我在PHP中使用ics导出,日历客户端不会要求更新,而运行的CalDAV服务器可能会被客户端要求更新,但没有要返回的数据

有什么想法吗

编辑的问题:


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

RFCs和中定义了.ics格式。您可以自己实现输出。但由于它包含诸如UTC日期时间之类的棘手信息,所以在使用库时您可能会更加健壮

订阅您的活动无非是将您的url添加到日历应用程序,该应用程序将对其进行轮询以获取更改。删除事件可能不会将其从日历中删除,应将其更改为“已取消”

我没有任何PHP库的格式经验,但会得到你很多。它看起来像是一个很好的工具,正在尝试


如果你不相信我:

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

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

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

[……]

注意:ICS提要中的更改可能需要8小时才能反映在您的谷歌日历中

从那以后一直是这样

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

因此,如果
事实并非如此,您只需将ics资源的url添加到日历中,它就会自动更新
,那么这可能与
webcal
uri方案是非官方的,文档中充满了未知因素有关



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

如果我没有弄错的话,您似乎只需要从
http://whatever.org/someLongUniquePerUserIdentifier.ics
webcal://whatever.org/someLongUniquePerUserIdentifier.ics


webcal协议应该触发日历软件中的“订阅”操作。如果您看到它下载了一个文件,那么它就不会订阅。

谢谢您的回答,但事实并非如此,您只需将ics资源的url添加到您的日历中,它就会自动更新。我已经尝试公开ICS文件并对其进行修改(如上所述),而不会将更改传播到日历中。我也没有问题生成iCal,这也是我在问题中提到的。谢谢你的更新。问题是,“可能需要8个小时”,这让我觉得这些变化根本没有传播。但是如果您想要即时单向同步,该怎么办?@elwhis大多数客户端都有刷新功能,不知道谷歌是否提供了刷新功能。@elwhis当然,您可以开始标准化。然后成为采用的倡导者,然后希望你的用户群更新它的客户。但是为什么你需要即时更新呢?您只需要及时更新您的用户,以备下次使用event@NinoŠkopac首先,听起来像是一个问题,而不是评论第二点:根据我在谷歌上搜索到的信息,我确信我需要一些CalDAV服务器,以便同步工作。简单地更改方案是行不通的,这是我尝试过的第一件事之一。在没有CalDAV服务器的情况下,我肯定能让同步正常工作。我只是生成一个.ics文件并使用webcal://链接到它。单击链接时,iCal应用程序将打开并打开“订阅”对话框,而不是“导入”对话框(wh