DiscordとGoogleカレンダーをGASでスムーズに連携する方法
GASでDiscordとGoogleカレンダーを連携
GASを使えばDiscordの情報をGoogleカレンダーに自動で反映させることができます。まず、APIキーを設定し、Webアプリとしてデプロイするところから始めます。
DiscordのWebhooksを作成
Discordでのイベントをトリガーにするため、まずWebhooksを設定します。ディスコードのチャンネル設定から、簡単に行えます。
1. Discordサーバーを開き、対象のチャンネルを選んでください。
2. 「チャンネル編集」から「統合」メニューに入り、「Webhook」を選択します。
3. 「新しいWebhook」をクリックし、WebhookのURLをコピーします。
GASの基本設定とスクリプトの作成
次に、GASを使ってWebhooksからのデータを受け取り、Googleカレンダーに追加します。
function doPost(e) {
const data = JSON.parse(e.postData.contents);
const calendar = CalendarApp.getDefaultCalendar();
calendar.createEvent(
data.title,
new Date(data.startTime),
new Date(data.endTime),
{description: data.description}
);
}
このスクリプトは、受け取ったデータをJSON形式で解析し、既定のGoogleカレンダーに予定を追加します。
GASをWebアプリとしてデプロイ
Google Apps ScriptをWeb Appとしてデプロイすることで、外部からHTTPリクエストを受け取れます。
デプロイ手順
1. GASエディタの「プロジェクトをクラウドに保存してデプロイ」ボタンをクリックします。
2. 「新しいデプロイ」を選択し、タイプを「ウェブアプリ」として設定してください。
3. 必要な権限を設定し、ウェブアプリとしてデプロイします。
これで、指定したURLへPOSTリクエストを送るとGASが反応するようになります。
練習問題
次の問題に取り組みましょう。DiscordからGASに送られるJSONデータが次のような形だったと仮定します。
どのようにスクリプトを修正すべきか考えてみてください。
JSONデータ:
{
"title": "Meeting",
"startTime": "2023-11-01T15:00:00Z",
"endTime": "2023-11-01T16:00:00Z",
"description": "Project meeting for Q4."
}
練習問題の解答・解説
function doPost(e) {
const data = JSON.parse(e.postData.contents);
const title = data.title ?? "No Title";
const startTime = new Date(data.startTime);
const endTime = new Date(data.endTime);
const description = data.description ?? "";
const calendar = CalendarApp.getDefaultCalendar();
calendar.createEvent(
title,
startTime,
endTime,
{description: description}
);
}
このスクリプトでは、POSTリクエストから受け取るデータをJSONとして解析し、それに基づいてカレンダーのイベントを作成します。
?? は、データが存在しない場合にデフォルト値を設定するために使用するオプショナルチェーンです。
CalendarApp.getDefaultCalendar() を使って、既定のカレンダーにアクセスし createEvent メソッドでイベントを追加します。