【问题标题】:Google Calendar API V3: Identifying edited one-offs of recurring events?Google Calendar API V3:识别重复事件的一次性编辑?
【发布时间】:2020-04-16 10:53:58
【问题描述】:

我目前正在使用设置为 true 的“singleEvents”参数列出 Google 日历中的所有事件,这会将重复事件拆分为单个事件——这很好。但是,我在编辑重复事件的实例时遇到了问题,并且编辑是使用日历 UI 中的“仅此事件”选项保存的。

我需要做的是能够确定哪些重复事件实例已被编辑,哪些没有。似乎 API 响应数据没有提供任何指示,表明这是未编辑的重复事件的实例,还是已编辑的一次性事件。重复事件的未编辑实例和已编辑实例的响应或多或少相同,保存已编辑的描述字段。

我需要区分已编辑和未编辑的重复事件实例的原因是我正在从单个事件列表中动态创建事件详细信息页面。我希望有一页用于重复事件本身,另一页用于该重复事件的“一次性”。例如:

allmyevents.com/events/my-recurring-event --> 显示带有重复信息的重复事件的页面

allmyevents.com/events/my-recurring-event/16-4-2020 --> 显示重复事件的特定实例的页面,已被编辑

目前,我可以通过在同一日期创建一个全新的事件来做到这一点,并且与我要替换的重复事件实例具有相同的标题,并编写 hacky 比较逻辑来判断这是否是一个替换事件,但这对于事件/内容管理是违反直觉的。

【问题讨论】:

    标签: google-calendar-api


    【解决方案1】:

    答案:

    您可以使用日历 API Events: instances 端点返回重复事件的所有实例。所有自行编辑的事件均不返回。

    更多信息:

    日历 API 的 Events: instances 端点将返回指定的 calendarIdeventId 的重复事件的所有实例。任何已被编辑的都将被省略。

    这是一种解决方法,因为这些事件不能直接获取,而是通过获取你已经在做的事件列表,然后删除@返回的事件987654329@,您可以使用“仅此事件”选项构建所有已编辑事件的列表。

    伪代码:

    你可以这样做:

    eventsList = Calendar.Events.List(calendarId, singleEvents=true)
    eventsInstances = Calendar.Events.Instances(calendarId, recurringEventId)
    singleEvents = eventsList
    
    for each instance in eventsInstances :
      if eventsList.items contains instance :
        singleEvents.remove(instance)
    
    return singleEvents
    

    返回的singleEvents 变量将是手动编辑的所有事件的列表。

    参考资料:

    【讨论】:

    • 嗨@Rafa_Guillermo,感谢您的回复。但是,我正在使用一个包含许多重复事件的日历,因此为每个事件获取实例然后从单个事件列表中删除这些实例将需要很多请求并且效率非常低。
    • 日历 API 没有这个功能,我只是提供了一个解决方法,因为当前状态下的 API 无法做到这一点。如果您希望将其作为 API 方法实现,您可以随时向 Google 提交feature request
    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2015-09-30
    • 2012-02-11
    相关资源
    最近更新 更多