Как-то неожиданно для меня подключение своего nodejs-приложения к Google Calendar API оказалось довольно нетривиальной задачей. Несмотря на подробное описание вариантов подключения на русском языке пришлось продираться через лес различных настроек и конфигураций. В статье подробно изложены шаги, которые приходится совершить, чтобы интеграция завершилась успехом. Цель интеграции - дать возможность nodejs-приложению публиковать события в определённый календарь. В данном примере использовался обычная, персональная учётная запись в Google. Для начала нужно создать календарь, в который будем публиковать события. Идём в Google Calendar и нажимаем на кнопку "+" рядом с "Другие календари", затем выбираем пункт "Создать календарь": заполняем форму и опять жмём "Создать календарь", но уже синюю кнопку: Гугл довольно долго шуршит мозгами, после чего радостно сообщает, что новый календарь готов. Доступ к настройкам нового календаря: В настройках нас прежде всего интересует пункт "Интеграция календаря": в котором самое полезное - это "Идентификатор календаря" Этот значение наше nodejs-приложение будет использовать при подключении к API. Управление приложениями находится в "Консоли API". Создать новое приложение можно через селектор текущего приложения - "Выберите проект": После создания проект становится доступным в списке проектов - "Habr Demo": Теперь нужно дать доступ этому проекту к соответствующим API Google'а: Так как интерфейсов Google наплодил свыше 3 сотен, используем фильтр для поиска нужных: Фильтрация по ключу "calend" оставляет всего два вариант, один из которых нам и нужен: Заходим в "Google Calendar API" и включаем его для использования в нашем проекте: После чего проваливаемся в dashboard использования этого API в нашем проекте (https://console.developers.google.com/apis/api/calendar-json.googleapis.com/overview?project=habr-demo-293107&supportedpurview=project), где нам сообщают, что для использования API мы должны создать учётные данные: Жмём "СОЗДАТЬ УЧЁТНЫЕ ДАННЫЕ" и заполняем анкету, определяющую, какой тип учётных данных нам нужен для доступа к API: вся анкета не влезла в один скрин, вот остаток: По результатам анкетирования Google предлагает создать закрытый ключ в формате JSON, при помощи которого наше приложение будет подключаться к Google Calendar API: Самую большую трудность для меня создал пункт "Роль". Похоже, что ролей у Google'а даже больше, чем API, к которым можно подключаться: В общем, если выбрать "Проект / Владелец", то обещают предоставить полный доступ ко всем ресурсам. Жмём на кнопку "Продолжить" и получаем JSON-файл в каталог "Downloads" на своём компрьютере: Содержимое JSON-файла примерно такое (ключ я вырезал): В консоли API у приложения "Habr Demo" появляется новый сервис с email'ом "nodejs-app@habr-demo-293107.iam.gserviceaccount.com": Для подключения к API из nodejs-приложения Google предлагает библиотеку googleapis и обзор её использования. В обзоре применяется OAuth2-аутентификация и получение из календаря списка событий, а нам нужна аутентификация по ключу в соответствующих scope'ах и добавление события в календарь. Поэтому код получается примерно такой: Запускаем код на выполнение и получаем ответ от Calendar API: что и логично - наш новый календарь ничего не знает про наш новый сервис. Заходим в наш календарь, созданный ранее, и в настройках жмём "Доступ для отдельных пользователей", затем "Добавить пользователей" и вводим email-адрес нашего сервиса, который будет создавать события в нашем календаре: После предоставления сервису доступа к календарю нужно настроить права: Выбираем "Внесение изменений и предоставление доступа", иначе будем иметь ошибку "You need to have writer access to this calendar." при обращении к API: Запускаем наш скрипт на выполнение ещё раз и фиксируем результат в календаре: В коде я задавал время старта события в 16:00: a по факту событие запланировано на 17:00, что вполне соответствует духу IT: В программировании существует лишь два характерных затруднения: инвалидация кеша, наименование сущностей и ошибка на единицу Вот и всё, квест пройден. Хэппи, как говорится, кодинг. Google Calendar API Reference API Console google-api-nodejs-client  Node.js Quickstart Authorization scopes  wiredgeese.com