【GAS × LINE Notify】 장마 시기에 전철 지연 많기 때문에 LINE에 통지 해 보았다

소개



긴급 사태 선언이 끝나 잠시 동안은 텔레워크가 계속되었지만, 6월 말에서 그것도 끝 전철 통근이 시작되었습니다··.
일단 텔레워크를 맛보면 통근의 쓸데없는 시간에 많은 스트레스를 느끼는 매일입니다.
게다가 최근에는 장마 시즌이기 때문에, 전철 지연으로 불필요한 좌절.
집에 나가기 전에 전철의 지연이 없는지 확인하면 됩니다만, 「오늘은 괜찮겠지.」라고 수수께끼의 자신으로 확인하지 않고 언제나 집을 나와 있습니다. 웃음

그래서 내가 사용하는 전철이 지연되고 있는 경우는, 통지해 주는 구조를 갖고 싶다. 라고 하는 생각과 공부도 되기 때문에 LINE에 지연 정보를 통지해 주는 기능을 만들었습니다.

이번에 만든 이미지는 이런 느낌.



환경



파이썬으로 스크래핑하여 얻은 정보를 가공하여 그 정보를 던지는 방법도 생각했지만, 스스로 서버를 준비하거나 cron의 설정을 생각하는 것이 귀찮아서, 「GAS x LINE Notify」가 간편하게 할 수 있을 것이므로 이번은 이 조합으로 했습니다. (상당히 오래된 것 같지만...)

LINE Notify에서 액세스 토큰 발급


  • 'LINE Notify'로 이동하여 로그인
  • "액세스 토큰 발행 (개발자 용)"의 "토큰 발행"을 누르십시오.
  • "토큰 이름"을 기입 (지연 통지와 나는 설정했습니다), 통지를 송신하는 토크 룸을 선택 후 「발행한다」를 누르
  • 표시된 액세스 토큰을 GAS에서 사용하므로 메모할 때.

  • GAS에서 지연 정보를 얻고 LINE Notify에 던지는 코드 작성



    1. 「 Google 드라이브 」에 로그인(Google 계정 없는 분은 작성해 주세요)
    2. 로그인 후 [신규] → [기타] → [Google Apps Script]를 누르십시오.
    3. GAS 코드를 작성하고 지연 정보는 "철도 com 지연 정보 JSON"에서 가져 왔습니다.

    delayNotify.gs
    // LINE Notify アクセストークン
    // -- [1] --
    const LINE_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty("LINE_ACCESS_TOKEN");  
    // 鉄道路線名
    // -- [2] --
    const LINE_NAME = PropertiesService.getScriptProperties().getProperty("LINE_NAME"); 
    // 遅延情報
    var delayInfo = "";
    
    // 遅延情報あれば通知、なければ何もしない
    function notify() {
      if (isDelay(getDelayInfo())) {
        sendDelayInfo(delayInfo);
      }
    }
    
    // 電車が遅延しているか
    function isDelay(json) {
      // 遅延していれば遅延情報の初期値を上書き
      if(json.find(j => j.name === LINE_NAME)) {
        delayInfo = LINE_NAME + "が遅延してるんご...。";
        return true;
      }
      return false;
    }
    
    // 遅延情報JSONを鉄道comのRSSから取得
    function getDelayInfo() {
      return JSON.parse(
        UrlFetchApp.fetch(
          "https://tetsudo.rti-giken.jp/free/delay.json"
        ).getContentText()
      );
    }
    
    // 遅延情報をLINEへ送信
    function sendDelayInfo(delayInfo) {
      const options = {
        method: "post",
        payload: "message=" + delayInfo,
        headers: {
          Authorization: "Bearer " + LINE_ACCESS_TOKEN
        }
      };
      UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
    }
    

    작성한 코드를 버전 관리하고 싶습니다.



    만든 코드 자체는 버전 관리하고 싶었기 때문에, 액세스 토큰 키를 베타 쓰는 것은 조금... 해서 조사한 결과, GAS에 프로퍼티를 설정하고, 그 프로퍼티를 사용할 수 있다고 하는 것 같으므로, 이하 기사를 참고로 했습니다.
  • 【GAS】코드에 API 토큰이나 ID의 베타 쓰기를 피한다! (속성 서비스의 활용)

  • GAS Properties Service를 사용하여 스크립트 속성을 읽고 씁니다)
    코드 자체는 위의 delayNotify.gs 서두 주석 [1], [2]에서 찾을 수 있습니다. 이번에는 LINE Notify에서 발급한 액세스 토큰을 'LINE_ACCESS_TOKEN'으로, 지연 통지 대상 노선명을 'LINE_NAME'으로 설정했습니다. 쉽게 할 수 있네요. 스고이...
  • // LINE Notify アクセストークン
    // -- [1] --
    const LINE_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty("LINE_ACCESS_TOKEN");  
    // 鉄道路線名
    // -- [2] --
    const LINE_NAME = PropertiesService.getScriptProperties().getProperty("LINE_NAME"); 
    

    GAS 발화를 위한 트리거 설정


  • 「현재의 프로젝트의 트리거」를 눌러(풍선 시계 마크)

  • 전환 후 트리거 설정 화면에서 오른쪽 하단의 "트리거 추가"
  • 트리거 설정을 다음과 같이 설정하고 저장합니다.
    이것으로 모든 설정이 완료됩니다. 지연이 발생하면 통지됩니다.

  • 사이고에게



    약간의 일상적인 불만이라도 간단하게 코드를 만드는 것만 해소되는 것이 좋네요. 이번은 지연된 노선명 밖에 보내고 있지 않지만, 향후는 보다 상세를 보낼 수 있도록 개량해 나가고 싶습니다. 소스 코드는 에도 관리하고 있으므로 여가가 있으면 앞으로도 봐 주세요.

    마지막으로 한마디
    텔레워크 최고야.

    좋은 웹페이지 즐겨찾기