[LINE Notify]毎朝天気通知をLINEで送ってもらう

## 筆者の環境

- Ubuntu18.04(KAGOYA VPS KVM)

## LINE Notifyって何

- 自分のラインアカウントに対してメッセージで通知出来るサービス
- IFTTTやGitHubと連携して通知を送信する事も可能

詳細は[こちら](https://notify-bot.line.me/ja/)

## 特徴

- 既存のLINE Notifyアカウントからメッセージを送信してお知らせを通知する

<img width="375" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/266455/5a148821-d385-ed65-dda4-95a853bd007a.png">


- グループに対してメッセージを送信する事も可能

- LINE Messaging APIの無料枠とは異なり、自発的にメッセージを送信する事が可能

## 試しに通知を送信してみる

### 1. LINE Notifyのページでトークンを発行する

[こちら](https://notify-bot.line.me/ja/)のページにアクセスし、ログインします。

右上のメニューから、「登録サービス管理」を開きます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/266455/a04e4e91-dadc-7b56-75a7-1b831681bce5.png)


ページ下部の「トークンを発行する」から、通知名の入力と通知を送りたい対象を選択して発行します、今回は自分自身を選択しています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/266455/5cb1af95-a395-5602-63e3-6ab714ec7488.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/266455/1981c1d1-cab4-ed9a-5e48-e433456dc3c7.png)


トークンはコピーしてメモ帳などに張り付けておきます、わからなくなってしまった場合は再発行ができないため、「トークンを発行する」から発行しなおします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/266455/8a62b4a1-9116-8a8b-d8e6-a54ddee061bc.png)


Ubuntuで以下コマンドを実行し、トークンを使用しての通知ができる事を確認します。

```shell
$ notifyKey="コピーしたトークン"
$ message="この部分はsakkuntyoが指定したメッセージです"
$ curl -X POST -H "Authorization: Bearer ${notifyKey}" -F "message=${message}" https://notify-api.line.me/api/notify
{"status":200,"message":"ok"}
```

statusが200でない場合は、トークンが間違っているため、再確認してください。

ラインに通知が来た事を確認します。

<img width="375" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/266455/4b473cbb-9fd0-a440-1e8e-cb2fda0e356f.png">


このmessage変数を変える事で、お知らせする内容を変える事ができます。

## 毎朝天気通知を送る

### 1. 天気情報を取得する

既に準備されている天気予報ページから、ウェブスクレイピングをして天気情報を取得したいと思います。

東京の天気情報が欲しいので、スクレイピングするページを決めます。

```alert
ウェブスクレイピングはページに負荷がかかるため~~ばれないように~~迷惑をかけない程度にやりましょう。
```

私は[ここ](https://tenki.jp/forecast/3/16/)にしました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/266455/e760b690-4ede-025e-1eed-30973d81b9ad.png)


この部分に天気の概要が載っているため、ここの情報を取得したいと思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/266455/2f9fc9fa-cb6b-f215-6b6b-172b71f3caf5.png)

curlとsedを駆使した所、以下のコマンド形式で取得できる事がわかりました。

```shell
$ curl https://tenki.jp/forecast/3/16/ | grep forecast-comment | sed -e "s/.*forecast-comment\">//g" -e "s/<\/div>.*//g"
きょうの関東地方は北部は晴れていますが、南部では雲が多くなっています。午後2時までの最高気温は東京17.2度、横浜17.5度、 千葉17.4度、さいたまは15.9度と、日中でも上着が欠かせなくなりました。このあとは、晴れ間が出ている所でも、次第に雲が多くなるでしょう。夜は南部を中心に雨が降りやすくなりそうです。あすは昼頃まで、曇りや雨の天気でしょう。
```

### 2.取得した天気情報をメッセージにする

このコマンドの結果をmessage変数にセットする様に変更し、

この一連のコマンドを/usr/local/bin/tenki.shに書き込みます。

```shell
notifyKey="コピーしたトークン"
message=`curl https://tenki.jp/forecast/3/16/ | grep forecast-comment | sed -e "s/.*forecast-comment\">//g" -e "s/<\/div>.*//g"`
curl -X POST -H "Authorization: Bearer ${notifyKey}" -F "message=${message}" https://notify-api.line.me/api/notify
{"status":200,"message":"ok"}
```

このままでは実行できないので、tenki.shに実行権限を付与しておきます。

```shell
$ chmod +x /usr/local/bin/tenki.sh
-
```

問題無く動作する事を確認しておきます。

```shell
$ /usr/local/bin/tenki.sh
{"status":200,"message":"ok"}
```

<img width="375" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/266455/fa87b39b-b737-3270-5ae5-130c702a31a4.png">


### 3.定期実行する

cronを利用します、設定は/etc/crontabを編集して行います。

cronが入っているかわからない、入っていない場合は以下コマンドを実行してインストールします。

```shell
$ sudo apt install cron -y
-
```

以下一行を/etc/crontabに追記します。

毎朝８時、rootユーザーで/usr/local/bin/tenki.shを実行する

といった内容となっています。

```shell
00 08 * * * root /usr/local/bin/tenki.sh
```

これで毎朝天気の通知が届く様になります。