Рубрики
Без рубрики

Интеграция календаря Google с Nodejs без Oauth 2.0

Этот пост – дать немного больше понимания того, как использовать календарь Google внутри Nodejs, я изо всех сил пытался реализовать это из-за отсутствия документации. Теги с Google, Calendar, Node, JavaScript.

Предварительные условия

  • Это было сделано с использованием учетной записи G-Suite, я не уверен, что это можно сделать с помощью обычной учетной записи Gmail.
  • проект Google Cloud
  • Nodejs и NPM/пряжа установлены
  • Основные знания о JavaScript и ES6

Введение

Клиент попросил меня интегрировать систему планирования на ее веб-сайт, чтобы облегчить ее назначения. Я сказал ей, что это будет дорогое решение, написанное рукой, так как она только небольшая компания. Однако я всегда готов изучать новые вещи и посмотрел способы сделать это. Одна из первых вещей, о которых я думал, и является частью нашей повседневной жизни – это календарь Google. Это легко и надежно. Поэтому я посмотрел на API и что и/или если это удалось интегрировать его.

Головные боли и решения (эта часть может быть пропущена)

С пакетом NPM Googleapis. У вас есть доступ к различным услугам Google. Однако на мой взгляд, API задокументированы, различные части в одном месте другие детали в другой, я не всегда был уверен, что запчасти действительно связаны с пакетом NPM.

Мне потребовалось много времени, чтобы понять часть аутентификации. После попытки API с Oauth 2.0 работал мое приложение. Но токен был коротким. Я не хотел головную боль повторять процесс аутентификации. Я думал, что должен быть какой-то другой путь, поэтому я посмотрел в ключи API. Google предоставляет это, но не для каждого API, но календарь не поддерживался. Решение, наконец, пришло после многих поисков и прочтения. Учетная запись службы Google. Это то, что я собираюсь поделиться с вами, ребята, сегодня. Это на самом деле довольно дарн легко.

Настройка учетной записи Google Service (в консоли Google Cloud)

Оба. Эта статья не будет входить на глубину, создавая проект Google Cloud

В консоли перейдите к Я И управление -> Сервисные аккаунты и создать новую учетную запись услуг. Дайте ему имя, идентификатор (это также электронное письмо, которое нам нужно позже) и описание. Нажмите Создать. Эта учетная запись не нуждается в разрешениях. Нажмите Продолжить. Эта учетная запись не нуждается в пользовательской учетной записи службы, ни администратора. Но нам понадобится ключ JSON. Файл будет загружен, что нам понадобится позже.

Календарь

Теперь мы добавим электронную почту учетной записи службы (ID) в календарь. Добавьте его в календарь. Нажмите здесь знать, как. Электронная почта должна иметь следующее разрешение Внести изменения в события Отказ

Идентификатор календаря можно найти здесь нам также понадобится.

Ну, это было легко, не так, не все должно быть бюрократическим.

Веселая часть

Теперь у нас будет несколько базовых тестов Nodejs, создайте новый проект Dir с NPM init -y и установить NPM I-S Googleapis Date-FNS к проекту. Дата FNS Мы будем использовать для форматирования и манипулирования датами. Скопируйте файл учетных данных JSON в корню каталога проекта.

Давайте создадим get.js со следующим кодом:

const { addWeeks } = require('date-fns')
const { google } = require('googleapis')
const credentials = require('.json')

const scopes = ['https://www.googleapis.com/auth/calendar']

const client = google.auth.getClient({
  credentials,
  scopes,
})

client.subject = ''

const calendar = google.calendar({ version: 'v3', auth: client })

calendar.events.list(
  {
    calendarId: '',
    timeMin: new Date().toISOString(),
    timeMax: addWeeks(new Date(), 1).toISOString(), // Let's get events for one week
    singleEvents: true,
    orderBy: 'startTime',
  },
  (err, res) => {
    if (err) {
      console.log(`The API returned an error: ${err}`)
    }
    // console.log(res.data.items) // All data
    const appointments = res.data.items.map((appointment) => ({
      start: appointment.start.dateTime || appointment.start.date,
      end: appointment.end.dateTime || appointment.end.date,
      id: appointment.id,
      status: appointment.status,
      creator: appointment.creator,
      description: appointment.description,
    }))
    console.log(appointments)
  },
)

И давайте также создадим новое событие календаря:

const { addMinutes } = require('date-fns')
const { google } = require('googleapis')
const credentials = require('.json')

const scopes = ['https://www.googleapis.com/auth/calendar']

const client = google.auth.getClient({
  credentials,
  scopes,
})

client.subject = ''

const calendar = google.calendar({ version: 'v3', auth: client })

calendar.events.insert(
  {
    calendarId: '',
    resource: {
      start: {
        dateTime: new Date().toISOString(),
        timeZone: '',
      },
      end: {
        dateTime: addMinutes(new Date(), 60).toISOString(),
        timeZone: '',
      },
      summary: 'Test event',
      status: 'confirmed',
      description: 'Test description',
    },
  },
  (err, event) => {
    if (err) console.log('Error', err)
    console.log(event.data)
  },
)

Это было много работы, чтобы найти и выяснить. Я многому научился, особенно то, что на самом деле это не так усердно!

Это мой первый пост, помогите мне с моими навыками письма и поделиться своими мыслями!

Надеюсь, это хорошо, Happy Hacking!

Оригинал: “https://dev.to/maartennnn/google-calendar-integration-with-nodejs-without-oauth-2-0-5256”