この記事では、Pythonを使って、指定した地名の3日間の天気予報を取得し表示する簡単なコマンドラインツールを作成する方法を解説します。requests
モジュールで気象情報APIにアクセスし、返されたJSON
データを解析します。
1. 準備:必要なモジュールとAPIキー
このプログラムは、HTTPリクエストを行うrequests
、コマンドライン引数を扱うsys
、そしてJSONデータを解析するjson
モジュールを使用します。
requests
はサードパーティ製ライブラリなので、事前にインストールが必要です。
pip install requests
また、このスクリプトはOpenWeatherMapという気象情報サービスのAPIを利用します。使用するには、OpenWeatherMapのウェブサイトで無料アカウントを登録し、APIキーを取得する必要があります。
2. スクリプトの実装
スクリプトの処理は以下の流れで行います。
- コマンドラインから地名を取得する。
- 取得した地名と自身のAPIキーを使って、OpenWeatherMap APIへのリクエストURLを構築する。
- APIにリクエストを送信し、天気予報データをJSON形式で受け取る。
- JSONデータを解析し、今日・明日・明後日の天気情報を抽出して表示する。
3. 完成したコード全体
以下に、上記の処理を実装した完全なスクリプトを示します。YOUR_API_KEY
の部分は、ご自身で取得したAPIキーに置き換えてください。
#! /usr/bin/env python3
# quick_weather.py - コマンドラインから天気予報を取得する
import json
import requests
import sys
# --- 準備 ---
# コマンドライン引数から地名を取得
if len(sys.argv) < 2:
print("使い方: python quick_weather.py <地名>")
sys.exit()
location = ' '.join(sys.argv[1:])
# 自身のAPIキーに置き換えてください
API_KEY = 'YOUR_API_KEY'
if API_KEY == 'YOUR_API_KEY':
print("エラー: API_KEYを自身のキーに置き換えてください。")
sys.exit()
# --- APIリクエスト ---
# OpenWeatherMapの5日/3時間予報APIエンドポイント
url = f'https://api.openweathermap.org/data/2.5/forecast?q={location}&cnt=17&appid={API_KEY}&units=metric&lang=ja'
try:
response = requests.get(url)
response.raise_for_status() # エラーがあれば例外を発生
except requests.exceptions.RequestException as e:
print(f"エラー: データの取得に失敗しました - {e}")
sys.exit()
# --- JSONデータの解析と表示 ---
weather_data = json.loads(response.text)
w = weather_data['list']
print(f'--- {location} の天気予報 ---')
# 今日の天気 (リストの最初のデータ)
print('今日:')
print(f" {w[0]['weather'][0]['main']} - {w[0]['weather'][0]['description']}")
print(f" 気温: {w[0]['main']['temp']} °C")
print()
# 明日の天気 (24時間後 = 8 * 3時間後)
print('明日:')
print(f" {w[8]['weather'][0]['main']} - {w[8]['weather'][0]['description']}")
print(f" 気温: {w[8]['main']['temp']} °C")
print()
# 明後日の天気 (48時間後 = 16 * 3時間後)
print('明後日:')
print(f" {w[16]['weather'][0]['main']} - {w[16]['weather'][0]['description']}")
print(f" 気温: {w[16]['main']['temp']} °C")
4. コードの解説と実行方法
APIエンドポイント このスクリプトは、5 day / 3 hour forecast
というAPIエンドポイントを使用しています。これは3時間ごとの天気予報データをリスト形式で返します。そのため、w[0]
で現在に近い予報、w[8]
で約24時間後(3時間 * 8)、w[16]
で約48時間後(3時間 * 16)のデータにアクセスすることで、3日間の天気予報を擬似的に表示しています。units=metric
で温度を摂氏、lang=ja
で説明を日本語に設定しています。
実行方法 このスクリプトをquick_weather.py
として保存し、ターミナルで以下のように実行します。
python quick_weather.py Tokyo
すると、東京の今日、明日、明後日の天気予報が表示されます。
まとめ
このプロジェクトは、コマンドライン引数の処理、外部APIへのリクエスト、JSONデータの解析という、実用的なアプリケーションで頻繁に用いられる要素を組み合わせています。APIキーが必要なサービスと連携することで、天気に限らず、株価やニュースなど、様々な外部データを取得するプログラムを作成することが可能です。