Pythonでコマンドライン天気予報ツールを作成する

この記事では、Pythonを使って、指定した地名の3日間の天気予報を取得し表示する簡単なコマンドラインツールを作成する方法を解説します。requestsモジュールで気象情報APIにアクセスし、返されたJSONデータを解析します。


目次

1. 準備:必要なモジュールとAPIキー

このプログラムは、HTTPリクエストを行うrequests、コマンドライン引数を扱うsys、そしてJSONデータを解析するjsonモジュールを使用します。

requestsはサードパーティ製ライブラリなので、事前にインストールが必要です。

pip install requests

また、このスクリプトはOpenWeatherMapという気象情報サービスのAPIを利用します。使用するには、OpenWeatherMapのウェブサイトで無料アカウントを登録し、APIキーを取得する必要があります。


2. スクリプトの実装

スクリプトの処理は以下の流れで行います。

  1. コマンドラインから地名を取得する。
  2. 取得した地名と自身のAPIキーを使って、OpenWeatherMap APIへのリクエストURLを構築する。
  3. APIにリクエストを送信し、天気予報データをJSON形式で受け取る。
  4. 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キーが必要なサービスと連携することで、天気に限らず、株価やニュースなど、様々な外部データを取得するプログラムを作成することが可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次