Pythonを使ってOpenWeatherMap APIから天気情報を取得し、その情報をLINE Notifyを使ってLINEに通知するものです。以下に、このコードの詳細な解説を行います。

1. 必要なライブラリのインポート

import requests

requestsライブラリは、HTTPリクエストを簡単に送るために使用します。OpenWeatherMap APIへのリクエストやLINE Notify APIへのリクエストに使用します。

2. OpenWeatherMap APIの設定

API_KEY = 'xxxxxxxxx' 
CITY = 'Tokyo' # 天気情報を取得したい都市
URL = f'http://api.openweathermap.org/data/2.5/weather?q={CITY}&appid={API_KEY}&units=metric&lang=ja'
  • API_KEY:OpenWeatherMapから取得したAPIキーを入力します。
  • CITY:天気情報を取得したい都市の名前を入力します。
  • URL:APIリクエストを送るためのURLを作成します。このURLには、都市名、APIキー、単位(摂氏)と応答言語(日本語)が含まれます。

OpenWeatherMapのAPIを利用するには、APIキー(画像のモザイク部分)が必要です。公式サイトから無料で登録してAPIキーを取得できます。

3. LINE Notifyの設定

LINE_TOKEN = 'xxxxxxxxxxxxxxx' 
LINE_URL = 'https://notify-api.line.me/api/notify'
HEADERS = {'Authorization': f'Bearer {LINE_TOKEN}'}
  • LINE_TOKEN:LINE Notifyから取得したアクセストークンを入力します。
  • LINE_URL:LINE Notify APIのエンドポイントURLです。
  • HEADERS:HTTPリクエストのヘッダーで、認証情報(アクセストークン)を含みます。

LINE Notifyを利用するには、トークン(画像のモザイク部分)の発行が必要になります。公式サイトから無料で登録してトークンを取得できます。

4. 天気情報を取得する関数

def get_weather():
response = requests.get(URL)
if response.status_code == 200:
data = response.json()
city_name = data['name']
main = data['weather'][0]['main']
description = data['weather'][0]['description']
temp = data['main']['temp']
temp_min = data['main']['temp_min']
temp_max = data['main']['temp_max']
return f'場所: {city_name}\n今日の天気: {main} ({description})\n気温: {temp}℃ (最低: {temp_min}℃, 最高: {temp_max}℃)'
else:
return '天気情報の取得に失敗しました。'
  • requests.get(URL):OpenWeatherMap APIにリクエストを送信し、天気情報を取得します。
  • response.status_code:リクエストが成功したかどうかを確認します(200は成功を意味します)。
  • data:JSON形式のレスポンスデータをPythonの辞書形式に変換します。
  • city_namemaindescriptiontemptemp_mintemp_max:天気情報の詳細を取得します。
  • return:天気情報をフォーマットして文字列として返します。

5. LINEに通知する関数

def notify_line(message):
payload = {'message': message}
response = requests.post(LINE_URL, headers=HEADERS, data=payload)
if response.status_code == 200:
print('LINEに通知しました。')
else:
print('LINE通知に失敗しました。')
  • payload:LINEに送信するメッセージを含むデータ。
  • requests.post(LINE_URL, headers=HEADERS, data=payload):LINE Notify APIにPOSTリクエストを送信し、メッセージを通知します。
  • response.status_code:リクエストが成功したかどうかを確認します(200は成功を意味します)。

6. 天気情報を取得してLINEに通知する関数

def notify_weather():
weather_info = get_weather()
notify_line(weather_info)
  • get_weather():天気情報を取得します。
  • notify_line(weather_info):取得した天気情報をLINEに通知します。

7. スクリプトの実行

# 天気情報を通知する
notify_weather()

スクリプトを実行すると、notify_weather関数が呼び出され、天気情報を取得して画像のようにLINEに通知します。下記の例は「シンガポール」「パリ」「ロサンゼルス」などテストをした事例になります。CITY = 'Tokyo' を変えることで、取得したい都市の天気情報を取得できます。

Screenshot