情報学部大学生のダラダラ日記

β日記

機械学習や日記っぽいものを書きます

【Python】OpenWeather APIを叩いてお天気データを取得する

スポンサーリンク

はじめに

 なにかAPIを叩きたい気分(?)だったので特にクセのないOpenWeatherが提供している無料APIを触ってみました。

API keysの取得

 兎にも角にもAPI keyを取得しないと始まらないので取得します。OpenWeatherへアクセスし、Sign upからユーザ登録をします。そしてログイン状態のページからAPI keysを選択すると以下のようにAPI keyが取得できます。これをメモします。

f:id:Parco1021:20191012183139p:plain

これでOpenWeather APIを利用する準備ができました。

OpenWeather APIについて

 以下の内容は全てOpenWeatherの公式ドキュメントに載っています。以下全て{apikey}は先ほど取得したキーに置換してください。

 

まずは、都市名を指定する方法です。

http://api.openweathermap.org/data/2.5/weather?q={city_name}&APPID={apikey}

{city_name}を表示させたい都市名にします(Londonなど)。そしてアクセスするだけで表示されると思います。

 

次は、都市idを指定する方法です。

http://api.openweathermap.org/data/2.5/weather?id={cid}&APPID={apikey}

都市id?となると思いますが、当然公式の方でサンプルが公開されています。

 

次は、緯度経度を指定する方法です。

http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&APPID={apikey}

latが緯度(latitude)でlonが経度(longitude)です。

 

最後は、郵便番号(zip code)を指定する方法です。

http://api.openweathermap.org/data/2.5/weather?zip={zip code}&APPID={apikey}

zip codeを指定した後に国を指定した方がいいかもです。(?zip=1111111,JP&APP~~~)

 

このAPIのレスポンスはデフォルトでJSON形式となっています。なのでそのまま使用します。

 

プログラム

今回は一例として都市名を指定します。

他の場合でも大きな差はないのでやってみてください。

import requests

import json



city = "Tokyo"

API_KEY = "{apikey}"

url = "http://api.openweathermap.org/data/2.5/weather?units=metric&q={q}&APPID={key}"



url1 = url.format(q = city, key = API_KEY)

response = requests.get(url1)

data = response.json()

jsontext = json.dumps(data,indent=4)

print(jsontext)

 

 ・出力

{

    "coord": {

        "lon": 139.76,

        "lat": 35.68

    },

    "weather": [

        {

            "id": 521,

            "main": "Rain",

            "description": "shower rain",

            "icon": "09n"

        },

        {

            "id": 701,

            "main": "Mist",

            "description": "mist",

            "icon": "50n"

        }

    ],

    "base": "stations",

    "main": {

        "temp": 23.31,

        "pressure": 969,

        "humidity": 100,

        "temp_min": 21.67,

        "temp_max": 25

    },

    "visibility": 2000,

    "wind": {

        "speed": 32.9,

        "deg": 170,

        "gust": 43.2

    },

    "clouds": {

        "all": 75

    },

    "dt": 1570883396,

    "sys": {

        "type": 1,

        "id": 8074,

        "country": "JP",

        "sunrise": 1570826639,

        "sunset": 1570867858

    },

    "timezone": 32400,

    "id": 1850147,

    "name": "Tokyo",

    "cod": 200

}

 各パラメータの意味は以下の通りです。公式ドキュメントからの引用

f:id:Parco1021:20191012214258p:plain

そこまで難しい単語ないので大体わかると思います。ここから適宜必要なデータを出力すればいいです。urlを出力させて、別でアクセスしても当然結果は出力されます。FirefoxだとJSON見やすくなるの知らなかったです。

f:id:Parco1021:20191012214520p:plain

 気圧めちゃくちゃ低い(pressure)し、風速めちゃくちゃ早く(wind.speed)てなんかすごいです。台風19号の影響ですね。

さいごに

 今回は無料版(アクセス数の制限アリ)を使いましたが、無料でこのようなAPIが使えるのはすごいと思いました。特に天気などは複数回取得せず、数時間に一度取得してDBに保存しておけば再度APIを叩く必要もないので無料版のまま使用できます。

 WebAPIは使っててそれっぽくなるし楽しいのでこれからも色々触れてぶっ叩きたいとおもいます。

参考文献

無料天気予報APIのOpenWeatherMapを使ってみる - Qiita

OpenWeatherMap API v2.5から天気を取得する - Qiita

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

スポンサーリンク