💨
Google Apps Script でWebページの更新を検知しメール送信する
よくありそうな要件ですが、備忘録的に残しておきます。
実現したい要件
Webページに更新があったら、自分のメール宛に通知を行う
実装方針
- Google Apps Script で開発を行う
- 毎日1回、指定したWebページのデータを取得し、ハッシュ値を保存
- Googleスプレッドシートに取得したハッシュ値を保存しておく
- 前回のハッシュ値と結果が異なる場合、Webページに変更があったとみなしてメール送信する
実装
Googleスプレッドシートを作成 → Google Apps Script を記述する
function checkAndUpdate() {
// チェックするWebページのURLを記述し、HTMLコードを取得。SHA256でハッシュ値を生成する
const targetUrl = "任意のURL";
const response = UrlFetchApp.fetch(targetUrl);
const currentHash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, response.getContentText()).toString();
// ハッシュ値を保存するシートとセルを指定する
const spreadsheetId = "ID文字列"; // 自分のスプレッドシートのIDを入力
const sheetName = "シート名"; // シート名を入力
const range = "A1"; // セル範囲を入力
// メール送信先のアドレス
const mailto = "メールアドレス"; // 送信先のメールアドレスを入力
// スプレッドシートから前回のハッシュ値を取得
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);
const prevHash = sheet.getRange(range).getValue();
// 前回のハッシュ値と比較
if (prevHash !== currentHash) {
// 更新があった場合、スプレッドシートに現在のハッシュ値を保存し、メールを送信
sheet.getRange(range).setValue(currentHash);
MailApp.sendEmail(mailto, "Webページが更新されました", "以下のページが更新されました。" + targetUrl);
} else {
// 更新がなかった場合
Logger.log("更新はありませんでした。");
}
}
トリガーの設定
Google Apps Script の[トリガー]を選択
- イベントのソース
- 時間主導型
- 時間ベースのトリガーのタイプを選択
- 日付ベースのタイマー
- 時刻を選択
- トリガー起動したい時間帯を指定
で、トリガーを保存。
ログを見ながら、正常に動作しているかを確認します。
Discussion