傘を持たずに家を出て、出先で雨が降る。
仕方がないので、コンビニで傘を買う。
そうやって、捨てられるのを待つだけの傘たちが、家に溢れかえる。
このもどかしさから解放されたい。
結論
こやつをLINEの友達に追加していただくと、雨が降りそうな日の朝6時に、ぼやいてくれます。
※東京限定です
※チャットでの問合せ等は、一切受け付けておりません(傘忘れ防止のためだけに作っただけのボットです)
経緯
最初は、「雨が降りそうな日にLINE通知してくれるボットとかないかなぁ」と調べてみました。
すると、天気を通知してくれるIFTTTというものがありましたが、設定するのが少しばかり億劫でした。
それぐらいなら、天気予報APIとかを叩いて、その結果をLINE Notifyで通知するシェルでも自作してみよう、と思い。
ただ、せっかく作るのであれば、ちょっとしたサービスとして公開してみたいという欲求が湧き出てきました。
構成
そこで、手っ取り早くサービス(と呼ぶには拙いですが)化できそうな以下の構成を考えました。
ソースはココ。
解説
今回作ったシェルの内容です。
- 降水量の情報をWeather Forecast APIから取得
- 降水量の最大値を抽出
- 降水量の最大値(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通知したり、「今日はなんの日?」を毎日通知したり。。
使い方も簡単ですし、もっと良いものが作れるのではないかと可能性を感じています。
コメントを残す