【LINE通知】傘を忘れずに家を出たい【実装】

傘を持たずに家を出て、出先で雨が降る。

仕方がないので、コンビニで傘を買う。

そうやって、捨てられるのを待つだけの傘たちが、家に溢れかえる。

このもどかしさから解放されたい。

結論

こやつをLINEの友達に追加していただくと、雨が降りそうな日の朝6時に、ぼやいてくれます。

※東京限定です

※チャットでの問合せ等は、一切受け付けておりません(傘忘れ防止のためだけに作っただけのボットです)

経緯

最初は、「雨が降りそうな日にLINE通知してくれるボットとかないかなぁ」と調べてみました。

すると、天気を通知してくれるIFTTTというものがありましたが、設定するのが少しばかり億劫でした。

それぐらいなら、天気予報APIとかを叩いて、その結果をLINE Notifyで通知するシェルでも自作してみよう、と思い。

ただ、せっかく作るのであれば、ちょっとしたサービスとして公開してみたいという欲求が湧き出てきました。

構成

そこで、手っ取り早くサービス(と呼ぶには拙いですが)化できそうな以下の構成を考えました。

ソースはココ

解説

今回作ったシェルの内容です。

  1. 降水量の情報をWeather Forecast APIから取得
  2. 降水量の最大値を抽出
  3. 降水量の最大値(mm/hour)が1以上の場合、LINE通知する
#!/bin/bash

## =================
## 定数
## =================

CHANNEL_ACCESS_TOKEN="YOUR_TOKEN"
WEATHER_DATA_FILE="path/to/weather_data.txt"
LOG_FILE="path/to/precipitation.log"
WEATHER_INFOMATION="https://www.google.com/search?q=%E6%9D%B1%E4%BA%AC+%E5%A4%A9%E6%B0%97"
JQ_COMMAND_PATH="/path/to/jq"

## =================
## 関数
## =================

# 天気予報APIから最大降水量取得[mm/hour]
function get_wether_data() {
  curl "https://api.open-meteo.com/v1/forecast?latitude=35.6785&longitude=139.6823&hourly=precipitation" > ${WEATHER_DATA_FILE}
  MAX_PRECIPITATION=$(cat ${WEATHER_DATA_FILE} |${JQ_COMMAND_PATH} '.hourly.precipitation[24:48] | max')
  MAX_PRECIPITATION_INT=$(echo ${MAX_PRECIPITATION} |awk -F '.' '{print $1}')
}

# LINE Messaging APIへPOST
function post_line() {
  MESSAGE=${1}
  curl -v -X POST https://api.line.me/v2/bot/message/broadcast \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer {"'${CHANNEL_ACCESS_TOKEN}'"}' \
  -d '{
    "messages":[
      {
        "type":"text",
        "text":"'${MESSAGE}'"
      }
    ]
  }'
}

## =================
## 主処理
## =================

get_wether_data
if [ 0 -eq ${MAX_PRECIPITATION_INT} ]; then
  :
elif [ 1 -eq ${MAX_PRECIPITATION_INT} ]; then
  MESSAGE="ちょっと降るカモ〜\n最大降水量:${MAX_PRECIPITATION}[mm/hour]\n${WEATHER_INFOMATION}"
  post_line $MESSAGE
elif [ 2 -eq ${MAX_PRECIPITATION_INT} ]; then
  MESSAGE="割と降るカモ〜\n最大降水量:${MAX_PRECIPITATION}[mm/hour]\n${WEATHER_INFOMATION}"
  post_line $MESSAGE
else
  MESSAGE="やばいカモ〜\n最大降水量:${MAX_PRECIPITATION}[mm/hour]\n${WEATHER_INFOMATION}"
  post_line $MESSAGE
fi

# ログ出力
echo "$(date +%Y%m%d), ${MAX_PRECIPITATION}" >> ${LOG_FILE}

exit 0

※ロリポップサーバには、jqコマンドがデフォルトで無かったため、ソースをダウンロードしてきてパスを通しています。

追伸

LINEのAPIは、けっこう便利に使わせてもらっています。

例えば、サーバへのアクセス集中などが発生した時にLINE通知したり、「今日はなんの日?」を毎日通知したり。。

使い方も簡単ですし、もっと良いものが作れるのではないかと可能性を感じています。