ショウのプログラミング教室

【Python応用】自作の天気アプリから「LINE」に通知を送る方法(Messaging API編)

こんにちは、ショウです。

前回の記事では、OpenWeatherMapのAPIを使って「現在の天気を取得するアプリ」を作りました。 でも、いちいちPythonを実行して確認するのは面倒ですよね。「朝起きたら勝手にLINEで天気が届いている」のが理想ではないでしょうか?

今回は、自作アプリをLINEと連携させる方法を紹介します。

【重要なお知らせ】 以前まで初心者向けによく使われていた「LINE Notify」という機能は、2025年3月末でサービス終了しました。現在は**「Messaging API」**を使うのが公式の推奨です。 ネット上には古い情報(Notifyを使った記事)が多く残っていますが、今から学ぶならこの新しい方法一択です!


1. 仕組みの解説:Messaging APIとは?

今回は「自分専用の公式アカウント(Bot)」を作り、そこから自分のLINEにメッセージを送らせる仕組みを作ります。


2. 事前準備:LINE Developersでの設定

少し手順が多いですが、ここさえ乗り越えればあとは簡単です。頑張りましょう!

手順①:プロバイダーとチャネルの作成

  1. LINE Developers にアクセスし、自分のLINEアカウントでログインします。
  2. 「コンソール」を開き、**「新規プロバイダー作成」**をクリック(名前は「ShoWorks」など適当でOK)。
  3. **「Messaging APIチャネル作成」**を選択します。
    • チャネル名: 「My天気Bot」など
    • 業種: 「個人」「その他」でOK
    • その他必須項目を埋めて作成します。

手順②:必要な2つの「鍵」を取得する

作成したチャネルの管理画面で、以下の2つの情報をメモ帳にコピーしてください。

  1. チャネルアクセストークン(長期):
    • 「Messaging API設定」タブを開き、一番下にある「チャネルアクセストークン」の発行ボタンを押して、長い文字列をコピー。
  2. あなたのユーザーID:
    • 「チャネル基本設定」タブを下にスクロールすると、「あなたのユーザーID」という項目があります(Uから始まる文字列)。
    • ※これが「送信先の住所」になります。絶対に他人に教えないでください。

手順③:友達追加

チャネルの「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から通知が来れば大成功です!

うまくいかない時は?


5. これで「IoT」の入り口に立ちました

前回はデータを**「もらう(GET)」だけでしたが、今回はデータを「送る(POST)」**ことができるようになりました。

これができれば、アイデア次第で何でも作れます。

ぜひ、自分だけの便利なBotを作り込んでみてください。


あわせて読みたい記事:


編集後記

LINE Notifyが終了したときはエンジニア界隈で少し騒ぎになりましたが、Messaging APIの方ができること(リッチメニューを出したり、スタンプを送ったり)が多いので、結果的にこちらの使い方を覚えたほうがスキルアップになります。 「変化に対応する」のもエンジニアの大事な仕事ですね!

モバイルバージョンを終了