【问题标题】:Icloud calendar retrieve event by uid via caldav通过 caldav 通过 uid 检索 Icloud 日历事件
【发布时间】:2015-03-06 17:33:59
【问题描述】:

我正在尝试通过 caldav 协议根据其 UID 检索特定的 ICloud 事件。

<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop>
  <D:getetag/>
  <C:calendar-data>
    <C:comp name="VCALENDAR">
      <C:prop name="VERSION"/>
      <C:comp name="VEVENT">
        <C:prop name="SUMMARY"/>
        <C:prop name="UID"/>
        <C:prop name="DTSTART"/>
        <C:prop name="DTEND"/>
        <C:prop name="DURATION"/>
        <C:prop name="RRULE"/>
        <C:prop name="RDATE"/>
        <C:prop name="EXRULE"/>
        <C:prop name="EXDATE"/>
        <C:prop name="RECURRENCE-ID"/>
      </C:comp>
      <C:comp name="VTIMEZONE"/>
    </C:comp>
  </C:calendar-data>
</D:prop>
<C:filter>
  <C:comp-filter name="VCALENDAR">
    <C:comp-filter name="VEVENT">
      <C:prop-filter name="UID">
        <C:text-match>$$EVENT_UID$$</C:text-match>
      </C:prop-filter>
    </C:comp-filter>
  </C:comp-filter>
</C:filter>

当我将 C:prop-filter name="UID" 替换为 C:prop-filter name="SUMMARY" 时,请求在 204 下工作正常,但我尝试使用 UID,我得到 403 Forbidden。

【问题讨论】:

  • 有点离题,但只是为了确保:记住 text-match 会进行 substring 搜索。因此,如果您执行上述操作,请确保您进一步过滤查询结果以获得完全匹配。 (例如,一个 UID 可能是 AA,另一个可能是 AABB)。
  • 这也不能完全回答您的问题,但无论如何它可能会对您有所帮助:如果您在使用 PROPFIND 或类似名称列出事件后尝试获取事件,我会通过 &lt;href&gt; 进行操作。与通过 UID 获取和查询不同,它主要保证所有未完全损坏的服务器都支持。

标签: ruby-on-rails calendar icloud webdav caldav


【解决方案1】:

iCloud 不支持相当广泛的日历查询请求。您可能无法先下载整个集合。

【讨论】:

    【解决方案2】:

    您用于发布请求的 url 必须包含 ics 文件链接以及请求中的 UID。

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多