내일 Google 캘린더 일정을 LINE Notify로 자동 알림

YouTube : htps: //같다. 베/우미 sぇ키 DpQ

아래 준비(LINE Notify 토큰 획득)



LINE측의 설정을 우선은 해 나갈 필요가 있습니다.

아래 준비①



자신의 LINE을 열고 이메일 주소와 비밀번호를 설정하십시오.
※설정이 끝난 분은 수속 불필요

iPhone의 경우





Android의 경우





아래 준비②



LINE Notify 로 이동하여 로그인할 수 있는지 확인합니다.


Google 스프레드 시트를 열고 스크립트 시트 열기 (컨테이너 바인드 스크립트)



스프레드시트 열기.

툴의 스크립트 에디터를 선택하면 아래와 같은 화면이 된다.

여기에 코드를 씁니다.

소스 코드



code.js

// ここに発行したアクセストークンを書く
const token = "*********";

// ここにカレンダーIDとカレンダー名を書く。ここに書いたカレンダーのみリマインド対象になる
const calendarTitleMap = {
  "********@gmail.com" : "****のカレンダー",
  "********@group.v.calendar.google.com" : "****のカレンダー" // 例: "ja.va#[email protected]" : "バチカンのカレンダー"
};

const weekday = ["", "", "", "", "", "", ""];

function notifyEvent() {
  const calendars = CalendarApp.getAllCalendars();
  let dt = new Date();// dateオブジェクトの生成
  dt.setDate(dt.getDate() + 1); //明日をdtにセット
  let tomorrow = Utilities.formatDate(dt, 'Asia/Tokyo', 'M/d(' + weekday[dt.getDay()] + ')');

  let message = `\n【明日${tomorrow}の予定】\n\n`;
  let dayText = "";

  // 取得した予定の数だけfor文でまわす
  for(i in calendars) {

    let calendar = calendars[i];
    let calendarName = calendarTitleMap[calendar.getId()]
    if ( calendarName == undefined ) {
      continue; // カレンダー名が設定されてなければパス
    }

    let events = calendar.getEventsForDay(dt);
    if( events.length == 0 ) {
      continue;
    }

    // カレンダー名を添えたい場合
    dayText += "< " + calendarName + " >\n";

    // イベントの数だけfor文でまわす
    for(e in events) {
      dayText += toDayText(events[e]);
    }
    dayText += "\n"
  }

  if ( dayText == "") {
      dayText += "予定はありません\n\n";
  }
  message += dayText;

  console.log(message);

  // LINE送信
  sendToLine(message);
}

function sendToLine(message){
  const options =
   {
     "method"  : "post",
     "headers" : {"Authorization" : "Bearer "+ token},
     "payload" : "message=" + message
   };

   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

function toDayText(event) {
  return toTimeText(event.getStartTime()) + ' - ' + toTimeText(event.getEndTime()) + " " + event.getTitle() + '\n';
}

function toTimeText(str){
  return Utilities.formatDate(str, 'Asia/Tokyo', 'HH:mm');
}


발행한 토큰과 적절한 이메일 주소를 입력하고 실행을 누르면 통지가 됩니다.



날짜가 이상하다면



아래 설정을 변경하면 OK
(기본의 타임 존이 「GMT-05:00」으로 설정되어 있으므로, 일본 표준시인 「GMT+09:00」으로 설정할 필요가 있습니다)



파일에 새 appsscript.json가 새로 표시되므로 아래 코드로 변경

appsscript.json
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}



트리거 설정 예



매일 LINE에 알리기 위해 트리거 설정을 Google 측에서 설정할 수 있습니다.
예를 들어 매일 밤 오후 8시~9시에 내일 알림을 보내는 설정으로 설정하는 경우 아래 설정에서 트리거를 추가할 수 있습니다.

실행할 함수: notifyEvent
배포 시 실행: Head
이벤트 소스: 시간 수동형
시간 기반 트리거 유형: 날짜 기반 타이머
시간:오후 8시~9시



해설



용어 해설


  • 함수
  • 소스 코드의 내용이 쓰여진 상자와 같은 것

  • 인수
  • 함수에 제공하는 매개 변수


  • 사용하는 함수 설명



  • CalendarApp.getAllCalendars()
  • 내 Google 캘린더에 공유 된 모든 캘린더 목록을 가져옵니다


  • new Date()
  • 날짜를 처리하기위한 객체 만들기


  • .setDate()
  • 지정된 날짜의 현지 시간에 따라 해당 월의 날짜를 설정합니다.


  • .getDate()
  • 지정된 일자의 현지 시간에 따라 그 달의 일을 돌려줍니다.


  • Utilities.formatDate (인수 1, 인수 2, 인수 3)
  • 지정된 서식으로 일시를 취득. 인수는 객체 이름, 시간대 (JST 등), 형식, 순서.
  • “JST”란, Japan Standard Time의 이니셜을 취한 약어로, 일본 표준시를 말한다.


  • getEventsForDay (날짜 객체)
  • 지정된 일자에 등록되어 있는 예정 이벤트를 모두 취득


  • 작성중인 함수의 개요 설명



  • sendToLine()
  • LINE 보낸다. 인수에 메시지


  • toDayText()
  • 약속을 지정된 형식으로 변환


  • toTimeText()
  • 날짜와 시간을 지정된 형식으로 변환


  • YouTube : htps: //같다. 베/우미 sぇ키 DpQ

    좋은 웹페이지 즐겨찾기