【Python】WeatherAPIから天気情報を取得してみた

# かるく自己紹介
初めまして。てぃと申します。
IT業界に入ってから4年ほど、VB.netやJavaをメインに触ってきたアプリSEです。
最近仕事でPythonを触る機会があり、今更ながら一から勉強してみたところ、余りにも色々な事が簡単に実装出来ることに感動してしまいました。
初心者ながら、やってみたことをメモ代わりに書き記してみようと思いますので、お手柔らかによろしくお願いします。

# 1. WeatherAPIについて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665882/5c3ebf7a-d319-fcf6-7c6e-202918ff593d.png)
WeatherAPIは、気象データをAPI形式で提供しているWebサービスです。
アカウントを作成してAPIキーを発行することで、Pythonから簡単に指定した地域の天気情報を取得することが出来ます。

## 1-1. アカウント作成
まずは、WeatherAPIのアカウントを作成します。
画面右上の「Sign In」を選択し、アカウント情報を入力してログインします。
アカウントが無い場合は、「Create An Account」から画面の指示に従ってアカウント作成してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665882/5bb37334-1a42-afa6-6f10-25ebbc72a0ab.png)

## 1-2. APIキーを取得
アカウントが作成出来たら、メイン画面右上のアカウント名をクリックして、
「My services」を選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665882/ad073679-e967-e61e-fd7f-4b26548da073.png)

個人ダッシュボード画面が出てきたら、「API keys」タブを選択します。
すると、デフォルトで用意されたAPIキーを確認することが出来ます。
大量にデータを発行する場合は、「Genetate」からAPIキーを追加発行することが出来ますが、個人学習レベルならデフォルトのキーだけで十分だと思います。
これで、WeatherAPI側の準備は完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665882/780c4588-79ed-0934-a544-8a15de1acbc7.png)

# 2. PythonでWeatherAPIを取得する
それでは、さっそくPythonでWeatherAPIに天気情報をリクエストします。
返却される情報はかなりシンプルなので、取得した情報を使ってあれこれ実装してみるのも楽そうです。

## 2-1. requestsライブラリをインストール
requestsとはHTTPメソッド周りが楽に実装出来るライブラリです。
Python標準モジュールの「urllib.request」でも同じことは出来ます。

まずはrequestsライブラリをインストールします。
VSCodeを使っている場合は、ターミナルからコンソールを表示してコマンドを実行してください。

~~~
pip install requests
~~~

成功すると、「pip list」コマンドでrequestsライブラリが追加されていることが確認出来ます。

~~~
PS D:\[作業ディレクトリ] > pip list
Package                Version
---------------------- -----------
・・・  
numpy                  2.1.0      
packaging              24.1       
pillow                 10.4.0
pip                    24.2
pyparsing              3.1.4
python-dateutil        2.9.0.post0
requests               2.32.3
six                    1.16.0
・・・
~~~

## 2-2. WeatherAPIにリクエスト実行
requests.getメソッドを実行して、結果をフィールドに格納します。


~~~python:Python
import requests
import json

base_api_url = 'https://api.openweathermap.org/data/2.5/weather'

response = requests.get(
    base_api_url,
    params={
        "q": "tokyo",
        "appid":"<登録したAPIキー>",
        "units": "metric",
        "lang": "ja",
    }
)
~~~

取得した情報はjson形式で返却されます。中身はこんな感じ。

~~~json:取得データ
{'base': 'stations',
 'clouds': {'all': 75},
 'cod': 200,
 'coord': {'lat': 35.6895, 'lon': 139.6917},
 'dt': 1725967031,
 'id': 1850144,
 'main': {'feels_like': 36.01,
          'grnd_level': 1013,
          'humidity': 76,
          'pressure': 1018,
          'sea_level': 1018,
          'temp': 29.8,
          'temp_max': 30.36,
          'temp_min': 27.64},
 'name': '東京都',
 'sys': {'country': 'JP',
         'id': 2001249,
         'sunrise': 1725913207,
         'sunset': 1725958603,
         'type': 2},
 'timezone': 32400,
 'visibility': 10000,
 'weather': [{'description': '曇りがち',
              'icon': '04n',
              'id': 803,
              'main': 'Clouds'}],
 'wind': {'deg': 200, 'speed': 6.17}}
~~~

## 2-3. 取得したjsonから天気情報を抽出
天気情報は「'weather':'description'」に格納されています。
先ほどのソースでインポートしたjsonモジュールを使ってデータを読み込み、天気情報を抽出します。

~~~python:Python
ret = json.loads(response.text)
weather = ([x['description'] for x in ret['weather']])
print(str(weather))
~~~

以下の結果が表示されれば、データの抜き取り成功です！

~~~
['曇りがち']
~~~