OpenWeatherMapで大阪の天気を取得した際の備忘録（python）

# 目的
OpenWeatherMapで大阪の天気を取得した際の備忘録です（python）

# 準備

OpenWeatherMapに登録してAPI Keyを取得する

> [OpenWeatherMap](https://openweathermap.org/)

# コード

公式サイトのAPIを参考にします

> [Weather API](https://openweathermap.org/api)

### Current weather data

```python:sample.py
!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import requests

city = "Osaka"
key = 'xxxxxxxxxxxxxxxxxxxxxx'  # your API Key
url = 'http://api.openweathermap.org/data/2.5/weather?units=metric&q=' + city + '&APPID=' + key

print(url)
response = requests.get(url)

print("---")
data = response.json()
jsonText = json.dumps(data, indent=4)
print(jsonText)
print("---")
data = json.loads(response.text)
print(city)
print("weather:", data["weather"][0]["main"])
print("temp:", data["main"]["temp"])
print("pressure:", data["main"]["pressure"])
print("humidity:", data["main"]["humidity"])
print("temp_min:", data["main"]["temp_min"])
print("temp_max:", data["main"]["temp_max"])
```

実行結果

```
$ python sample.py
---
{
    "coord": {
        "lon": 135.5,
        "lat": 34.7
    },
    "weather": [
        {
            "id": 802,
            "main": "Clouds",
            "description": "scattered clouds",
            "icon": "03n"
        }
    ],
    "base": "stations",
    "main": {
        "temp": 29,
        "pressure": 995,
        "humidity": 74,
        "temp_min": 29,
        "temp_max": 29
    },
    "visibility": 10000,
    "wind": {
        "speed": 8.2,
        "deg": 70
    },
    "clouds": {
        "all": 40
    },
    "dt": 1565792792,
    "sys": {
        "type": 1,
        "id": 7962,
        "message": 0.007,
        "country": "JP",
        "sunrise": 1565727433,
        "sunset": 1565776118
    },
    "timezone": 32400,
    "id": 1853909,
    "name": "Osaka",
    "cod": 200
}
---
Osaka
weather: Clouds
temp: 29
pressure: 995
humidity: 74
temp_min: 29
temp_max: 29
```

### Call 5 day / 3 hour forecast data

```python:sample.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import requests

city = "Osaka"
key = 'xxxxxxxxxxxxxxxxxxxx' # your API Key
url = 'http://api.openweathermap.org/data/2.5/forecast?units=metric&q=' + city + '&APPID=' + key

print(url)
response = requests.get(url)

print("---")
data = response.json()
data = json.loads(response.text)

print(city)

for i in range( len(data["list"]) ):
    print(data["list"][i]["dt_txt"])
    print("   temp", data["list"][i]["weather"][0]["main"])
    print("   temp", data["list"][i]["main"]["temp"])
    print("   pressure:", data["list"][i]["main"]["pressure"])
    print("   humidity:", data["list"][i]["main"]["humidity"])
    print("   temp_min:", data["list"][i]["main"]["temp_min"])
    print("   temp_max:", data["list"][i]["main"]["temp_max"])
```

実行結果

```
$ python sample.py
---
Osaka
2019-08-14 15:00:00
   temp Clouds
   temp 28.31
   pressure: 996.76
   humidity: 80
   temp_min: 26.35
   temp_max: 28.31
2019-08-14 18:00:00
   temp Clouds
   temp 28.13
   pressure: 995.19
   humidity: 77
   temp_min: 26.66
   temp_max: 28.13
2019-08-14 21:00:00
   temp Clouds
   temp 28.44
   pressure: 993.6
   humidity: 72
   temp_min: 27.46
   temp_max: 28.44
...
2019-08-19 06:00:00
   temp Rain
   temp 32.74
   pressure: 1007.19
   humidity: 52
   temp_min: 32.74
   temp_max: 32.74
2019-08-19 09:00:00
   temp Rain
   temp 28.07
   pressure: 1007.76
   humidity: 75
   temp_min: 28.07
   temp_max: 28.07
2019-08-19 12:00:00
   temp Rain
   temp 26.07
   pressure: 1008.73
   humidity: 81
   temp_min: 26.07
   temp_max: 26.07
```

このままでは見づらいので、グラフ化したい。
いいグラフ化ツールはないだろうか。

# 参考
[無料天気予報APIのOpenWeatherMapを使ってみる](https://qiita.com/nownabe/items/aeac1ce0977be963a740)
[OpenWeatherMap](https://openweathermap.org/)
[pythonを使ってOpenWeatherMapから天気情報を取得](https://qiita.com/iton/items/87d4846de15736b599e4)
[OpenWeatherMap APIをPythonで叩いてパースするメモ](https://www.shibuya24.info/entry/openweathermap_api)
[【WebAPI】OpenWeatherMapで3時間ごとの天気を取りたい【json】](https://qiita.com/marksard/items/472000594ca83b64f00c)