![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
COVID-19以来、私のカレンダーはスタンドアップミーティング、チームミーティング、クライアントとの電話会議でいっぱいです。
しかし、イベントのスケジュールを立てたり、ゲストを招待したりするのは退屈な作業です。ある金曜日、これに時間をかけすぎた後、私は思いました。
なぜ私はこれにこれほど多くの時間を費やしているのでしょうか?
そこで、作業を簡素化するためにイベント スケジューラを作成するというアイデアが浮かびました。
この記事では、イベントを作成し、Google Meet リンクを含むメール招待状を自動的に送信できる Nodejs アプリケーションを作成する方法を説明します。
興奮してる?私もだよ。
では、これ以上遅れずに!
さあ始めましょう!
プロジェクトを開始するには、Node.js 環境をセットアップする必要があります。それでは、Node プロジェクトを作成しましょう。ターミナルで次のコマンドを実行します。
npm init -y
これにより、新しい Node.js プロジェクトが初期化されます。
ここで、プロジェクトに必要な依存関係をインストールします。
npm install express googleapis dotenv
これにより、次のパッケージがインストールされます。
.env
ファイルから環境変数を読み込みます。
次に、API 認証情報などの機密情報を安全に保存するための.env
フォルダーを作成します。
//.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
ここで、ルート ディレクトリに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 Cloud Consoleに移動します。
すると、このダッシュボードが表示されます。(以前に 1 つのプロジェクトを作成したので、これが表示されます。別のものが表示される可能性があります)。
ここで、「新しいプロジェクト」ボタンをクリックして、新しいプロジェクトを開始します。
次に、次のような画面が表示されます。ここで、プロジェクトの名前と組織を追加します。このプロジェクトでは、「Mail-integration-Demo」のままにします。次に、作成ボタンをクリックして続行します。
次に、サイドナビゲーションバーに「API とサービス」が表示されます。このセクションには、API とサービスを有効にするサブメニューがあります。これをクリックして続行します。
次に、このプロジェクトで使用する API、つまり Google カレンダー API を有効にします。
その後、OAuth 同意画面に進みます。ここで、ユーザー タイプとして外部を選択します。次に、[作成] ボタンを押して続行します。
次に、アプリ登録ページに移動します。ここで、アプリケーションに関する詳細情報を追加します。まず、アプリの名前とユーザー サポート用のメール アドレスを追加します。
このプロジェクトでは、「Arindam のメール統合」という名前を付け、サポート用に自分のメール アドレスを使用します。
次に、アプリケーションの範囲を定義する必要があります。
スコープでは、このプロジェクトに必要なuserinfo.email
やuserinfo.profile
などの権限を追加します。
その後、アプリケーションにテストユーザーを 1 人追加します。
これで完了です。アプリケーションがプラットフォームに登録されました。
ここで、OAuth クライアント ID シークレットを作成します。そのためには、「資格情報の作成」部分に進みます。
ここで、アプリケーションの種類と名前を追加します。このプロジェクトでは、Web アプリケーションであり、名前は Arindam's Mail Demo です。
また、リダイレクト URL を 1 つ追加しました。このプロジェクトでは、 http://localhost:8000/auth/redirect
になります。
次に、OAuth 認証情報を取得します。
次に、API キーを作成します。
これをすべて実行したら、先ほど生成した API キーと OAuth 認証情報を使用して.env
ファイルを更新します。
これで、このプロジェクト用のGoogle Cloudコンソールの設定が完了しました。次のセクションに進みましょう。
これまで、基本的なプロジェクト設定は完了しました。次に、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 Calendar 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 カレンダー 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 カレンダーで簡単なイベントを作成する方法について説明してきました。このセクションでは、そのイベントに Google Meet リンクを追加する方法について説明します。
そのために、前のセクションで作成したイベント オブジェクトを更新します。Google Meet リンクの作成リクエストを指定するために、 conferenceData
プロパティを追加します。
conferenceData: { createRequest: { requestId: uuid(), } },
また、ゲストをイベントに招待するためのattendees
プロパティも追加します。以下に簡単な例を示します。
attendees: [ {email: '[email protected]'}, ]
これで、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: '[email protected]'}, ] };
次に、イベント挿入手順で、 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 });
これでプロジェクトはほぼ完了です。あとは最後の仕上げを残すのみです。今のところ、私たちのプロジェクトは招待されたゲストのカレンダーにイベントを直接追加します。
ただし、これらのイベントについて通知するには、メールを 1 つ送信する必要があります。そのためには、イベント作成部分にパラメータsendUpdates: 'all',
1 つ追加する必要があります。これにより、アプリケーションは招待されたゲストに自動的にメールを送信します。
const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1 , sendUpdates: 'all', resource: event });
この追加により、プロジェクトではイベントの作成と電子メール通知の両方をシームレスに処理できるようになりました。
プロジェクトのコーディング部分は完了しました。それでは、動作するかどうか確認してみましょう。
そのためにプロジェクトを始めます!
npm run start
これで、ポート 8000 でサーバーを起動できました。次に、ユーザーを認証するためにhttp://localhost:8000/auth/ルートに移動します。次のようにリダイレクトされます。
アプリケーションに対して何らかの許可を求められます。
code
クエリ パラメータを使用して/auth/redirect
ルートにリダイレクトします。
ユーザーの認証に成功したら、 http://localhost:8000/create-eventルートに移動してイベントをスケジュールします。
素晴らしい!これは、Google Meet リンクを使用してイベントが作成されたことを意味します。
イベント作成プロセスが正しく機能していることを確認するには、Googleカレンダーを確認しましょう。
すごいですね!イベントが作成されました。つまり、イベント作成ルートは完璧に機能しています!また、招待メールも届きました。
素晴らしい!アプリケーションは完璧に動作しています!
これで、Google カレンダーを Node.js アプリに統合できました。次の記事では、Google カレンダーのさらなる使用例について説明します。
それまで、お楽しみに!
このブログ投稿が役に立った場合は、役に立つと思われる他の人と共有することを検討してください。また、Javascript、React、その他の Web 開発トピックに関するその他のコンテンツについては、私をフォローしてください。
有料コラボレーションについては、 [email protected]までメールでお問い合わせください。
Twitter 、 LinkedIn 、 YouTube 、 GitHubで私とつながりましょう。
読んでくれてありがとう:)