Google 캘린더에 등록되어 있는 예정을 전날 밤에 리마인드해 주는 라인 Bot 작성해 보았다!

Google 캘린더의 내일 일정을 알려주는 LINE을 만들려고했습니다.



대체로 3시간 정도로 완성했다.
한 곳에서 막힌 곳이 있기 때문에 거기가 없으면 더 빨랐을 것입니다 ...

기능 소개



Google 캘린더에 등록되어 있는 예정을 전날 밤 LINE에서 알려 주는 LINE Notify.

개발 경위



평소, 예정의 관리를 Google 캘린더로 하고 있지만, 곤란한 것에, 잊는다, 원래 보는 것이 귀찮게 생각되어 왔다…
다만, 예정을 푹 빠뜨리면 선방에 무례하므로, 어쨌든 피해야 한다…

거기서, 매일 밤 내일의 예정을 알려 주는 LINE bot를 실장하면, 좋은 것이라고 생각해 개발했다.
엄밀히 말하면 Line bot가 아니라 LINE Notify였습니다.

만들기



①LINE notify의 등록.





Line Notify는 이쪽으로부터

로그인하면 마이페이지에서 어디에 알려줄지(개발자 본인의 LINE인지 그룹인지)를 선택한다.
토큰이 발행되기 때문에 이것을 메모 메모.

②GAS 스크립트 작성



그런 다음 Google 앱 스크립트 스크립트를 작성하는 작업.
스프레드시트 메뉴 > 도구 > 스크립트 <>로 이동



여기!

음, 이번에 구현하는 두 가지 기능
  • [a] Google 캘린더에서 내일 일정을 스프레드 시트로 출력
  • [b] 스프레드 시트에 출력 된 내용을 LINE으로 전달

  • 곧, [a]의 기능으로부터 실장해 간다.
    Google 캘린더의 콘텐츠를 스프레드시트에 출력하려면 캘린더 설정에서 캘린더 ID를 확인하세요.


    function calendar() {
    
    //1 スプレッドシートを読み込む
      var sp =SpreadsheetApp.getActiveSheet(); 
    
    //2 カレンダーをIDで読み込む
      var cal=CalendarApp.getCalendarById( '*自分のカレンダーID*' ); 
    
    //3 カレンダーのイベントの期間を指定
      var date = new Date();
      var today = new Date(date.getFullYear(),date.getMonth(),date.getDate()+1,0,0);   
      var endday = new Date(date.getFullYear(),date.getMonth(),date.getDate() + 1,23,59);
      var event = cal.getEvents(today,endday); 
    
      sp.clear();
    
    //4 イベントをスプレッドシートへ書き出す
      for(var i=1;i<event.length+1; i++){
        sp.getRange('a'+i).setValue(event[i-1].getTitle());          //イベントタイトル
        sp.getRange('b'+i).setValue(event[i-1].getStartTime());        //イベント開始時刻  
        sp.getRange('c'+i).setValue(event[i-1].getEndTime());         //イベント終了時刻
      }
    
    };
    
    

    다음으로②의 실장.
    이쪽은, 특별히 문제 없다…
    function postContent() {
      var sheet =SpreadsheetApp.getActiveSheet(); 
      var LastRow = sheet.getLastRow();
      var content = "\nこんばんにゃ\n定時なので明日の予定をお知らせするぞ~\n\n";
    
      if (LastRow === 0) {
          content +="明日の予定はなし\n有意義に過ごせ!\n\n"
        }
        else {
    
      for (var n=1;n<=LastRow;n++){
      var title=sheet.getRange(n, 1).getValue();
      var start=sheet.getRange(n, 2).getValue();
      var end=sheet.getRange(n, 3).getValue();
      var schedule = title + ": \n"+start+"から"+end+"まで\n\n";
      content +=schedule  
      }
        }
    
      content += "\n以上";
      sendPostContent(content);
    }
    
    function sendPostContent(content) {
      var token = ['*Line Notifyのアクセストークン*'];
      var options = {
        "method": "post",
        "payload" : {"message": content },
        "headers": {"Authorization": "Bearer " + token}    
      };
      UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
    }
    
    
    

    이제 라인에 전달한 결과!



    뭐야? 날짜와 시간을 알 수 없습니다!
    영어 버전이 아니야 www

    당연하지만 이것을 일본어판으로 바꾸고 싶다!

    거기서, 여러가지 격투했다…
    스프레드시트의 표시 형식을 변경해 보거나 출력 형식을 변경해 보거나…etc

    결국, LINE에 둔 본문의 표시 형식을 바꾸면 올 오케이였다!
    Utilities.formatDate()라는 함수가 아무래도 있다고 하는 정보를 얻었으므로, 즉시 구현!
    var jst_start = Utilities.formatDate(start,"JST","yyyy年M月d日 H時m分");
    var jst_end = Utilities.formatDate(end,"JST","yyyy年M月d日 H時m分");
    

    이런 느낌.

    결국 이뤄졌다고 하는 것이, 이하의 녀석.
    function postContent() {
      var sheet =SpreadsheetApp.getActiveSheet(); 
      var LastRow = sheet.getLastRow();
      var content = "\nこんばんにゃ\n定時なので明日の予定をお知らせするぞ~\n\n";
    
      if (LastRow === 0) {
          content +="明日の予定はなし\n有意義に過ごせ!\n\n"
        }
        else {
    
      for (var n=1;n<=LastRow;n++){
      var title=sheet.getRange(n, 1).getValue();
      var start=sheet.getRange(n, 2).getValue();
      var end=sheet.getRange(n, 3).getValue();
      var jst_start = Utilities.formatDate(start,"JST","yyyy年M月d日 H時m分");
      var jst_end = Utilities.formatDate(end,"JST","yyyy年M月d日 H時m分");
    
      var schedule = title + ": \n"+jst_start+"から"+jst_end+"まで\n\n";
      content +=schedule  
      }
        }
    
      content += "\n以上";
      sendPostContent(content);
    }
    
    function sendPostContent(content) {
      var token = ['*Line Notifyのアクセストークン*'];
      var options = {
        "method": "post",
        "payload" : {"message": content },
        "headers": {"Authorization": "Bearer " + token}    
      };
      UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
    }
    
    
    



    이것으로 일본어가 되었다! !

    마지막으로 지금까지 쓴 2개의 함수를 각각 정시 실행하도록 설정해 버려!



    이 시계 같은 놈을 눌러,
    트리거 추가에서 함수 지정
    (이번이라면 calender와 postContent)



    이런 느낌으로 하면 OK!
    calender를 먼저 정시 실행하도록 조심해! !

    이상, Google 캘린더의 예정을 전날의 밤에 리마인드 해 주는 LINE Notify의 구현이었습니다!
    피드백 기다리고 있습니다!

    좋은 웹페이지 즐겨찾기