代码之家  ›  专栏  ›  技术社区  ›  vir us

谷歌日历api:重复事件例外+主事件更新

  •  0
  • vir us  · 技术社区  · 6 年前

    我有一个应用程序具有以下场景:

    • 用户在我的应用程序中的谷歌日历中创建重复事件(通过谷歌日历API v3)
    • 它们会更改其中一个实例的时间(这会以良好的方式创建异常实例——“异常”)
    • 现在,他们想要延长重复发生的事件,并更改主事件的计数或结束日期

    问题是,在最后一步之后,所有异常都消失了(日历UI似乎可以处理这个问题,但如果通过API完成,异常就会消失)。然而,我注意到outlook通过其API可以很好地处理这种情况。

    有没有简单的方法可以通过API在谷歌日历中保存这种情况下的异常?

    我还注意到,如果在更新主程序后尝试进一步更新其中一个原始异常,则会出现错误(错误的“异常”),并指出实例事件被标记为已删除,因此无法更新(“get”仍会返回它)。在本例中,它创建了一个新的实例事件,并用一个新id代替了原来的id。

    使现代化

    更新主事件的伪代码如下所示:

    let originalMastEvent = {
            id:"google_generated_master_event_id",
            ...
            recurrence: [ 'RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE,SA;COUNT=6' ],
            ...
    }
    
    //change the count from 6 to 10, the rest stays the same:
    
    let newMastEvent = {
        id:"google_generated_master_event_id",
        summary: 'Summary',
        start: { dateTime: '2020-06-24T01:00:00+02:00', timeZone: 'UTC' },
        end: { dateTime: '2020-06-24T02:00:00+02:00', timeZone: 'UTC' },
        recurrence: [ 'RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE,SA;COUNT=10' ],
        sendUpdates: 'all',
        attendees:[ { email: 'attendee1@gmail.com'} ]
    }
    
    const {google} = require('googleapis/build/src/index'); //I'm on node.js
    
    let auth = {...} //setup google api oauth obj
    let calendar = await google.calendar({version: 'v3', auth});
    
    let res = await calendar.events.update({
        calendarId: 'primary',
        eventId: newMastEvent.id,
        resource: newMastEvent,
        sendUpdates: newMastEvent.sendUpdates
    })
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   ale13    6 年前

    你的问题与你怎么样有关 添加例外情况 还有 你正在更新 主要事件。

    根据这一页 here 你需要使用 POST 在插入异常时请求。

    因此,您必须使用 Events:insert 请求:

    POST https://www.googleapis.com/calendar/v3/calendars/calendarId/events
    

    以下机构:

    {
      "start": {
        "dateTime": "MODIFIED_START_DATE",
        "timeZone": "YOUR_TIMEZONE"
      },
      "end": {
        "dateTime": "MODIFIED_END_DATE",
        "timeZone": "YOUR_TIMEZONE"
      },
      "recurringEventId": "ID_OF_THE_RECURRENT_EVENT",
      "originalStartTime": {
        "dateTime": "ORIGINAL_DATE_TIME",
        "timeZone": "YOUR_TIMEZONE"
      },
      "iCalUID": "ID",
    }
    

    之后,如果您想更新主事件,例如延长事件发生的次数,您可以简单地执行以下请求:

    PUT https://www.googleapis.com/calendar/v3/calendars/calendarId/events/eventId
    

    以下机构:

    {
      "start": {
        "dateTime": "START_DATE_OF_THE_ORIGINAL_EVENT",
        "timeZone": "YOUR_TIMEZONE"
      },
      "end": {
        "dateTime": "END_DATE_OF_THE_ORIGINAL_EVENT",
        "timeZone": "YOUR_TIMEZONE"
      },
      "recurrence": [
        "RRULE:FREQ=WEEKLY;WKST=SU;COUNT=3;BYDAY=FR"
      ]
    }
    

    在上述请求之后,您应该能够在进行事件扩展的同时仍然保留异常。

    参考

    推荐文章