【问题标题】:Getting Recurrence of API Google Calendar Events获取 API 谷歌日历事件的重复
【发布时间】:2015-06-08 08:03:16
【问题描述】:

早上好,

我正在创建一个与 Google 日历同步的日历,但我无法重现 Google 日历的事件。我认为事件的“重复”字段是受保护的字段。但我不知道如何获取已保存事件的字段。

编辑:代码:

$params = array(
                'orderBy' => 'startTime',
                'singleEvents' => 'true',
                'timeMin' => date(DateTime::ATOM),
        );
$listarEventos = $service->events->listEvents($calendar_id, $params);
foreach ($listarEventos['items'] as $i){
     echo $i->recurrence;
}

如果我尝试打印事件的内容,它会显示一个空字段重复,我已经证明它是重复的。

谢谢!

【问题讨论】:

    标签: api google-calendar-api google-calendar-recurring-events


    【解决方案1】:

    如果当前事件不是拥有重复规则的原始事件,则它不包含其自己的“重复”字段副本。相反,“recurringEventId”字段中将引用原始事件。

    如果您随后获取引用的事件,您将找到重复规则。

    例如(使用 Python API)...

    ...
    events = service.events().list(calendarId=calId,
                                   singleEvents=True,  # expand recurrence events
                                   q=searchString
                                  ).execute()
    for e in events['items']:
        if 'recurringEventId' in e:
            root_ev = service.events().get(CalendarId=calId,
                                           eventId = e['recurringEventId']
                                          ).execute()
            # Copy the recurrence rules from the root event into our own:
            e['recurrence'] = root_ev['recurrence']
    

    【讨论】:

      【解决方案2】:

      Events.list 返回事件资源列表。

      "kind": "calendar#event",
         "etag": "\"9722590000\"",
         "id": "3nmhbd0465ts1enliigj4",
         "status": "confirmed",
         "htmlLink": "https://www.google.com/calendar/event?eid=285781",
         "created": "2015-04-13T07:24:21.000Z",
         "updated": "2015-04-13T07:24:21.509Z",
         "summary": "My event",
         "location": " ",
         "creator": {
          "email": "XXX@gmail.com",
          "displayName": "XXX",
          "self": true
         },
         "organizer": {
          "email": "XXX@gmail.com",
          "displayName": "XXX",
          "self": true
         },
         "start": {
          "dateTime": "2015-04-21T19:00:00+02:00",
          "timeZone": "Europe/Copenhagen"
         },
         "end": {
          "dateTime": "2015-04-21T21:00:00+02:00",
          "timeZone": "Europe/Copenhagen"
         },
         "recurrence": [
          "RRULE:FREQ=WEEKLY;COUNT=24;BYDAY=TU"
         ],
         "iCalUID": "XXX@google.com",
         "sequence": 0,
         "reminders": {
          "useDefault": false,
          "overrides": [
           {
            "method": "popup",
            "minutes": 45
           }
          ]
         }
      

      如果事件有一个循环集,您可以在其中找到它。

      “复发”:[ “规则:频率=每周;计数=24;BYDAY=TU” ]

      我看不到您的代码是如何访问它的,但是如果您在 event.list 底部进行测试,您会注意到如果您可以访问日历,则应该可以访问重复字段。

      【讨论】:

      • 首先,非常感谢,但我无法获得“复发”字段。我将使用代码编辑帖子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      相关资源
      最近更新 更多