iCal:通过webcal://将事件添加到日历

时间:2019-03-11 20:02:26

标签: php outlook icalendar webcal

好吧,我创建了一个litle脚本来生成iCal事件,并使用webcal协议将其自动添加到日历中。

该脚本的工作方式如下:我将ical-generator.php文件托管在服务器上,并通过在开头添加webcal来发送包含必要信息的url。

webcal://www.test.com/ical-generator.php?id=66038&titulo=Teste&data-inicio=20190311&data-final=20190312&local=Teste&descricao=Lorem Ipsum dolor&url=http://www.test.com/

但是,当我将事件导入日历时,这个唯一的事件最终被添加为新日历,而不是作为单个事件添加到用户的现有日历中。

这是脚本:

    <?php
header("Content-type: text/calendar; charset=utf-8");
header("Content-Disposition: inline; filename=\"teste-evento-".$_GET['titulo'].".ics" ."\"");

echo "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//TESTE//NONSGML Teste//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:".$_GET['id']."-teste.com.br
ORGANIZER;CN=TESTE:MAILTO:teste@teste.com.br
SUMMARY:".$_GET['titulo']."
STATUS:CONFIRMED
DTSTART:".$_GET['data-inicio']."
DTEND:".$_GET['data-final']."
DTSTAMP:".date('Ymd').'T'.date('His')."
LOCATION:".$_GET['local']."
DESCRIPTION:".$_GET['descricao'].".\nSaiba mais em: ".$_GET['url']."
URL:".$_GET['url']."
CLASS:PUBLIC
TRANSP:TRANSPARENT
PRIORITY:5
SEQUENCE:0
X-MICROSOFT-CDO-IMPORTANCE:1
END:VEVENT
END:VCALENDAR";

1 个答案:

答案 0 :(得分:0)

(请注意,webcal是非官方URI(确实得到很好的支持,但是官方uri是http / s,并且所有日历应用程序都应支持。请参见https://tools.ietf.org/html/rfc5545#section-3.8.4.6https://en.wikipedia.org/wiki/Webcal。)< / p>

现在,应用程序如何处理ics文件或URL通常取决于用户的操作。 EG:在Google日历中,如果单击添加日历>导入,则google将提供默认的主日历以导入到其中,或允许人们从其他日历中进行选择。

但是,如果单击一次从URL添加日历->,则Google日历将“订阅”-即在“其他日历”下创建一个新的日历(不能将其“导入”其他事件)

如果附加到电子邮件,大多数应用程序将仅预期一个事件,并提示一个事件添加到其默认日历中。

仔细检查您在测试中做了什么,请确保对每个事件使用UNIQUE UID,以确保应用程序像新事件一样重新测试(或删除上一个事件)。有些人很聪明地说“嘿,这是同一事件”,这会使测试变得混乱。