LINE Notify와 Gas를 사용해 ~Google 캘린더 예정 통지편~

요전날 치과 의사의 예정을 날려버렸기 때문에, GAS를 사용해 LINE에 예정을 통지하는 기능을 만들었습니다.
(다른 기사에서 LINE에서 일정 등록, 변경, 취소 하는 기능에 대해서도 쓰고 있습니다.)

※ GAS의 사용법, LINE Notify에 대해서 등은 그 밖에 많이 기사가 나와 있으므로 할애하고 있습니다.

LINE에 일정 알림



매주 일요일 밤에 1주일 분의 일정을, 전날 밤에 다음 날의 일정을 보내도록 합니다.

만드는 것







사전 준비



1) GAS(Google Apps Script) 환경
2) LINE Notify의 액세스 토큰

구현



1) Google 캘린더로부터 일정을 취득
//1週間分
function getScheduleForWeek() {
  let tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate() + 1);

  let oneWeekLater = new Date();
  oneWeekLater.setDate(oneWeekLater.getDate() + 8);

  let events = CalendarApp.getDefaultCalendar().getEvents(tomorrow, oneWeekLater);
  if(events.length === 0) {
    sendTolLine("\n来週の予定はありません。");
  }
  let event = setWeekEventsForDisplay(events);
  sendTolLine('\n↓来週の予定です。\n\n' + event);
}

//1日分
function getScheduleForDay() {
  let tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate() + 1);
  let events = CalendarApp.getDefaultCalendar().getEventsForDay(tomorrow);
  if(events.length === 0 || events === undefined) {
    sendTolLine("\n明日の予定はありません。");
  }
  let event = setDayEventsForDisplay(events);
  sendTolLine('\n↓明日の予定です。\n\n' + event);
}

2) 취득한 예정을 성형(여기는 취향의 문제)
const arrayDay = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']

//1週間分の予定を表示用にセット
function setWeekEventsForDisplay(events)
{
  let beforeDayOfTheWeek = '';
  let count = 1;
  let event = ""; 

  for (let i in events) {
    let title = events[i].getTitle(); //タイトル
    let startDay = new Date(events[i].getStartTime());
    let startTime = Utilities.formatDate(startDay, "JST", "HH:mm"); //開始時間
    let endTime = Utilities.formatDate(events[i].getEndTime(), "JST", "HH:mm"); //終了時間

    let numberOfDay = startDay.getDay(); //曜日番号を取得
    let newdayOfTheWeek = arrayDay[numberOfDay];

    if(beforeDayOfTheWeek !== newdayOfTheWeek) {
      beforeDayOfTheWeek = newdayOfTheWeek;
      count = 1;
      event += "-------------\n" + beforeDayOfTheWeek + "\n-------------\n";
    }
    event += count + "件目\n予定:" + title + "\n開始時間:" + startTime + "\n終了時間:" + endTime + "\n\n";
    count = Number(count) + 1;
  }
  return event;
}

//1日分の予定を表示用にセット
function setDayEventsForDisplay(events)
{
  let event = ""; 
  for (let i in events) {
    let count = Number(i) + 1;
    let title = events[i].getTitle();
    let startTime = Utilities.formatDate(events[i].getStartTime(), "JST", "HH:mm");
    let endTime = Utilities.formatDate(events[i].getEndTime(), "JST", "HH:mm");
    event += count + "件目\n予定:" + title + "\n開始時間:" + startTime + "\n終了時間:" + endTime;
    event += (count !== events.length)?  "\n\n" : "";
  }
  return event;
}

3) LINE에 일정을 보내기
function sendTolLine(message)
{
  let token = "{LINE Notifyのアクセストークン}";
  let options = {
    "method": "post",
    "payload": `message=${message}`,
    "headers": {
      "Authorization": `Bearer ${token}`
    }
  };
  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

알림 트리거



GAS의 트리거 기능을 사용하여 정해진 시간에 일정을 알리도록 합니다. (매우 편리!)
세세한 설정 방법은 조사하면 많이 나옵니다만, 이런 느낌으로 주기(일마다, 월별 등), 시간을 선택할 수 있습니다.



마지막으로



자신을 위해 적당하게 만들었기 때문에 전혀 리팩토링 할 수 없습니다.
그리고, 예정 통지도 LINE Bot를 사용하고 싶었습니다만 LINE Notify를 사용하는 방법 밖에 모릅니다.
전부 1개의 채널로 완결시키고 싶다. . . 좋은 방법 아시는 분이라면 꼭 가르쳐 주세요.

좋은 웹페이지 즐겨찾기