#google-calendar-api
#google-calendar-api
Вопрос:
Шаги для воспроизведения:
- Создайте событие, которое начнется в понедельник в 1 час дня и будет повторяться ежедневно
- Отредактируйте событие из этой серии, запланированное на среду, и установите его на начало в 2 часа дня, а также выберите, чтобы обновить это и следующие события
После обновления события с понедельника и вторника будут иметь одно recurringEventId
, а со среды и следующего — другое recurringEventId
.
Есть ли способ отслеживать события со среды вперед с помощью данных, подобных recurringEventId
или аналогичных тем, которые у меня есть для события с понедельника и вторника?
Надеюсь, это имеет смысл.
Заранее благодарю.
Комментарии:
1. Это звучит возможно с помощью API, но можете ли вы предоставить более подробную информацию? Например, код, который у вас есть до сих пор.
2. @iansedano Я не вижу в API ничего, что обеспечивало бы такую функциональность. Можете ли вы указать мне в этом направлении? Что касается примера кода, у меня слишком много кода, чтобы сделать краткий и понятный фрагмент. Когда у вас есть одна повторяющаяся серия событий, все они имеют одинаковый recurringEventId. Но когда вы обновляете какое-либо событие в этой серии и выбираете обновление
This and following
, оно разделяется на две серии событий, и во вновь созданной серии нет информации об исходной серии.
Ответ №1:
Поток API календаря с повторяющимися событиями
Для примера скажем, что у вас есть календарь без событий.
Вы создаете повторяющееся событие с 5 повторениями в течение 5 дней подряд. Это создаст событие, и если вы вызовете list
метод с помощью API, вы получите одно событие:
{
"kind":"calendar#event",
"id":"0000000011111111xxxxxxyyyyyy", // id is not real for this example
"recurrence":[
"RRULE:FREQ=DAILY;COUNT=5"
]
}
Также будет много других полей, но я считаю, что они имеют отношение к вашему вопросу.
Если вы возьмете одно из 5 вхождений этого события и измените его время только для этого события, то list
вернет 2 события, одно предыдущее и:
{
"kind":"calendar#event",
"id":"0000000011111111xxxxxxyyyyyy_20201202T150000Z", // note original ID with new date
"recurringEventId":"0000000011111111xxxxxxyyyyyy", // note the original ID
"originalStartTime":{
"dateTime":"2020-12-02T16:00:00 01:00",
"timeZone":"Europe/Madrid"
}
}
- Исходное повторяющееся событие не имеет a
recurringEventId
, оно добавляется только в том случае, если некоторые события из повторяющегося события изменены на даты, отличные от остальных. - Если все, что у вас есть, это событие, которое может быть «оригинальным» повторяющимся событием или событием, которое изначально было частью повторяющегося события, но изменилось по времени, и вы хотите отследить все события, связанные с исходным повторяющимся событием, вам необходимо:
- Если событие имеет значение a
recurringEventId
, то вы ищете событие с этим значением в полеid
, которое будет исходным повторяющимся событием и событиями с тем жеrecurringEventId
значением.
или
- Если событие не
recurringEventId
имеет, это связано с тем, что это исходное текущее событие. Затем вы должны выполнить поиск всех событий, в которых есть эти событияid
recurringEventId
.
- Если событие имеет значение a