概要
GoogleDriveの変更通知をDiscord Webhookで通知する機能の作成
Google App Script (以下gasと表記する)を利用し、定期的に処理を実行する事で変更履歴を監視し更新があった場合通知する
-
Google App Scriptとは
Googleが提供しているサービス(Google Driveやスプレッドシートなど)を操作したり、拡張することが出来る機能
.gs という拡張子を利用する、書式はJavaScript
環境構築
gasはブラウザ上のgas管理画面上でコーディングする事は可能だが、
バージョン管理やショートカット、インテリセンスなどを利用したいので、vscode上で開発する
Googleが提供しているgasのCLIツールを利用する事でローカルで開発できる
vscodeでの環境構築は下記参照
実装
今回のプロジェクト
JavaScriptの言語仕様などは割愛
Driveのアクティビティ取得
Googleが提供しているDriveActivityAPIという機能を利用する事で、Google Driveのアクティビティを取得する事が出来る
DriveActivity.Activity.query(parameter)関数を利用する事で引数のパラメータに当てはまるActivityを取得できる
今回使っていないパラメータや、詳細を知りたい場合は公式のリファレンスを参照
const request = {
// アクティビティの取得範囲を指定 (直前10件サーチ)
pageSize: 10,
// アクティビティを取得するフォルダのIDを指定 (items/フォルダID)
ancestorName: "items/" + rootFolderId,
// アクティビティの取得範囲を指定 (since: 直前10分)
filter: since ? `time > ${since}` : "",
consolidationStrategy: { legacy: {} },
};
console.log(request);
try {
// Activity.queryメソッドはGoogle Driveの過去のアクティビティをクエリします。
const response = DriveActivity.Activity.query(request);
Discordへのメッセージ送信
UrlFetchApp.fetch()関数を利用する事で、HTTPリクエストを送信できます
Discord Webhookについては調べるか
/**
* Google Drive 更新通知をDiscordに送信
* @param {Discord送信メッセージ} message
*/
function postToDiscordWebhook(message, folderId) {
const url = PropertiesService.getScriptProperties().getProperty(
"DISCORD_WEBHOOK_URL"
);
// フォルダのURLと名前を取得
let driveLink = DriveApp.getFolderById(folderId).getUrl();
let driveName = DriveApp.getFolderById(folderId).getName();
UrlFetchApp.fetch(url, {
method: "post",
contentType: "application/json",
payload: JSON.stringify({
content: "Google Drive 変更通知",
embeds: [
{
title: driveName,
url: driveLink,
description: message,
color: 5620992,
},
],
}),
});
}
Google Driveの設定
ドライブの情報を読み取るためには フォルダID を利用する事で、ドライブ内のどのフォルダを読み込むかを設定できます
GAS管理画面での設定
利用するサービスの登録と認証
上記のAPIなどを利用するには、アプリケーション設定に追加する必要があります
画面左のサービスの+ボタンから、Googleが提供しているAPIを利用する事が出来ます
今回は Drive と DriveActivity をバージョンとIDはデフォルトそのままで利用します
これらを追加して関数を実行すると、初回実行時は権限の認証画面が出てくるので、Googleアカウントでログインして許可します
正常に実行されると、Discordへ結果が送信されます
環境変数の登録
gasにはスクリプトプロパティという機能があり、環境変数のようなものを定義できます
画面左のプロジェクトの設定タブから設定し、今回はこれらのプロパティを使用しています
トリガー登録
gasはトリガーを設定する事で、定期的に実行することが出来ます
今回は10分おきに関数を実行するトリガーを設定しています
無料分で使える量には限りがあるので注意してください
参考資料