사이트 상태 확인

당신의 사이트는 현재 실행 중입니까?만약 당신의 사이트가 닫혔다면, 통지를 받는 것이 좋지 않습니까?구글 응용 프로그램 스크립트와 구글 폼을 사용하면 매일 당신의 사이트 목록을 검사하고 그 중 어느 사이트에 문제가 생기면 이메일을 보낼 수 있습니다.

스프레드시트 설정


  • 새 스프레드시트를 만듭니다.
  • Sheet1이라는 워크시트를 사이트로 변경합니다.
  • 4열 생성:
  • 이름
  • 웹 주소
  • 상태
  • 마지막 검사
  • 검사할 사이트마다 사이트 이름과 URL을 정의합니다.스크립트 실행이 완료되면 상태 및 마지막 검사 열이 채워집니다.
  • 스크립트 편집기



    우리 코드를 좀 쓰기 시작합시다!Google Sheets에는 편리한 스크립트 편집기가 있습니다.
  • 도구 > 스크립트 편집기로 이동합니다.
  • 스크립트 편집기는 시작 기능을 포함합니다.모든 코드를 삭제할 수 있습니다.
  • 파일 > 저장으로 이동합니다.스크립트 항목의 이름을 지정하고 [확인]을 선택합니다.
  • 사이트 상태 확인


    checkStatus라는 함수를 만듭니다.이 기능은 사이트 테이블에서 데이터를 얻고 각 사이트에 요청을 보내 상태를 검사한다.
    function checkStatus() {
    
    }
    
    함수에 코드를 계속 추가합시다.sheet이라는 변수를 만듭니다.이것은 Websites라는 작업표를 얻어서 Sheet 대상을 되돌려줍니다. 이 대상은 우리가 필요로 하는 다른 기능을 제공합니다.
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Websites');
    
    rows라는 변수를 만듭니다.이것은 사이트 작업표의 데이터 줄과 열에서 나온 수조이다.
    var rows = sheet.getDataRange().getValues();
    
    issues라는 변수를 만듭니다.이것은 얼마나 많은 문제를 발견했는지 기록할 것이다.
    var issues = 0;
    
    행과 열 배열의 첫 번째 항목은 제목 줄을 표시하는 것이다.사실 열 제목은 필요 없다.shift 함수를 사용하여 그것들을 그룹에서 삭제합니다. 이 함수는 그룹의 첫 번째 항목을 삭제합니다.
    rows.shift();
    
    checkStatus 기능을 실행할 때마다 Status 및 Last Check 열에서 이전 값과 형식을 지워야 합니다.C열의 두 번째 줄에서 시작하여 D열이 끝날 때까지 range을 만듭니다. 이것은 기본적으로 D열의 데이터를 최대한 많이 사용합니다. Clear 함수를 사용하여 모든 내용을 지웁니다.
    sheet.getRange('C2:D').clear();
    
    이제 데이터 줄을 순환해서 봅시다.
    for (var i = 0; i < rows.length; i++) {
    
    }
    
    순환하는 모든 교체를 위해row라는 변수를 만듭니다.줄은 사실상 하나의 열수조이다.첫 번째 열은 0부터 시작하기 때문에, 0 번째 줄은 웹 사이트의 이름인 Name의 열이 될 것이다.
    이 값을 저장하기 위해name이라는 변수를 만듭니다.사이트의 URL, 즉 [1]줄을 저장하기 위해 URL이라는 변수를 만듭니다.
    값을 OK 문자열로 설정하는 status라는 변수를 만듭니다.color라는 변수를 만들고 값을 16진수 색상 #bfb로 설정합니다.상태가 정상이면 셀의 배경색이 됩니다.
    타임스탬프라는 변수를 만듭니다.이것은 검사를 실행하는 날짜와 시간을 제공할 것이다.
    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가 아닌 경우 상태 값을 OK에서 ISSUE로 변경합니다.색상 값을 #bfb에서 #faa, 즉 빨간색으로 변경합니다.문제 수를 1 증가시킵니다.
    상태 및 타임스탬프 값을 사용하여 상태 및 마지막 체크 열을 업데이트하고 배경색을 설정합니다.
    UrlFetchApp류의fetch 함수를 사용할 때 속도 제한이 존재합니다.구글은 짧은 시간 안에 자주 호출되는 것을 좋아하지 않는다.구글은 이런 제한을 피하기 위해 1초의 지연을 늘릴 것을 제안했다.
    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라는 함수를 만듭니다. 전자 우편으로 문제를 발견했다는 것을 알립니다.
    만약 전자 우편 클라이언트가 html 전자 우편을 허용한다면, '전자 표' 라는 단어는 전자 표를 가리키는 링크가 될 것이다.만약 전자 우편 클라이언트가 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 함수를 실행하는 것보다 스크립트 편집기를 만듭니다. 그러면 우리는 전자 표의 메뉴 도구 모음에서 그것을 실행할 수 있습니다.
    사용자 정의 메뉴를 만드는 가장 좋은 시간은 스프레드시트가 처음 열릴 때입니다.온오픈 트리거를 사용합니다. 이 트리거는 전자 표를 처음 열 때 실행됩니다.
    스프레드시트에 관리라는 사용자 정의 메뉴를 추가합니다.관리 메뉴를 선택하면 검사 상태라는 메뉴 옵션이 표시됩니다.CheckStatus(상태 점검)를 선택하면 checkStatus(상태 점검)라는 기능이 실행됩니다!
    function onOpen() {
    
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    
      var menuOptions = [{
        name: 'Check Status',
        functionName: 'checkStatus'
      }];
    
      spreadsheet.addMenu('Manage', menuOptions);
    
    }
    

    시간 기반 트리거



    스크립트를 실행하는 사용자 정의 메뉴가 있습니다. 이것은 수동 프로세스입니다.이 과정을 자동화하기 위해 스크립트를 시간 기반 트리거에서 실행합시다!
  • 스크립트 편집기에서 편집 > 현재 항목의 트리거로 이동합니다.
  • 트리거 추가를 선택합니다.
  • 실행할 기능 선택 필드에서 checkStatus를 선택합니다.
  • 이벤트 소스 선택 필드에서 시간 제어를 선택합니다.
  • 시간 기반 트리거 유형 선택 필드에서 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);
      }
    
    }
    

    Dell 웹 사이트를 방문하십시오.https://nightwolf.dev페이스북과 페이스북에서 지켜봐주세요!

    좋은 웹페이지 즐겨찾기