Календарю Google не удается отследить «дочерние» события после обновления «дочернего» времени

#google-calendar-api

#google-calendar-api

Вопрос:

Шаги для воспроизведения:

  1. Создайте событие, которое начнется в понедельник в 1 час дня и будет повторяться ежедневно
  2. Отредактируйте событие из этой серии, запланированное на среду, и установите его на начало в 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 .

Ссылки