Сценарий приложений: приложение «Календарь»: проверяет, является ли пользователь дополнительным приглашением на событие

#google-apps-script #google-calendar-api

#google-apps-script #google-calendar-api

Вопрос:

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

Во время работы с приложением календаря я заметил, что через сценарий приложения отображается только список гостей и их статус (независимо от того, приняли они приглашение или нет), а не «необязательная» или «обязательная» посещаемость. Есть идеи, как это можно сделать?

 var myCal = CalendarApp.getEventsForDay(new Date("13-Jan-2021")); **//Get calendar events for 13-Jan-21**
for (var i=0;i<myCal.length;i  ) **// Loop through each event**
{
    Logger.log("Calendar Invite Name:" myCal[i].getTitle()); **// Get the title for the event**
    var guests= myCal[i].getGuestList(); **// Get the guest list**
    Logger.log("My Status:" myStatus[2].getStatus()); **//I can only get the guest status here using the getGuestList method and not their importance.**
}
 

Я проверил документацию приложения календаря, имеющуюся в Google, и с помощью метода getGuestList() возможно только следующее.

введите описание изображения здесь

Любая помощь по этому вопросу будет оценена.

Ответ №1:

Ответ:

Вы не можете получить optional свойство an attendee с помощью службы календаря, однако вы можете получить его с помощью API календаря.

Как это сделать:

  • Добавьте Google Calendar API службу в свой проект. Откройте проект, щелкните левой кнопкой мыши Editor > Services > Add Service (нажмите на ) и выберите Google Calendar API .
  • Используйте метод get события ресурса, чтобы получить фактическое Event . Вам нужно calendarId то, что может быть 'primary' , если вы используете свой основной календарь, и eventId то, что вы можете получить его несколькими способами. Следующие предложения предполагают, что в этот день происходит только одно событие.
    • Используя Calendar Service и getId :
     var ev = CalendarApp.getEventsForDay(new Date("14-Jan-2021"))[0]
    var event_id = ev.getId().split('@')[0]
     
     var date_start = new Date("14-Jan-2021").toISOString()
    var date_end = new Date("15-Jan-2021").toISOString()
    var calendar_id = 'primary'
    var optional = {
      timeMin : date_start,
      timeMax : date_end
    }
    var events = Calendar.Events.list(calendar_id,optional)
    var event_id = events.items[0].id
     
  • После того, как вы получили желаемое event resource , вы можете получить attendees , и у них есть свойство, optional которое определяется, только если значение равно True .
     var event = Calendar.Events.get(calendar_id,event_id)
    var att = event.attendees
    for (var i=0; i<att.length; i  ){
      var a = att[i]
      var email = a.email
      var op = a.optional
      if (op == null){
        op = false
      }
      console.log('Attendant '   email   ' has a optional invitation: '   op)
    } 
     

Результат

 Attendant ignacio@egs-sbt098.eu has a optional invitation: false
Attendant testi@egs-sbt098.eu has a optional invitation: false
Attendant pruebu@egs-sbt098.eu has a optional invitation: true
 

Ссылка