我使用 Google 日历 API 在 Node.js 中构建了一个事件调度程序🚀
介绍
自从新冠疫情以来,我的日程表上就排满了站立会议、团队会议和客户电话。
然而,安排活动和邀请客人是一件无聊的事情。一个星期五,在这些事情上花了太多时间后,我突然想到——
我为什么要花这么多时间在这上面?

因此,我有了创建一个事件调度程序来简化我的工作的想法!
在本文中,我将向您展示如何创建一个 Nodejs 应用程序,该应用程序可以创建事件并自动发送带有 Google Meet 链接的电子邮件邀请。
兴奋吗?我也是。
所以不要再拖延了!
开始吧!
项目设置:
1.创建Node.js项目:
要启动我们的项目,我们需要设置一个 Node.js 环境。因此,让我们创建一个 Node 项目。在终端中运行以下命令。
npm init -y
这将初始化一个新的 Node.js 项目。
2.安装依赖项:
现在,我们将安装项目所需的依赖项。
npm install express googleapis dotenv
这将安装以下软件包:
-
express:Node.js 的流行 Web 框架
-
dotenv:从
.env
文件加载环境变量。 -
googleapis:提供对各种 Google API 的访问
3.设置环境变量:
接下来,我们将创建一个.env
文件夹来安全地存储我们的敏感信息,例如 API 凭证。
//.env
PORT = YOUR_PORT || 8000
CLIENT_ID = YOUR_CLIENT_ID
CLIENT_SECRET = YOUR_CLIENT_SECRET
REDIRECT_URL = http://localhost:8000/auth/redirect
API_KEY = YOUR_API_KEY
4.创建Express服务器:
现在,我们index.js
在根目录中创建一个文件,并设置一个基本的 Express 服务器。请参阅以下代码:
const express = require("express");
const dotenv = require("dotenv");
dotenv.config();
const app = express();
const port = process.env.PORT || 8000;
app.get("/", (req, res) => {
res.send("Hello World");
});
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
在这里,我们使用“dotenv”包从.env
文件中访问端口号。
在项目的顶部,我们正在加载环境变量,dotenv.config()
以便在整个文件中可以访问它。
设置Google控制台
首先,我们将转到Google Cloud Console。
然后我们就能得到这个仪表盘了。(我之前创建过一个项目,所以才得到这个,你可能会得到其他东西)
现在,我们点击“新项目”按钮来开始一个新项目。
接下来我们会看到类似这样的内容。在这里,我们将添加项目名称和组织。
在本项目中,我将其保留为“Mail-integration-Demo”。然后点击“创建”按钮继续。
接下来,在侧边导航栏中,我们会看到“API 和服务”。在此部分中,有一个用于启用 API 和服务的子菜单。我们点击它继续。
接下来,我们将启用我们将在此项目中使用的 API,即 Google Calender API。
之后,我们将进入 OAuth 同意屏幕。在这里,我们将用户类型选择为外部。然后按“创建”按钮继续。
然后,我们将进入应用注册页面。
在这里,我们将添加更多关于我们应用的信息。首先,我们需要添加应用名称以及用于用户支持的电子邮件地址。
对于这个项目,我将其命名为“Arindam 的邮件集成”,并使用我自己的电子邮件地址来提供支持。
接下来,我们必须定义应用程序的范围
在范围中,我们将为该项目添加必要的权限,例如userinfo.email
和。userinfo.profile
之后,我们将向我们的应用程序添加一个测试用户。
就这样。我们的应用程序已在平台上注册。
现在,我们将创建 OAuth 客户端 ID 密钥。为此,我们将转到“创建凭据”部分。
在这里,我们将添加应用程序的类型及其名称。对于这个项目,它是一个 Web 应用程序,名称是 Arindam's Mail Demo。
此外,我们还添加了一个重定向 URL。在本项目中,该 URL 为http://localhost:8000/auth/redirect
。
然后我们将获得 OAuth 凭证。
接下来我们将创建 API 密钥。
完成所有这些后,我们将.env
使用之前生成的 API 密钥和 OAuth 凭据更新我们的文件。
至此,我们已经为该项目设置了 Google Cloud 控制台,现在让我们进入下一部分
OAuth 2 身份验证:
到目前为止,我们已经完成了基本的项目设置。现在,我们将把 OAuth2 身份验证集成到我们的项目中。这将使我们的应用程序能够安全地与 Google 服务交互。
为此,首先,我们将所需的软件包导入到index.js
文件中。
const express = require('express');
const { google } = require('googleapis');
const dotenv = require('dotenv');
然后我们将定义 Google 日历 API 所需的访问范围。
const scopes = ['https://www.googleapis.com/auth/calendar'];
接下来,我们将使用存储在.env
文件中的凭据配置 OAuth 2 客户端。
// OAuth 2 configuration
const oauth2Client = new google.auth.OAuth2
(
process.env.CLIENT_ID,
process.env.CLIENT_SECRET,
process.env.REDIRECT_URL
);
在 OAuth 2 配置之后,我们将创建一个路由来验证我们的用户。
app.get('/auth', (req, res) => {
const url = oauth2Client.generateAuthUrl
({
access_type: 'offline',
scope: scopes
});
res.redirect(url);
}
);
当我们的用户访问此路线时,他们将被重定向到 Google 的身份验证页面,该页面将要求向我们的应用程序提供特定的权限。
身份验证成功后,Google 会将用户重定向到我们的重定向 URL(/auth/redirect
)
app.get("/auth/redirect", async (req, res) => {
const {tokens} = await oauth2Client.getToken(req.query.code);
oauth2Client.setCredentials(tokens);
res.send('Authentication successful! Please return to the console.');
}
);
这里我们从查询中获取刷新令牌,并将其作为凭证存储在 中oauth2Client
。这些凭证将帮助我们向 Google 日历 API 发出请求。
以下是完整的代码index.js
:
//index.js
const express = require('express');
const { google } = require('googleapis');
const dotenv = require('dotenv');
const app = express();
dotenv.config();
const port = process.env.PORT || 8000;
app.get('/', (req, res) => {
res.send('Hello World');
}
);
// Define the scope of access for the Google Calendar API.
const scopes = ['https://www.googleapis.com/auth/calendar'];
// OAuth 2 configuration
const oauth2Client = new google.auth.OAuth2
(
process.env.CLIENT_ID,
process.env.CLIENT_SECRET,
process.env.REDIRECT_URL
);
app.get('/auth', (req, res) => {
const url = oauth2Client.generateAuthUrl
({
access_type: 'offline',
scope: scopes
});
res.redirect(url);
}
);
app.get("/auth/redirect", async (req, res) => {
const {tokens} = await oauth2Client.getToken(req.query.code);
oauth2Client.setCredentials(tokens);
res.send('Authentication successful! Please return to the console.');
}
);
在 Google 日历上安排活动
最重要的部分来了!在本部分中,我们将在 Google 日历上安排一项活动!
首先,我们将初始化 Google 日历 API 客户端。
const calendar = google.calendar({
version: 'v3',
auth: oauth2Client
});
接下来,我们将创建一个事件对象,其中我们将添加事件的所有详细信息,例如摘要、位置、开始和结束时间等。
const event = {
summary: 'Tech Talk with Arindam',
location: 'Google Meet',
description: "Demo event for Arindam's Blog Post.",
start: {
dateTime: "2024-03-14T19:30:00+05:30",
timeZone: 'Asia/Kolkata'
},
end: {
dateTime: "2024-03-14T20:30:00+05:30",
timeZone: 'Asia/Kolkata'
},
};
之后,我们将创建一个路线(/create-event
),并在其中创建事件。
这里我们使用该方法在用户的日历中插入一个事件calendar.events.insert()
。
app.get('/create-event', async (req, res) => {
try {
const result = await calendar.events.insert({
calendarId: 'primary',
auth:oauth2Client,
resource: event
});
res.send({
status: 200,
message: 'Event created',
});
} catch (err) {
console.log(err);
res.send(err);
}
}
);
有了它,我们可以在 Google 日历上动态安排事件。
添加 Google Meet 链接:
到目前为止,我们已经探索了如何在 Google 日历上创建一个简单的活动。在本节中,我们将探索如何将 Google Meet 链接添加到该活动!
为此,我们将更新在上一节中创建的事件对象。我们将添加一个conferenceData
属性来指定 Google Meet 链接的创建请求。
conferenceData: {
createRequest: {
requestId: uuid(),
}
},
我们还将添加一个attendees
属性来邀请嘉宾参加活动。以下是一个简单的示例:
attendees: [
{email: 'arindammajumder2020@gmail.com'},
]
现在,Event 对象如下所示:
const event = {
summary: 'Tech Talk with Arindam',
location: 'Google Meet',
description: "Demo event for Arindam's Blog Post.",
start: {
dateTime: "2024-03-14T19:30:00+05:30",
timeZone: 'Asia/Kolkata'
},
end: {
dateTime: "2024-03-14T20:30:00+05:30",
timeZone: 'Asia/Kolkata'
},
colorId: 1,
conferenceData: {
createRequest: {
requestId: uuid(),
}
},
attendees: [
{email: 'arindammajumder2020@gmail.com'},
]
};
接下来,在事件插入步骤中,我们将向conferenceDataVersion
其中添加参数。
const result = await calendar.events.insert({
calendarId: 'primary',
auth:oauth2Client ,
conferenceDataVersion: 1,
resource: event
});
这将创建一个包含 Google Meet 链接的活动。我们也可以像这样在回复中分享该链接:
res.send({
status: 200,
message: 'Event created',
link: result.data.hangoutLink
});
向与会者发送提醒:
好了,我们的项目快完成了,只剩下最后的润色了。现在,我们的项目会直接将活动添加到受邀嘉宾的日历中。
但是,为了通知他们这些事件,我们必须发送一封邮件。为此,我们必须sendUpdates: 'all',
在事件创建部分添加一个参数。这样,应用程序就会自动向受邀嘉宾发送电子邮件。
const result = await calendar.events.insert({
calendarId: 'primary',
auth:oauth2Client ,
conferenceDataVersion: 1 ,
sendUpdates: 'all',
resource: event
});
通过这一附加功能,我们的项目现在可以无缝处理事件创建和电子邮件通知。
测试应用程序:
我们项目的编码部分已经完成。现在,让我们看看它是否能正常工作!
为此,我们将启动该项目!
npm run start
我们已经在 8000 端口启动了服务器!
现在,我们将访问http://localhost:8000/auth/路由来验证用户身份。它会将我们重定向到如下页面:
它会请求应用程序的一些权限
它将重定向到/auth/redirect
带有查询参数的路由code
。
成功验证用户身份后,我们将转到http://localhost:8000/create-event路由来安排事件。
太棒了!这意味着我们的活动是通过 Google Meet 链接创建的。
为了验证事件创建过程是否正常运行,让我们检查一下我们的 Google 日历
太棒了!我们的活动创建成功了,这意味着活动创建路由运行正常!而且我们还收到了一封邀请邮件:
太棒了!我们的应用程序运行完美!
至此,我们已将 Google 日历集成到我们的 Node.js 应用中。在接下来的文章中,我们将探索更多 Google 日历的用例。
到那时,敬请期待!
结论
如果您觉得这篇博文有用,请考虑分享给其他可能受益的人。您也可以关注我,了解更多关于 JavaScript、React 和其他 Web 开发主题的内容。
对于付费合作,请发送电子邮件至:arindammajumder2020@gmail.com
通过Twitter、LinkedIn、Youtube和GitHub与我联系。
感谢您的阅读:)
文章来源:https://dev.to/arindam_1729/i-built-an-event-scheduler-in-nodejs-using-google-calendar-api-4c5b