ICS(iCal)发布/请求/取消


ICS (iCal) PUBLISH/REQUEST/CANCEL

我在从PHP生成的.ics文件中获取条目以进行更新时遇到了很多问题。下面是我使用的一个例子:

<?php
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=calendar.ics');
$time = time();
$dtstamp = date('Ymd', $time). 'T' . date('His', $time) . 'Z'; echo "'r'n";
?>
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//My Event
METHOD:PUBLISH
X-WR-CALNAME:MyCal
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:0
UID:ABC123
DTSTART:20150601T120000
DTEND:20150601T130000
SUMMARY:Event 1 - <?php echo date('His', $time) ."'r'n"; ?>
LOCATION:Location 1
DESCRIPTION:This is Event 1 - <?php echo date('His', $time) ."'r'n"; ?>
END:VEVENT
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:0
UID:DEF123
DTSTART:20150601T160000
DTEND:20150601T170000
SUMMARY:Event 2 - <?php echo date('His', $time) ."'r'n"; ?>
LOCATION:Location 2
DESCRIPTION:This is Event 2 - <?php echo date('His', $time) ."'r'n"; ?>
END:VEVENT
END:VCALENDAR

因此,这是将事件输出到一个URL,该URL可以在Android或iOS设备中点击并添加到日历中。下一步是在需要时更新事件项。我一直在尝试用这样的东西来做(最初的PHP故意省略):

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//My Event
METHOD:PUBLISH
X-WR-CALNAME:MyCal
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:1
UID:ABC123
DTSTART:20150601T123000
DTEND:20150601T130000
SUMMARY:Event 1 - <?php echo date('His', $time) ."'r'n"; ?>
LOCATION:Location 1
DESCRIPTION:This is Event 1 - <?php echo date('His', $time) ."'r'n"; ?>
END:VEVENT
BEGIN:VEVENT
DTSTAMP:<?php echo $dtstamp; ?>
ORGANIZER:someone@example.com
SEQUENCE:1
UID:DEF123
DTSTART:20150601T163000
DTEND:20150601T170000
SUMMARY:Event 2 - <?php echo date('His', $time) ."'r'n"; ?>
LOCATION:Location 2
DESCRIPTION:This is Event 2 - <?php echo date('His', $time) ."'r'n"; ?>
END:VEVENT
END:VCALENDAR

因为DTSTAMP总是大于前一个条目,所以序列已经增加,METHOD更改为REQUEST,据我所知,这应该足够了。

然而,在Android中,它只是再次添加事件,在iOS中,它显示已经存在的事件以及以前的详细信息,并且只允许您选择再次添加事件。所以,我想知道需要什么才能更新现有的事件,然后使用METHOD:cancel(如果需要)取消它们。

谢谢。

您想要做的事情是不可能的。

你可能应该做的是创建一个iCalendar提要。(通常使用webcal://非标准URI模式)。

像这样的提要应该只有METHOD:PUBLISH,并且总是包含日历中的每个项目。

要更新此提要中的条目,只需更新提要本身。您在此订阅源中删除的任何项目都将从日历中删除。

CCD_ 3和CCD_。它们有两个主要用途:

  1. 电子邮件邀请(又称iMip)
  2. CalDAV调度

这些方法只对具有ORGANIZERATTENDEE的的iCalendar事件有意义