0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【GAS × LINE Notify】梅雨時期で電車遅延多いからLINEに通知してみた

Posted at

はじめに

緊急事態宣言が終わり暫くの間はテレワークが続きましたが、6月末でそれも終わり電車通勤が始まりました・・。
一度テレワークを味わうと、通勤の無駄な時間にだいぶストレスを感じる毎日です。
その上最近は梅雨シーズンでもあるため、電車遅延で余計イライラ。
家出る前に電車の遅延がしていないか確認すればいいだけですが、「今日は大丈夫だろ。」と謎の自信で確認せずにいつも家をでています。笑

なので私が使う電車が遅延している場合は、通知してくれる仕組みが欲しいな。という思いと勉強にもなるのでLINEに遅延情報を通知してくれる機能を作りました。

今回作ったイメージはこんな感じ。

IMG_0227.jpg

環境

pythonでスクレイピングして取得した情報を加工して、その情報を投げるという方法も考えましたが、自前でサーバーを用意したりcronの設定やらを考えるのが面倒くさくて、「GAS x LINE Notify」が手軽にできそうなので今回はこの組み合わせにしました。(結構使い古されているっぽいけど..。)

LINE Notifyからアクセストークンを発行する

  1. LINE Notify」にアクセスしログイン
  2. 「アクセストークンの発行(開発者向け)」の「トークンを発行する」を押下
  3. 「トークン名」を記入(遅延通知と私は設定しました)、通知を送信するトークルームを選択後「発行する」を押下
  4. 表示されたアクセストークンを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にプロパティを設定して、そのプロパティを使えるとうことみたいなので、以下記事を参考にさせていただきました。

// LINE Notify アクセストークン
// -- [1] --
const LINE_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty("LINE_ACCESS_TOKEN");  
// 鉄道路線名
// -- [2] --
const LINE_NAME = PropertiesService.getScriptProperties().getProperty("LINE_NAME"); 

GASを発火させるためのトリガーを設定

  1. 「現在のプロジェクトのトリガー」を押下(吹き出し時計マーク)
    delay.PNG
  2. 遷移後のトリガー設定画面から右下の「トリガーを追加」
  3. トリガーの設定を以下のように設定し保存(時間は間隔は好みで大丈夫です)trigger.PNG
    これで、全設定は完了です。遅延が発生すると通知されるようになります。

さいごに

ちょっとした日常の不満とかも、簡単にコードを作るだけ解消されるのがいいですね 。今回は遅延した路線名しか送っていないが、今後はもっと詳細を送れるように改良していきたいです。ソースコードはこちらにも管理しているので暇があれば今後も見てください。

最後に一言
テレワーク最高だよね。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?