【Python応用】自作の天気アプリから「LINE」に通知を送る方法(Messaging API編)
こんにちは、ショウです。
前回の記事では、OpenWeatherMapのAPIを使って「現在の天気を取得するアプリ」を作りました。 でも、いちいちPythonを実行して確認するのは面倒ですよね。「朝起きたら勝手にLINEで天気が届いている」のが理想ではないでしょうか?
今回は、自作アプリをLINEと連携させる方法を紹介します。
【重要なお知らせ】 以前まで初心者向けによく使われていた「LINE Notify」という機能は、2025年3月末でサービス終了しました。現在は**「Messaging API」**を使うのが公式の推奨です。 ネット上には古い情報(Notifyを使った記事)が多く残っていますが、今から学ぶならこの新しい方法一択です!
1. 仕組みの解説:Messaging APIとは?
今回は「自分専用の公式アカウント(Bot)」を作り、そこから自分のLINEにメッセージを送らせる仕組みを作ります。
- API(窓口): LINE Messaging API
- 使う機能: プッシュメッセージ(特定のユーザーに送る)
- 料金: 個人開発用(コミュニケーションプラン)なら、月200通まで無料です。自分専用の天気予報なら十分ですね。
2. 事前準備:LINE Developersでの設定
少し手順が多いですが、ここさえ乗り越えればあとは簡単です。頑張りましょう!
手順①:プロバイダーとチャネルの作成
- LINE Developers にアクセスし、自分のLINEアカウントでログインします。
- 「コンソール」を開き、**「新規プロバイダー作成」**をクリック(名前は「ShoWorks」など適当でOK)。
- **「Messaging APIチャネル作成」**を選択します。
- チャネル名: 「My天気Bot」など
- 業種: 「個人」「その他」でOK
- その他必須項目を埋めて作成します。
手順②:必要な2つの「鍵」を取得する
作成したチャネルの管理画面で、以下の2つの情報をメモ帳にコピーしてください。
- チャネルアクセストークン(長期):
- 「Messaging API設定」タブを開き、一番下にある「チャネルアクセストークン」の発行ボタンを押して、長い文字列をコピー。
- あなたのユーザーID:
- 「チャネル基本設定」タブを下にスクロールすると、「あなたのユーザーID」という項目があります(
Uから始まる文字列)。 - ※これが「送信先の住所」になります。絶対に他人に教えないでください。
- 「チャネル基本設定」タブを下にスクロールすると、「あなたのユーザーID」という項目があります(
手順③:友達追加
チャネルの「Messaging API設定」タブにあるQRコードをスマホで読み込み、作成したBotを友達追加しておいてください(これをしないと届きません)。
3. Pythonコードの実装
前回のコードに、LINE送信機能を追加します。 新しく line_bot.py というファイルを作り、以下のコードを貼り付けてください。
Python
import requests
import json
# --- 設定エリア ---
# ここに先ほど取得した2つの鍵を貼り付けてください
CHANNEL_ACCESS_TOKEN = "あなたのチャネルアクセストークン"
USER_ID = "あなたのユーザーID"
WEATHER_API_KEY = "前回のOpenWeatherMapのAPIキー"
# --- LINEにメッセージを送る関数 ---
def send_line_message(text):
url = "https://api.line.me/v2/bot/message/push"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {CHANNEL_ACCESS_TOKEN}"
}
data = {
"to": USER_ID,
"messages": [
{
"type": "text",
"text": text
}
]
}
# ポスト送信(手紙をポストに入れるイメージ)
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print("LINE送信成功!")
else:
print(f"送信失敗: {response.status_code} {response.text}")
# --- 天気を取得してLINEする関数 ---
def main():
city = "Tokyo"
weather_url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={WEATHER_API_KEY}&lang=ja&units=metric"
try:
# 天気データを取得 (GET)
response = requests.get(weather_url)
data = response.json()
if data["cod"] != 200:
print("天気情報の取得に失敗しました")
return
# データを整形
weather = data["weather"][0]["description"]
temp = data["main"]["temp"]
# 送信するメッセージを作成
message = f"【今日の天気】\nエリア:{city}\n天気:{weather}\n気温:{temp}℃\n\n今日も一日頑張りましょう!"
# LINEに送信
send_line_message(message)
except Exception as e:
print(f"エラーが発生しました: {e}")
if __name__ == "__main__":
main()
4. 実行してみよう
このプログラムを実行してみてください。 ターミナルに「LINE送信成功!」と表示され、あなたのスマホのLINEにBotから通知が来れば大成功です!
うまくいかない時は?
- 401 Unauthorized: アクセストークンが間違っています。コピペミスがないか確認しましょう。
- 400 Bad Request: ユーザーIDが間違っているか、Botをブロックしている可能性があります。
5. これで「IoT」の入り口に立ちました
前回はデータを**「もらう(GET)」だけでしたが、今回はデータを「送る(POST)」**ことができるようになりました。
これができれば、アイデア次第で何でも作れます。
- 「株価が急変したらLINEする」
- 「Webサイトの更新を検知して通知する」
- 「毎朝7時に自動で実行する」(これはWindowsのタスクスケジューラや、MacのAutomatorを使えばPCだけで実現できます!)
ぜひ、自分だけの便利なBotを作り込んでみてください。
あわせて読みたい記事:
編集後記
LINE Notifyが終了したときはエンジニア界隈で少し騒ぎになりましたが、Messaging APIの方ができること(リッチメニューを出したり、スタンプを送ったり)が多いので、結果的にこちらの使い方を覚えたほうがスキルアップになります。 「変化に対応する」のもエンジニアの大事な仕事ですね!



ディスカッション
コメント一覧
まだ、コメントがありません