Massage API + GAS로 기차 지연 정보를 푸시 알림

소개



LINE Bot에서 통근 전철의 지연 정보를 마음대로 통보해 주면 편하다고 생각해 만들었습니다.
post 통지(자신으로부터 들으면 대답해 준다)이라면 공식이기도 하지만, JR과 메트로라든지 같은 어플에서는 할 수 없는 것이 마음이 나쁘구나-(´・ω・`)라고 생각하고 있었습니다.

거친 사양



・지연 정보를 마음대로 보내 온다(지연하지 않으면 통지 없음)
・사용하는 노선을 지정할 수 있다
・보낼 시간을 지정할 수 있다

흐름



1. LINE developer 등록하기
2. google 계정을 만들고 google APPS script 사용
3. 스크립트 작성 및 실행 시간 지정
4. 끝

상세



LINE developer 등록하기



할애합니다.
그그레는 얼마든지 나오기 때문에. .
PUSH 알림을 받으려면 평가판이나 프로 계정이어야 합니다.
(인원수 제한 있음을 참을까, 유키치를 사용하는가.. 나는 트라이얼로 하고 있습니다)

google 계정을 만들고 google APPS script 사용



할애합니다.
Google 계정은 이미 가지고있을 것이며 GAS도 그그레 바로 열리기 때문에. .

스크립트 작성 및 실행 시간 지정



코드는 다음
// line developersに書いてあるChannel Access Token
var access_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
// pushしたいときに送る先のuser_idを指定する
var to1 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
var to2 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
// 路線リストのスプレッドシートid
var spreadsheet_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

//電車遅延情報をJSON形式で取得
var json = JSON.parse(UrlFetchApp.fetch("https://rti-giken.jp/fhc/api/train_tetsudo/delay.json").getContentText());
//シートとその最終行数、シートのデータを取得
var SheetID = SpreadsheetApp.openById(spreadsheet_id);
var mySheet = SheetID.getSheetByName("list");
var maxRow = mySheet.getDataRange().getLastRow();
var myVars = mySheet.getDataRange().getValues(); 


//pushするときの設定

function push(text) {
  //var url = "https://api.line.me/v2/bot/message/push";    //1userへ送る場合はpushでOK
  var url = "https://api.line.me/v2/bot/message/multicast";
  var headers = {
    "Content-Type" : "application/json; charset=UTF-8",
    'Authorization': 'Bearer ' + access_token,
  };

  var postData = {
    "to" : [to1,to2],
    "messages" : [
      {
        'type':'text',
        'text':text,
      },
      {
        'type':'text',
        'text':text,
      }
    ]
  };

  var options = {
    "method" : "post",
    "headers" : headers,
    "payload" : JSON.stringify(postData)
  };

  return UrlFetchApp.fetch(url, options);
}


 //reply_tokenを使ってreplyする

function reply(data) {
  var url = "https://api.line.me/v2/bot/message/reply";
  var headers = {
    "Content-Type" : "application/json; charset=UTF-8",
    'Authorization': 'Bearer ' + access_token,
  };

  var postData = {
    "replyToken" : data.events[0].replyToken,
    "messages" : [
      {
        'type':'text',
        'text':data.events[0].message.text,
      }
    ]
  };


   var options = {
   "method" : "post",
   "headers" : headers,
   "payload" : JSON.stringify(postData)
  };

  return UrlFetchApp.fetch(url, options);
}

//postされたときの処理

function doPost(e) {
  var post = JSON.parse(e.postData.contents);
  var data = SpreadsheetApp.openById(spreadsheet_id).getSheetByName('log').getRange(1, 1).setValue(json.events);

  reply(post);
}

//pushするときの処理
function trainDelayInfo() {

  var body = "電車の遅延";

  for(var i=2;i<=maxRow;i++){ 

    var name = myVars[i-1][1-1];
    var company = myVars[i-1][2-1];

    for each(var obj in json){
      if(obj.name === name && obj.company === company){
        body = company + name + "が遅延しています";
          push(body);
      }
    }
  }

  if(body === "電車の遅延"){ 
    //body = company + name + "が遅延してない";
    push("遅延なし");
  }

}

조금 설명



지연 정보를 취득하는 일람은 스프레드 시트에 기재한다
아래와 같이 기재.


철도 일람은 이하로부터 배차하고 있어, 같은 이름으로 기재할 필요가 있다.
h tps://r 치기켄. jp/fhc/아피/t 라이언_테츠도/ 

**스프레드시트를 참조하려면 다음이 필요합니다.
// 路線リストのスプレッドシートid
var spreadsheet_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 →「https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit」スプレッドシート開いたURLのxxxをコピペ

//シートとその最終行数、シートのデータを取得
var mySheet = SheetID.getSheetByName("list");
 →スプレッドシートのシート名を書くここではlistという名前
 →シート名logを作成しておけばpostした時のログがでる

Line developer의 관리 화면에서 다음 항목도 확인
// line developersに書いてあるChannel Access Token
var access_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
// pushしたいときに送る先のuser_idを指定する
var to = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

이제 "trainDelayInfo"를 실행하면 대상 user_id에 알림이 올 것입니다. .
문제 없으면 트리거 세트하고 완료! !

빠진 곳



· 스프레드 시트를 참조 오류가 발생합니다.
→ spreadsheet_id를 지정하지 않으면 참조할 수 없다. 다른 사이트에서는 생략하고 있는지 명시적으로 쓰지 않은 곳이 있지만 그대로 흉내내면 빠진다.

참고하겠습니다 m(_ _)m



htps : // bg. pnks. 네 t/2018/06/03
htps : //가 되어-t. 이 m /가 s-와 rk-t 라인-에서 y-sp re d d e t /

앞으로 보수하고 싶은 곳



・post했을 때에 기차 지연 정보를 돌려준다(지금은 앵무새 반환)
push 통지 상대의 복수에의 대응(2018/10/01 갱신)
· user_id 자동 추가
・정말은 lambda+APIGW를 사용하고 싶다. .

요약



의외로 시간이 걸렸습니다 (코나 미칸
 

좋은 웹페이지 즐겨찾기