Как я могу найти Идентификатор события моего Календаря Google?

Я создал несколько событий Календаря Google, и теперь я хотел бы выполнить некоторые операции с ними программно.

Проблема в том, что у меня нет их удостоверений личности.

Когда я захожу в календарь и нажимаю на событие, нигде не видно идентификатора.

Кто-нибудь знает, где я могу найти это?

9 ответов

Есть еще один способ увидеть этот идентификатор события.

  1. Перейдите по URL-адресу отладки мероприятия по адресу https://www.google.com/calendar/render?gsessionid=OK&eventdeb=1
  2. Дважды щелкните, чтобы просмотреть затронутое событие.
  3. Выберите раскрывающееся меню "Дополнительные действия".
  4. Нажмите "Информация об устранении неполадок".
  5. Скопируйте появившийся текст и вставьте его в свой ответ в службу поддержки.

Источник: http: http://googleappstroubleshootinghelp.blogspot.com/2012/09/how-to-find-troubleshooting-information.html.

На веб-сайте Календаря Google

Так как он первоначально спросил, как щелкнуть в календаре и найти идентификатор определенного события, и так как это то, что мне нужно было знать, как это сделать:

  1. Нажмите на событие в календаре Google.

  2. Вы попадете на страницу с таким URL-адресом, как https://calendar.google.com/calendar/render?pli=1#eventpage_6%7Ceid-NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw-1-0-

  3. Ищите "Ид" в URL.

  4. Выберите и скопируйте строку между eid- и следующий -, (В моем примере здесь это NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw.)

  5. Теперь вам нужно декодировать из формата Base64. Вы можете вставить эту строку в инструмент, такой как https://www.base64decode.org/.

  6. Результатом будут две строки, разделенные пробелом. Первая строка - это ваш идентификатор события.

Есть еще один быстрый и легкий подход.

  • Нажмите на событие в вашем календаре. Это не должно быть в режиме отладки.
  • С URL скопируйте строку между последней косой чертой и знаком вопроса.
  • Вставьте эту строку в кодировщик base64. ( https://www.base64decode.org/)
  • Вы получите ID события и адрес электронной почты владельца календаря (вы?).
  • (Идентификатор события - это первая строка символов.)

TL;DR

Для этого вам следует использовать расширенный API.

Calendar.Events.list(calendarId).items[0].id; // returns the id of the first event

Если вам просто нужен идентификатор события для определенного события и вы можете использовать ручной подход, тогдаeventdeb=1ваш лучший выбор.

Если вам нужно программное решение, обратите внимание, что вы не можете использовать стандартный API (CalendarApp) потому что документация для getId() на CalendarEvent состояния:

Получает уникальный iCalUID события. Обратите внимание, что iCalUID и идентификатор события, используемые API Calendar v3 и расширенной службой Calendar, не идентичны и не могут использоваться взаимозаменяемо. Одно различие в их семантике заключается в том, что в повторяющихся событиях все вхождения одного события имеют разные идентификаторы, в то время как все они имеют одинаковые идентификаторы iCalUID.

Это означает, что если вы хотите создать URL-адрес для повторяющегося события, вы столкнетесь с проблемами, потому что вы не можете правильно использовать getId(), особенно для повторяющихся событий. Лучшее решение - использовать Advanced Calendar API. (Также обратите внимание, что если вы пытаетесь создать ссылку на событие календаря, расширенный API даже имеетhtmlLink свойство с закодированным CalendarId + realEventId.


Вот еще несколько подробностей о том, почему getId() он прерывается для повторяющихся событий: это потому, что когда вы звоните event.getId()для повторяющегося события вы получите тот же идентификатор. Невозможно ссылаться на конкретный экземпляр календарного события с помощью простого Calendar API. URL-адрес по-прежнему может ссылаться на конкретный экземпляр события, добавляя такой формат, как_20190626T000000Z. Однако неясно, какие значения там должны быть указаны. Также есть случаи, когда_ заменяется на _R а также Z заменен на @google.com, что еще больше усложняет ситуацию.

Чтобы доказать, что это проблема:

  1. Найдите повторяющееся событие в календаре.
  2. Разберите его URL (который гарантированно относится к конкретному экземпляру).
  3. Вызов CalendarApp.getEventById(parsedId1).getId() обратите внимание на возвращаемое значение.
  4. Теперь проанализируйте URL-адрес другого экземпляра события.
  5. Вызов CalendarApp.getEventById(parsedId2).getId()обратите внимание на возвращаемое значение. Несмотря на то чтоparsedId1 а также parsedId2 - разные строки (относящиеся к конкретным экземплярам), возвращаемое значение getId()на обоих то же самое. Событие фактически является ссылкой на определенные экземпляры, но вы больше не можете сериализовать их идентификаторы.

Если вы действительно хотите использовать простой API календаря, вам, вероятно, понадобится какой-то процесс синхронизации и хранить метаданные / теги для каждого экземпляра событий календаря во время, как указано в этом ответе. Однако Advanced API значительно упростит вашу жизнь.

  • получить звонок
  • цикл через все события в течение рассматриваемого периода времени
function myFunction() {
  var cal = CalendarApp.getCalendarById(id);
  var events = cal.getEvents(startTime, endTime);
  for ( var i in events ) {
    var id = events[i].getId();
  }
}

Перейдите в Календарь и нажмите на мероприятие, и появится всплывающее окно, как показано ниже.

Теперь нажмите на значок редактирования , он перенаправляет на страницу, а затем из найденного URL- адреса, после этого параметра вы можете увидеть идентификатор события. URL выглядит как лайки ниже

      https://calendar.google.com/calendar/u/0/r/eventedit/OGM1dnRlODY4azBzMWtjdThzMmo3NmM2OWNfMjAyMTEwMjhUMTYwMDAwWiBuNXUzMTk5NTFyYjI18555FsdZwdWE4dWExb0Bn?pli=1

Простой способ получить все идентификаторы событий для любого календаря в любом приложении — просто экспортировать календарь в ICS. в файле Calendar.ics каждая запись будет иметь UID. Это идентификатор вашего мероприятия! Это даже работает, если кто-то заказывает с вами встречу с помощью Календаря Google, а вы используете Outlook, Hotmail или что-то еще, вы все равно получаете его идентификатор события, вам просто нужно экспортировать его в формат ICS, чтобы увидеть его :)

Простой ответ - eventId = event.get('id'). Вы не спрашивали об объекте события, но как руководство для других я создал его для своего сценария Python в Календаре Google:

creds = get_credentials()
http = creds.authorize(httplib2.Http())
calendar_service = discovery.build('calendar', 'v3', http=http)
event = calendar_service.events().insert(calendarId='primary', 
body=event).execute()

затем

eventId = event.get('id')

Вы можете напрямую получить идентификатор при его создании, вам нужно будет импортировать base64:

       event = {
  'summary': 'Google I/O 2015',
  'location': '800 Howard St., San Francisco, CA 94103',
  'description': 'A chance to hear more about Google\'s developer products.',
  'start': {
    'dateTime': '2015-05-28T09:00:00-07:00',
    'timeZone': 'America/Los_Angeles',
  },
  'end': {
    'dateTime': '2015-05-28T17:00:00-07:00',
    'timeZone': 'America/Los_Angeles',
  },
  'recurrence': [
    'RRULE:FREQ=DAILY;COUNT=2'
  ],
  'attendees': [
    {'email': 'lpage@example.com'},
    {'email': 'sbrin@example.com'},
  ],
  'reminders': {
    'useDefault': False,
    'overrides': [
      {'method': 'email', 'minutes': 24 * 60},
      {'method': 'popup', 'minutes': 10},
    ],
  },
}

event = service.events().insert(calendarId='primary', body=event).execute()

print(event['id'])

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