Получите "Повторение" от Google Calendar API Event (React, Javascript)

Я пытаюсь получить правила повторения (RRULE) для события с использованием API календаря Google, но он возвращается undefined,

Предположительно, каждое событие имеет "значение повторения, как указано здесь:

повторение [] список

Список строк RRULE, EXRULE, RDATE и EXDATE для повторяющегося события, как указано в RFC5545. Обратите внимание, что строки DTSTART и DTEND не допускаются в этом поле; время начала и окончания события указывается в полях начала и окончания. Это поле опущено для единичных событий или экземпляров повторяющихся событий.
записываемый

Как примечание,

НЕТ ПРОБЛЕМЫ: Укажите значение "повторения" при создании события, выполнив следующие действия:

var event = {
   'summary': this.props.user.calendarEventTitle,
   'start': {
     'dateTime': this.props.user.calendarEventStartDateTime,
     'timeZone': this.props.user.calendarEventTimeZone
   },
   'end': {
     'dateTime': this.props.user.calendarEventEndDateTime,
     'timeZone': this.props.user.calendarEventTimeZone
   },
  "recurrence": [
     "RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z",
  ]
};


var request = window.gapi.client.calendar.events.insert({
  'calendarId': 'primary',
  'resource': event
});

request.execute(function(resp) {
  console.log('resp = ' + resp);
});

ПРОБЛЕМА: Невозможно получить значение "повторения" при получении события, выполнив следующее:

listUpcomingEvents() {
   window.gapi.client.calendar.events.list({
     'calendarId': 'primary',
     'timeMin': (new Date()).toISOString(),
     'showDeleted': false,
     'singleEvents': true,
     'orderBy': 'startTime'
   }).then(function(response) {
     var events = response.result.items;

     if (events.length > 0) {
       var eventsArr = [];
       for (var i = 0; i < events.length; i++) {
         var event = events[i];
         var startDate = event.start.dateTime;
         var endDate = event.end.dateTime;
         if (!startDate) {
           startDate = event.start.date;
         }
         if (!endDate) {
           endDate = event.end.date;
         }
         var reminders = event.reminders.overrides;

         console.log('event.recurrence = ' + event.recurrence);
         {Object.keys(event).map(function(key) {
              console.log('>Key (event): ' + key + ", Value (event): " 
+ event[key]);
          })}

ПРИМЕЧАНИЕ: я добавил журнал выше, чтобы распечатать каждый ключ и значение объекта события, но я все еще не вижу ключ 'повторения'. Если в этом объекте нет ни одного, как я могу получить правила повторения, которые создают это событие? Возможно, сделать что-нибудь с repeatatingEventID?

         var rowArray = {
           id: event.id,
           title: event.summary,
           start: startDate,
           end: endDate,
           allDay: false,
           location: event.location,
           description: event.description,
           timeZone: event.start.timeZone,
           reminders: event.reminders.overrides,
           recurrence: event.recurrence  //ISSUE: RETURNS UNDEFINED
         };
         eventsArr.push(rowArray);
         this.setState({
           eventArray: eventsArr
         })
       }
     } else {
       console.log('No upcoming events found.');
     }
     const { calendar } = this.refs;
}

Здесь почти кажется, что после создания события свойство "повторение" отсутствует (только идентификатор повторения).

Какие-нибудь советы?

1 ответ

Решение

Для любого, у кого есть подобный вопрос в будущем, recurringEventId может использоваться для извлечения другого события, которое содержит значение повторения для исходного события.

Вот как вы можете это сделать.

Получите идентификатор повторяющегося события следующим образом:

var recurringEventID = event.recurringEventId

Затем мы используем этот идентификатор для повторного вызова API Календаря Google для recurringEventId (вместо идентификатора event сам):

var requestRecurringEvent = window.gapi.client.calendar.events.get({
        'calendarId': 'primary',
        'eventId': payload
      });
      requestRecurringEvent.execute(function(resp) {
        console.log('requestRecurringEvent = ' + resp);
        console.log('requestRecurringEvent.recurrence = ' + resp.recurrence);
        recurrence = resp.recurrence;

        console.log('recurrence (inside execute)= ' + recurrence); //NO ISSUE (YET): recurrence (inside execute) = RRULE:FREQ=WEEKLY;COUNT=10

        return recurrence;
      });

И это все!

Другие вопросы по тегам