LINE Notifyの提供終了が発表されています。
LINE Notify提供終了のお知らせ
後継サービスのMessaging APIに変更するため、以下のように記載を変更します。
LINE Notifyに関する記述:【終了予定】を追加
LINE Messaging APIに関する記述:【追記】を追加
概要
気象庁から天気予報データを取得、必要情報を抽出してLINEに通知するLambdaを作成して、Eventbridgeで毎朝7時に起動するよう設定しました。
準備
- 事前にLINE Notifyのアクセストークンを取得【終了予定】
- LINE Messaging API設定しチャネルアクセストークンとユーザーIDを取得【追記】
- エリアコードの確認
https://www.jma.go.jp/bosai/common/const/area.json
東京地方は130000です。
作成
- Lambda作成
Lambda作成方法は他の有志の方の記事または公式を参照ください。
なお、PythonのRequestsモジュールをLambdaで使用するためにはLayerの追加の必要があります。- エリアコードは東京地方の天気を対象としています
- 抽出データは、時間、天気、6時間ごとの降水確率と最高気温です
- 【LINE Notifyアクセストークン】を取得したアクセストークンに置き換えてください
LINE Notifyを利用【終了予定】
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
LINE Messaging APIを利用【追記】
【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時に起動するようスケジュールします。
実行結果
以下のように表示されれば成功です。
出典
以下の気象庁ホームページを利用して作成
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