AWS LambdaとEventbridgeを使って毎朝7時に気象庁天気予報をLINEに通知

<font color="Red">
LINE Notifyの提供終了が発表されています。

[LINE Notify提供終了のお知らせ](https://notify-bot.line.me/closing-announce)
後継サービスのMessaging APIに変更するため、以下のように記載を変更します。
LINE Notifyに関する記述：【終了予定】を追加
LINE Messaging APIに関する記述：【追記】を追加

</font>

# 概要
気象庁から天気予報データを取得、必要情報を抽出してLINEに通知するLambdaを作成して、Eventbridgeで毎朝7時に起動するよう設定しました。

# 準備
- 事前にLINE Notifyのアクセストークンを取得<font color="Red">【終了予定】</font>
- LINE Messaging API設定しチャネルアクセストークンとユーザーIDを取得<font color="Red">【追記】</font>
- エリアコードの確認
  https://www.jma.go.jp/bosai/common/const/area.json
  東京地方は130000です。

# 作成
- Lambda作成
  Lambda作成方法は他の有志の方の記事または公式を参照ください。
  なお、PythonのRequestsモジュールをLambdaで使用するためにはLayerの追加の必要があります。
    - エリアコードは東京地方の天気を対象としています
    - 抽出データは、時間、天気、6時間ごとの降水確率と最高気温です
    - 【LINE Notifyアクセストークン】を取得したアクセストークンに置き換えてください

<font color="Red">LINE Notifyを利用【終了予定】</font>
```python.py
import requests
import json
import io

def lambda_handler(event, context):
    try:
        # import data from jma
        jma_url = "https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json"
        jma_json = requests.get(jma_url).json()

        jma_timeDefines0 = jma_json[0]["timeSeries"][0]["timeDefines"][0]
        jma_weathers0 = jma_json[0]["timeSeries"][0]["areas"][0]["weathers"][0]
        jma_pops0 = jma_json[0]["timeSeries"][1]["areas"][0]["pops"][0]
        jma_pops1 = jma_json[0]["timeSeries"][1]["areas"][0]["pops"][1]
        jma_pops2 = jma_json[0]["timeSeries"][1]["areas"][0]["pops"][2]
        jma_temps1 = jma_json[0]["timeSeries"][2]["areas"][0]["temps"][1]

        # replace
        jma_timeDefines0 = jma_timeDefines0.replace('T',' ')
        jma_weathers0 = jma_weathers0.replace('　','')
        
        headers = {
           'Authorization': 'Bearer 【LINE Notifyアクセストークン】',
        }

        # Post to LINE
        files = {
            'message': (None, '東京の天気\n' + jma_timeDefines0[:16] + '発表\n'\
             + '天気: ' + jma_weathers0 + '\n'\
             + '降水確率6H毎: ' + jma_pops0 + '% ' + jma_pops1 + '% ' + jma_pops2 + '%\n'\
             + '日中最高気温: ' + jma_temps1 + '°C'),
        }

        requests.post('https://notify-api.line.me/api/notify', headers=headers, files=files)

    except Exception as e:
        print('ERROR: bad Event!', flush=True)
        raise
```
<font color="Red">LINE Messaging APIを利用【追記】</font>
【CHANNEL ACCESS TOKEN】は取得したチャネルアクセストークン、【USERID】は取得したユーザーIDを使用します
```python.py
import requests
import json
import io

def lambda_handler(event, context):
    try:
        # import data from jma
        jma_url = "https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json"
        jma_json = requests.get(jma_url).json()

        jma_timeDefines0 = jma_json[0]["timeSeries"][0]["timeDefines"][0]
        jma_weathers0 = jma_json[0]["timeSeries"][0]["areas"][0]["weathers"][0]
        jma_pops0 = jma_json[0]["timeSeries"][1]["areas"][0]["pops"][0]
        jma_pops1 = jma_json[0]["timeSeries"][1]["areas"][0]["pops"][1]
        jma_pops2 = jma_json[0]["timeSeries"][1]["areas"][0]["pops"][2]
        jma_temps1 = jma_json[0]["timeSeries"][2]["areas"][0]["temps"][1]

        # replace
        jma_timeDefines0 = jma_timeDefines0.replace('T',' ')
        jma_weathers0 = jma_weathers0.replace('　','')
        
        headers = {
            "content-type": "application/json",
            "Authorization": "Bearer 【CHANNEL ACCESS TOKEN】",
        }
        
        # Post to LINE
        data = {
            "to": "【USERID】",
            "messages":[
                {
                    "type":"text",
                    "text":"東京の天気\n" + jma_timeDefines0[:16] + "発表\n"\
                           + "天気: " + jma_weathers0 + "\n"\
                           + "降水確率6H毎: " + jma_pops0 + "% " + jma_pops1 + "% " + jma_pops2 + "%\n"\
                           + "日中最高気温: " + jma_temps1 + "°C"
                }
            ]
        }
        
        requests.post('https://api.line.me/v2/bot/message/push', headers=headers, data=json.dumps(data))

    except Exception as e:
        print('ERROR: bad Event!', flush=True)
        raise
```
- Eventbridge
  他の記事や公式情報を参照いただき、上記Lambdaを毎朝7時に起動するようスケジュールします。

# 実行結果
以下のように表示されれば成功です。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/08e6ce79-94a6-40ff-9f30-f8e8bf60bd07.png">

# 出典
以下の気象庁ホームページを利用して作成
https://www.jma.go.jp/bosai/common/const/area.json
https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json

気象庁ホームページについて 利用規約
https://www.jma.go.jp/jma/kishou/info/coment.html