Получите "Повторение" от 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;
});
И это все!