GAS를 사용하여 Heroku에 배포한 애플리케이션을 정기적으로 실행

7082 단어 경 6GoogleAppsScript
본고에서는 GAS(Google Apps Script)를 사용하여 Heroku에 배포한 애플리케이션을 정기적으로 실행하는 스크립트를 작성했을 때의 비망록적인 내용이 되어 있습니다.
어디까지나 GAS의 내용이므로, Heroku 어플리케이션의 작성·배포라고 하는 내용은 언급하지 않습니다.

※Heroku 어플리케이션의 작성·배포 방법에 대해서는 과거 기사가 있으므로, 참고까지. . .
Flask+gunicorn을 사용하여 만든 Twitter 연계 앱을 Heroku에 배포한 이야기

전제 조건


  • 정기적으로 실행하려는 Heroku 응용 프로그램이 배포되었습니다
  • Google 계정을 만든 상태

  • GAS 프로젝트 만들기



    GAS 프로젝트를 만듭니다.
  • Google アプリ에서 ドライブ를 선택합니다.
  • 新規를 클릭하고 컨텍스트 메뉴를 その他Google Apps Script로 이동합니다.

  • 이미지와 같이 제목이없는 프로젝트가 만들어지고 스크립트 편집기가 시작됩니다.

  • 保存를 클릭하면 프로젝트 이름 설정 대화 상자가 표시되므로 프로젝트 이름을 test_script로 설정하고 OK를 클릭합니다.


  • GAS 스크립트 작성



    GAS 스크립트를 작성합니다.
  • 스크립트 편집기에 다음 코드를 작성합니다.

    코드.gs
    function setTrigger() {
      var setTime = new Date();
      setTime.setHours(setTime.getHours() + 1);
      setTime.setMinutes(00);
      setTime.setSeconds(00);
      ScriptApp.newTrigger('sendMessage').timeBased().at(setTime).create();
    }
    
    function delTrigger() {
      const triggers = ScriptApp.getProjectTriggers();
      for(const trigger of triggers) {
        if(trigger.getHandlerFunction() == 'sendMessage') {
          ScriptApp.deleteTrigger(trigger);
        }
      }
    }
    
    function sendMessage() {
      delTrigger();
      setTrigger();
      var options = {
        muteHttpExceptions:true
      };
      var url = 'https://AppName.herokuapp.com/';
      var data = UrlFetchApp.fetch(url, options).getContentText();
    }
    
    sendMessage() URL 문자열에 포함된 AppName는 자신의 Heroku 응용 프로그램의 앱 이름으로 바꿉니다.

  • 保存를 클릭하여 스크립트를 저장합니다.

  • GAS 스크립트 실행



    작성한 스크립트를 실행합니다.
  • 関数を選択 콤보 상자에서 SendMessage를 선택하고 実行를 클릭합니다.

  • 실행 결과 확인



    스크립트 실행 결과를 확인합니다.
  • 現在のプロジェクトのトリガー를 클릭합니다.
  • 전환 대상 페이지에 트리거가 추가되면 OK.


  • 해설


  • sendMessage()
    이 스크립트의 주요 함수입니다. 다음 세 가지 기능을 수행합니다.
  • delTrigger()에서 실행된 모든 트리거를 삭제합니다.
  • setTrigger()를 사용하여 다음 런타임에 트리거를 만듭니다.
  • 지정된 URL로 webhook을 건너 뜁니다.

  • setTrigger()
    sendMessage() 런타임에 호출되고 변수setTime에 설정된 시간에 트리거를 만듭니다.
    Date 형식의 setXxxs() 함수를 사용하여 연월 일시 분 초를 설정할 수 있습니다.
    샘플 코드에서는 現在時刻+1時0分0秒 에 트리거가 설정되도록 되어 있습니다.
    트리거는 정기적으로 만들어지므로 위를 바꾸면 毎時0分 트리거가 설정됩니다.
  • delTrigger()
    sendMessage () 실행시에 불려 가 이 스크립트에 의해 작성된 트리거를 모두 삭제합니다.
    이 함수 실행 후 새 트리거가 생성되므로 트리거 목록에는 항상 실행 예정인 트리거만 존재합니다.

  • 참고


  • 신용 카드를 사용하지 않고 linebot을 만들 때 이야기
  • 【GAS】 매일 12:00 그냥 정기 실행하고 싶다! 분 단위로 시간을 지정하여 정기 실행을 실현하는 방법.
  • Google Apps Script에서 사용한 트리거를 삭제하는 방법
  • 좋은 웹페이지 즐겨찾기