💨

Google Apps Script でWebページの更新を検知しメール送信する

2024/09/19に公開

よくありそうな要件ですが、備忘録的に残しておきます。

実現したい要件

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