1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】天気予報API を用いて明日の天気を取得してみる

Posted at

はじめに

この記事では、Pythonを使用してWeb APIを取得する方法について解説します。
大体の内容はこちらの記事にありますが、本記事では、さらに少しだけ踏み込んだ内容となっています。

やりたいこと

全国の地点定義表のコードを入力して、天気予報APIより明日の天気予報を表示させる。

結果のコード

以下が今回使用するコードの全体です。
Web APIを呼び出し、その結果を取得するための基本的な流れを示しています。

import requests
from datetime import datetime

def get_weather(city):
    try:
        url = f"https://weather.tsukumijima.net/api/forecast?city={city}"
        response  = requests.get(url)
        response.raise_for_status()

        data_json = response.json()
    
        date_str = data_json["forecasts"][1]["date"]
        date = datetime.strptime(date_str,"%Y-%m-%d").strftime("%Y年%m月%d日")
        title = data_json["title"]
        weather = data_json["forecasts"][1]["telop"]
        max_temp = data_json["forecasts"][1]["temperature"]["max"]["celsius"]
        min_temp = data_json["forecasts"][1]["temperature"]["min"]["celsius"]
        
        results = f"{date}{title}{weather}です。\n最高気温は{max_temp}度、最低気温は{min_temp}度です。"
        return results
    
    except requests.exceptions.RequestException as e:
        return f"天気情報の取得に失敗しました: {e}"
        
    except KeyError as e:
        return f"予期しないデータ形式です: {e}"

city_number = input("地点コードを入力してください: ")
result = get_weather(city_number)
print(result)

コードの解説

1. 必要となるモジュールのインポート

import requests
from datetime import datetime

まず、以下のモジュールをインポートします。

requests
HTTPリクエストを行うための外部ライブラリ
datetime
日付や時間を扱うための標準ライブラリ

2. APIエンドポイントの設定

url = f"https://weather.tsukumijima.net/api/forecast?city={city}"

変数urlに、アクセスしたいAPIのエンドポイントURLを指定します。
{city}には、関数get_weatherの引数があてられます。

3. GETリクエストの送信

response  = requests.get(url)

requestsモジュールのgetメソッドを使用して、指定したURLに対してGETリクエストを送信します。戻り値をresponse変数に格納しておきます。

4. ステータスコードの確認

response.raise_for_status()

APIリクエストが成功したかどうかを確認するために、response.status_codeを使用します。ステータスコードが200の場合、リクエストは成功しています。200番台以外だったときに、except部分(例外処理)を実行します。

HTTPステータスコード 状態
100番台 処理中
200番台 成功
300番台 リダイレクション
400番台 クライアントエラー
500番台 サーバーエラー

5. JSONデータの取得

data_json = response.json()

response.json()メソッドを使用して、APIから返されたJSON形式のデータをPythonの辞書型に変換します。このデータを変数data_jsonに格納します。

6. 必要なデータの抽出

date_str = data_json["forecasts"][1]["date"]
date = datetime.strptime(date_str,"%Y-%m-%d").strftime("%Y年%m月%d日")
title = data_json["title"]
weather = data_json["forecasts"][1]["telop"]
max_temp = data_json["forecasts"][1]["temperature"]["max"]["celsius"]
min_temp = data_json["forecasts"][1]["temperature"]["min"]["celsius"]

それぞれ必要とするデータを辞書型data_jsonから抽出します。
必要に応じて整形等を行います。
詳細は天気予報APIのレスポンスフィールドを確認してください。

7. 出力文字列を作成

results = f"{date}{title}{weather}です。\n最高気温は{max_temp}度、最低気温は{min_temp}度です。"
return results

8. エラー処理

except requests.exceptions.RequestException as e:
    return f"天気情報の取得に失敗しました: {e}"

HTTPリクエストでエラーになった場合、このコードが実行されます。
eにはステータスコードが入ってきます。

except KeyError as e:
    return f"予期しないデータ形式です: {e}"

入力された地点コードが違っていたりした場合は、このコードが実行されます。

9. 関数の実行 & 戻り値の出力

city_number = input("都市コードを入力してください: ")
result = get_weather(city_number)
print(result)

inputで入力したコードを引数として、get_weaterを実行して、返ってきた文字列を表示させます。簡略にすると、以下のようにしてもOKです。

print(get_weather(input("都市コードを入力してください: ")))

まとめ

今回の記事では、Pythonを使ってWeb APIを取得する基本的な方法について説明しました。requestsモジュールを利用することで、APIの利用が非常に簡単になります。

ご質問やフィードバックがあれば、コメントでお知らせください!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?