見出し画像

OpenWeatherMap APIとLINE Notifyを使って気圧変化を通知する

 前の記事はこちら「OpenWeatherMap APIを使って気圧変化を検知する

 前の記事で、体調不調の要因と思われる気圧の急上昇を見つけて知ることができるようになりました。
 ですが、これを知りたいのが自分自身でない場合、何かしらの方法で伝えたくなります。そこで、コミュニケーションツールのLINEで通知するようにします。

 この仕組みを考えるにあたり、LINE株式会社の下記URLを参照しました。
・LINE Notify:・LINE Notify API Document:https://notify-bot.line.me/doc/ja/

 LINEで通知するには自分自身がLINEを使っている必要があります。
その上、メールアドレスを登録も必要です。これにより、スマホアプリだけでなく、パソコンからもLINEを利用できるようになります。
 LINEアプリは有名なので手順記載を割愛します。

【前提条件】
・APIとは何か、APIを使うには、を知っている。
・LINEを利用している、かつ、メールアドレスを登録している。

【事前準備】
・LINE Notifyの利用登録を行う。
・LINE通知したい人、LINE Notifyが入っているLINEグループを作成する。
・通知したいLINEグループへのアクセストークンを生成する。

【作ったもの】
 LINEで通知するために、下記のような関数を定義しました。

def send_line(msg):
    url_line = "https://notify-api.line.me/api/notify"
    headers = {"Authorization""Bearer " + アクセストークン}  #Bearerの後ろにブランク必要
    payload = {"message": msg}
    requests.post(url_line, headers=headers, params=payload)

【ざっくり解説】
1行目:関数の宣言。引数として変数msgを渡す。msgには通知する文字列を入れる。
2行目:LINE通知するためのURL。
3行目:LINE通知する際に、POST形式でrequestを投げる(5行目)。この際、アクセストークン情報をヘッダーに追加するので、その情報を定義する。なお、Bearerの後ろにブランク1つ必要なので見逃し注意。
4行目:LINE通知するメッセージをペイロード部分に入れる。
5行目:2-4行目の情報を用いてPOST形式でrequestを投げる。

【作ったもの】

import requests
import json
import pandas as pd
from datetime import datetime, timedelta, timezone

def send_line(msg):
    url_line = "https://notify-api.line.me/api/notify"
    headers = {"Authorization""Bearer " + アクセストークン}  #Bearerの後ろにブランク必要
    payload = {"message": msg}
    requests.post(url_line, headers=headers, params=payload)


url = "http://api.openweathermap.org/data/2.5/forecast?lat=緯度&lon=経度&appid=APIキー
jsondata = requests.get(url).json()
tz = timezone(timedelta(hours=+9), "JST")

df = pd.DataFrame()

for data in jsondata["list"]:
    jst = str(datetime.fromtimestamp(data["dt"], tz))[:-9]
    kiatsu = data["main"]["pressure"]
    temp_data = pd.Series([jst, kiatsu])
    df = df.append(temp_data, ignore_index=True)

for i, diff_kiatsu in enumerate(df[1].diff()):
    sabun = diff_kiatsu
    if sabun >= 2:
        msg_push = df[0][i-1] + "から3時間で気圧急上昇"
        send_line(msg_push)
        print("msg_push=", msg_push)

・最終行:動作確認のため、通知と同じメッセージをコンソールに表示。

【動作結果】

msg_push= 2022-11-06 15:00から3時間で気圧急上昇
msg_push= 2022-11-08 15:00から3時間で気圧急上昇
msg_push= 2022-11-09 03:00から3時間で気圧急上昇
msg_push= 2022-11-10 18:00から3時間で気圧急上昇
msg_push= 2022-11-11 03:00から3時間で気圧急上昇
msg_push= 2022-11-11 06:00から3時間で気圧急上昇


気圧急上昇をLINEで通知が出来ました

【今後の展開】
LINE通知を自動的に行う環境を準備する。→ 2022/11/19記事追加
 現在は、手動。つまり、Python Code実行ボタンを人が押した際に通知する。
 朝の準備時間に合わせて、昼休みに合わせて、自動実行できる環境があれば人に依存せず通知を受けられるので、気圧変動に備えて頭痛薬などを服用できるようになる。はず。
→ 2022/12/4記事追加:5日分だと情報量が多いので2日分に絞りました。これを for 文に if break を適用するように修正しました。
→ 2022/12/10記事追加:複数の条件分岐で異なるメッセージ通知をできるようにしました。


いいなと思ったら応援しよう!