Недавно на работе столкнулся со следующей задачей: не у всех сотрудниках на филиалах есть учетная запись гугл, доступ к рабочему календарю и, как следствие, не все получают рассылку о предстоящих встречах. Так же осложняло задачу, то, что календарь формируют разные люди и не всегда получается включить всех необходимых участников.
Решить эту проблему можно при помощи получения всех событий из календаря и, к примеру отправки их по почте или внедрения их в webapp, к которому есть доступ по ссылке.
Ниже я рассмотрю базовый сценарий получения данных из календаря в массив.
К примеру, есть следующий «тестовый» гугл календарь:
Доступ к календарю
Первое что нужно получить, это идентификатор календаря. Он указан в настройках:
Получаю доступ к нему в скрипте:
function getCalEventForWeek() {
const calID = 'АйДи календаря выше'
const myCal = CalendarApp.getCalendarById(calID);
const myCalName = myCal.getName();
Logger.log(myCalName)
const myCalTimeZone = myCal.getTimeZone()
Logger.log(myCalTimeZone)
Со следующим результатом в логгере:
Почему я вытащил myCal.getTimeZone()
? Дело в том, что он может быть отличным от вашего текущего часового пояса и тогда возможны нюансы. У меня был такой случай и его можно исправить несколькими способами, но самый верный следующий.
В настройках скрипта включить «Показывать файл манифеста appsscript.json в редакторе»
и в появившимся json исправить timeZone c
на Europe/Moscow
Получение данных за ближайшую неделю
Ближайшая неделя будет выглядеть следующим образом:
const today = new Date();
const sevenDaysAfter = new Date();
sevenDaysAfter.setDate(sevenDaysAfter.getDate() + 7);
где const today = new Date();
это сегодня, а sevenDaysAfter.setDate(sevenDaysAfter.getDate() + 7);
это сегодня плюс семь дней вперед. Далее, получаю все события в этом интервале:
const calEvents = myCal.getEvents(today, sevenDaysAfter)
const eventsArr = [];
if(calEvents.length !== 0){
for(let i = 0; i < calEvents.length; i++){
Logger.log(`Дата: ${calEvents[i].getStartTime()}, Название: ${calEvents[i].getTitle()}, Описание: ${calEvents[i].getDescription()}`)
eventsArr.push([calEvents[i].getStartTime(), calEvents[i].getTitle(), calEvents[i].getDescription()])
}
}
в консоли получаю следующее:
calEvents[i].getStartTime()
— начало мероприятия
calEvents[i].getTitle()
— название мероприятия
calEvents[i].getDescription()
— описание мероприятия
Как видно по последней строке консоли, в массив eventsArr
были добавлены все указанные события из календаря.
В свою очередь массив eventsArr
— обычный, «классический» массив, с которым можно делать все базовые операции, в том числе отправлять по почте или телеграм боту.