ウェブサイトのステータスチェック


あなたのウェブサイトは現在稼働中ですか?あなたのウェブサイトがダウンしていた場合、通知を取得するのはいいことではないだろうか?Google AppsのスクリプトとGoogleのシートを使用して、何かをあなたのウェブサイトのリストをチェックして何かを作成し、それらのいずれかがダウンしている場合にメールをしましょう.

表計算


  • 新しいスプレッドシートを作成します.
  • Sheet 1というシートをウェブサイトにリネームします.
  • つの列を作成します
  • 名称
  • URL
  • ステータス
  • ラストチェック
  • あなたがチェックしたいと思う各ウェブサイトのウェブサイトの名前とURLを定義します.ステータスと最後のチェック列は、実行時にスクリプトによって設定されます.
  • スクリプトエディタ



    コードを書き始めましょう!Googleシートには便利なスクリプトエディタがあります.
  • ツール「スクリプト」エディタに移動します.
  • スクリプトエディタは起動機能を含みます.すべてのコードを削除できます.
  • 「ファイル」「保存」に移動します.スクリプトプロジェクトに名前を付け、OKを選択します.
  • チェックウェブサイトステータス


    チェックステータスと呼ばれる関数を作成します.これは、ウェブサイトのシートからデータを取得し、各Webサイトに要求を行う機能は、そのステータスをチェックします.
    function checkStatus() {
    
    }
    
    関数にコードを追加し続けましょう.シートと呼ばれる変数を作成します.これは、ウェブサイトと呼ばれるSheet オブジェクトは、必要な追加機能を提供します.
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Websites');
    
    行という変数を作成します.これは、ウェブサイトシートからのデータの行と列の配列です.
    var rows = sheet.getDataRange().getValues();
    
    問題と呼ばれる変数を作成します.これは、多くの問題が発見されたのを追跡します.
    var issues = 0;
    
    行と列の配列の最初のエントリは列見出しの行です.列の見出しは本当に必要ありません.配列から最初のエントリを取り除きます.
    rows.shift();
    
    チェックステータス関数が実行されるたびに、ステータスと最後のチェック列の前の値と書式をクリアする必要があります.クリエイトアrange 列C行2から始まり、列Dで終わると、基本的には、列Dにデータがある限り、明確な関数を使ってすべてをクリアします.
    sheet.getRange('C2:D').clear();
    
    今、データの行をループしましょう.
    for (var i = 0; i < rows.length; i++) {
    
    }
    
    ループの反復処理ごとに行と呼ばれる変数を作成します.行は実際に列の配列です.最初の列は0から始まるので、ROW [ 0 ]はnameという名前の列になります.
    nameという名前の変数を作成し、その値を格納します.ウェブサイトのURLを格納するURLと呼ばれる変数を作成します.
    ステータスと呼ばれる変数を作成し、その値をOKの文字列に設定します.色と呼ばれる変数を作成します.値は値です.ステータスがOKならば、これはセルの背景色になります.
    タイムスタンプという変数を作成します.これは、チェックが実行された日時を提供します.
    var row = rows[i];
    var name = row[0];
    var url = row[1];
    var status = 'OK';
    var color = '#bfb';
    var timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'M/d/Y h:m a');
    
    セルにURLが存在する場合は、URLにリクエストを行い、レスポンスコードを保存します.
    応答コードが200以外の何かであるならば、それはOKを意味します.色の値を△bfbから赤のfaaに変更します.インクリメント問題は1カウントされます.
    ステータスとタイムスタンプの値とステータスと最後のチェック列を更新し、同様に背景色を設定します.
    When using the fetch function of the UrlFetchApp クラスの制限があります.Googleはあまりにも頻繁に短い時間のフレームで呼ばれるようには好きではない.1秒遅れを加えることは、その制限を避けるために、Googleから推薦です.
    if (url) {
    
      var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
      var responseCode = response.getResponseCode();
    
      // There's an issue if the response code is greater than 200.
      if (responseCode > 200) {
        status = 'ISSUE';
        color = '#faa';
        issues++;
      }
    
      // Update Status and Last Check columns with results.
      sheet.getRange(i + 2, 3, 1, 2).setValues([[status, timestamp]]).setBackground(color);
    
      // There are rate limits when using UrlFetch so it's recommended to add a delay in between each request.
      Utilities.sleep(1000);
    
    }
    

    送信メール通知


    スプレッドシートをチェックするのではなく、すべての時間、私たちに通知された問題が見つかったメールを送信する通知と呼ばれる関数を作成しましょう.
    電子メールクライアントがHTMLメールを可能にするならば、Wordスプレッドシートはスプレッドシートへのリンクです.電子メールクライアントがHTMLメールを扱うことができないならば、それはちょうどプレーンテキストを表示します.
    があるlimit どのように多くのメールで一日に送信することができます.
    function notify() {
    
      var recipient = Session.getEffectiveUser().getEmail();
      var subject = 'Website Status Check: Issues Found';
      var body = 'Check spreadsheet for issues found.';
      var spreadsheetUrl = SpreadsheetApp.getActiveSpreadsheet().getUrl();
      var html = '<p>Check <a target="_blank" href="' + spreadsheetUrl + '">spreadsheet</a> for issues found.';
      var options = { htmlBody: html };
    
      if (MailApp.getRemainingDailyQuota() > 0) {
        MailApp.sendEmail(recipient, subject, body, options);
      }
    
    }
    
    ループが終了したら、問題の数が0より大きいかどうかを調べましょう.問題がある場合は、通知機能を呼び出すメールを送信します.
    if (issues > 0) {
      notify();
    }
    

    カスタムメニュー


    スクリプトエディターからCheckStatus機能を実行する代わりに、スプレッドシートのメニューツールバーから実行できるように作成しましょう!
    カスタムメニューを作成する最良の時間は、スプレッドシートが最初に開きます.スプレッドシートが最初に開かれたときに実行されるOnOpenトリガを使用します.
    管理メニューと呼ばれるスプレッドシートにカスタムメニューを追加します.管理メニューを選択すると、チェックステータスと呼ばれるメニューオプションが表示されます.チェックステータスを選択すると、CheckStatusと呼ばれる関数が実行されます!
    function onOpen() {
    
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    
      var menuOptions = [{
        name: 'Check Status',
        functionName: 'checkStatus'
      }];
    
      spreadsheet.addMenu('Manage', menuOptions);
    
    }
    

    時間ベーストリガ



    スクリプトを実行するカスタムメニューを持つことは良いですが、それは手動のプロセスです.プロセスを自動化するには、スクリプトを時間ベースのトリガに実行してみましょう!
  • スクリプトエディター内で、「現在のプロジェクトのトリガ」を編集します.
  • 「トリガーを追加」を選択します.
  • 「実行する関数を選択」フィールドでチェックステータスを選択します.
  • 「選択イベントソース」フィールドで、時刻駆動を選択します.
  • 「時間ベースのトリガの選択タイプ」フィールドで、Day Timerを選択します.
  • 「日の選択時間」フィールドで、スクリプトを実行したい時間範囲を選択します.
  • 「失敗通知設定」フィールドで、スクリプトが実行に失敗した場合に通知する頻度を選択します.
  • 最終コード


    // Create custom menu when spreadsheet opens.
    function onOpen() {
    
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    
      var menuOptions = [{
        name: 'Check Status',
        functionName: 'checkStatus'
      }];
    
      spreadsheet.addMenu('Manage', menuOptions);
    
    }
    
    // Check status of each website in Websites sheet.
    function checkStatus() {
    
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Websites');
      var rows = sheet.getDataRange().getValues();
      var issues = 0;
    
      // Remove column headings row.
      rows.shift();
    
      // Clear Status and Last Check columns.
      sheet.getRange('C2:D').clear();
    
      // Loop through rows in sheet and make a request to website url.
      for (var i = 0; i < rows.length; i++) {
    
        var row = rows[i];
        var name = row[0];
        var url = row[1];
        var status = 'OK';
        var color = '#bfb';
        var timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'M/d/Y h:m a');
    
        if (url) {
    
          var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
          var responseCode = response.getResponseCode();
    
          // There's an issue if the response code is greater than 200.
          if (responseCode > 200) {
            status = 'ISSUE';
            color = '#faa';
            issues++;
          }
    
          // Update Status and Last Check columns with results.
          sheet.getRange(i + 2, 3, 1, 2).setValues([[status, timestamp]]).setBackground(color);
    
          // There are rate limits when using UrlFetch so it's recommended to add a delay in between each request.
          Utilities.sleep(1000);
    
        }
    
      }
    
      // Notify me if there are issues.
      if (issues > 0) {
        notify();
      }
    
    }
    
    // Send email notification.
    function notify() {
    
      var recipient = Session.getEffectiveUser().getEmail();
      var subject = 'Website Status Check: Issues Found';
      var body = 'Check spreadsheet for issues found.';
      var spreadsheetUrl = SpreadsheetApp.getActiveSpreadsheet().getUrl();
      var html = '<p>Check <a target="_blank" href="' + spreadsheetUrl + '">spreadsheet</a> for issues found.';
      var options = { htmlBody: html };
    
      if (MailApp.getRemainingDailyQuota() > 0) {
        MailApp.sendEmail(recipient, subject, body, options);
      }
    
    }
    

    当社のウェブサイトをご覧くださいhttps://nightwolf.devとFacebook上で私たちに従ってください!