前回の記事ではJSONについて学びました。
今回はその応用として、APIを利用してデータを取得する方法を学びます。
具体的には、Pythonのrequests
モジュールを使って、天気予報APIであるOpen-Meteoから気象データを取得するプログラムを作成します。
requests
モジュールの概要
requests
モジュールは、PythonでHTTPリクエストを簡単に扱うためのライブラリです。
直感的で使いやすいインターフェースを持ち、GETリクエストやPOSTリクエストをはじめとしたさまざまな操作をサポートします。
requests
モジュールのインストール方法
requests
モジュールはPythonの標準ライブラリではないため、事前にインストールが必要です。
以下のコマンドを実行してください。
pip install requests
HTTPの概要
HTTP(Hypertext Transfer Protocol)は、ウェブ上でデータをやり取りするためのプロトコル(プロトコルとはやり取りのルール)です。 このやり取りをするのは、クライアントとサーバです。 例えばあなたが、ウェブサイトを見るときは、あなたのPCがクライアント、ウェブサイトのPCがサーバです。 HTTPでは、まずクライアントがサーバにリクエスト(要求)を出し、サーバがそれに応答します。
主に以下のリクエストメソッドが使用されます。
- GET: サーバーからデータを取得する。
- POST: サーバーにデータを送信する。
- PUT: サーバー上のデータを更新する。
- DELETE: サーバー上のデータを削除する。
ここでは、最も基本的なGETリクエストを使用してデータを取得します。
GETリクエストの問い合わせと応答プロセス
httpbin.org
とrequests
モジュールを使ったテスト
httpbin.org
は、HTTPリクエストやレスポンスの動作を確認するためのテストサービスです。
HTTPのサーバ側になります。
これを使ってrequestsモジュールの使い方を学びましょう。
import requests url = "https://httpbin.org/get" response = requests.get(url) data = response.json() print(f"取得データ: {data}")
- requestsモジュールをインポートする。
- getメソッドを使って、サーバにアクセスし、そのレスポンス(Responseオブジェクト)を変数responseに代入する。
- このオブジェクトのjsonメソッドは、レスポンスがjsonに基づいている場合に使う。jsonメソッドはjsonを辞書型やリストに変更し、それを返す。
requestsモジュールで良く使うメソッドは、この記事の最後にまとめておきますので、参照してください。
Open-Meteoの概要
Open-Meteoは、無料で利用可能な気象データAPIです。以下のようなデータを取得できます。
- 気温: 地上2メートルの気温。
- 降水量: 1時間あたりの降水量。
- 風速・風向: 地上10メートルの風速と風向。
- 日射量: 太陽放射エネルギー量。
詳しいことは、Open-Meteoのウェブサイトを参照して下さい。
Open-Meteoが返すJSONデータの説明
Open-MeteoのAPIから取得したデータは、以下のようなJSON形式で返されます。
{ 'latitude': 35.676624, 'longitude': 139.69112, 'generationtime_ms': 0.07390975952148438, 'utc_offset_seconds': 32400, 'timezone': 'Asia/Tokyo', 'timezone_abbreviation': 'JST', 'elevation': 40.0, 'daily_units': { 'time': 'iso8601', 'temperature_2m_max': '°C', 'temperature_2m_min': '°C', 'precipitation_sum': 'mm', 'windspeed_10m_max': 'km/h', 'wind_direction_10m_dominant': '°', 'shortwave_radiation_sum': 'MJ/m²' }, 'daily': { 'time': ['2024-11-01'], 'temperature_2m_max': [21.2], 'temperature_2m_min': [10.5], 'precipitation_sum': [5.9], 'windspeed_10m_max': [13.2], 'wind_direction_10m_dominant': [345], 'shortwave_radiation_sum': [11.03] } }
実用プログラム例: Open-Meteoで東京の気象データを取得
以下のプログラムは、東京(緯度: 35.6895、経度: 139.6917)の2024年11月1日の気象データを取得し、最高気温や降水量などを箇条書きで出力します。
import requests url = "https://archive-api.open-meteo.com/v1/archive" params = { "latitude": 35.6895, "longitude": 139.6917, "daily": "temperature_2m_max,temperature_2m_min,precipitation_sum,windspeed_10m_max,wind_direction_10m_dominant,shortwave_radiation_sum", "timezone": "Asia/Tokyo", "start_date": "2024-11-01", "end_date": "2024-11-01" } response = requests.get(url, params=params) data = response.json() # データの整理 daily = data["daily"] temperature_max = daily["temperature_2m_max"][0] temperature_min = daily["temperature_2m_min"][0] precipitation_sum = daily["precipitation_sum"][0] windspeed = daily["windspeed_10m_max"][0] winddirection = daily["wind_direction_10m_dominant"][0] radiation = daily["shortwave_radiation_sum"][0] print("2024年11月1日の東京の気象データ:") print(f" 最高気温: {temperature_max}℃") print(f" 最低気温: {temperature_min}℃") print(f" 総降水量: {precipitation_sum}mm") print(f" 最大風速: {windspeed}km/h, 風向: {winddirection}°") print(f" 日射量: {radiation}MJ/m²")
プログラムの実行結果
PS > py w.py 2024年11月1日の東京の気象データ: 最高気温: 21.2℃ 最低気温: 10.5℃ 総降水量: 5.9mm 最大風速: 13.2km/h, 風向: 345° 日射量: 11.03MJ/m² PS >
requests
モジュールのよく使うメソッド
Pythonのrequests
モジュールには、HTTPリクエストを送信するための便利なメソッドが用意されています。以下は、よく使うメソッドの解説です。
1. requests.get(url, params=None, **kwargs)
response = requests.get("https://httpbin.org/get", params={"key": "value"}) print(response.url) # https://httpbin.org/get?key=value
2. requests.post(url, data=None, json=None, **kwargs)
- 用途: サーバーにデータを送信する(HTTP POSTリクエスト)。
- 主な引数:
- 例:
response = requests.post("https://httpbin.org/post", json={"key": "value"}) print(response.json()) # サーバーが受け取ったデータを確認
3. requests.put(url, data=None, **kwargs)
response = requests.put("https://httpbin.org/put", data={"key": "updated_value"}) print(response.json())
4. requests.delete(url, **kwargs)
response = requests.delete("https://httpbin.org/delete") print(response.status_code) # 200(成功)
5. requests.head(url, **kwargs)
response = requests.head("https://httpbin.org/get") print(response.headers)
6. requests.patch(url, data=None, **kwargs)
response = requests.patch("https://httpbin.org/patch", data={"key": "patched_value"}) print(response.json())
まとめ
この記事では以下の内容を学びました。
requests
モジュールを使えば、簡単にAPIを利用してデータを取得できます。
Open-MeteoのようなAPIを活用して、様々な情報を入手するプログラムを書くことが可能です。