OpenWeatherMapで天気予報を取得。

この記事は「オフィス上空の天気予報を通知してみた。」シリーズの第3回です。

「オフィス上空の天気予報を通知してみた。」シリーズ(全4回)

はじめに

前回の記事、「降雨予測の的中確率を通知してみた。」で営業時間中の天気を知ることができるようになりましたが、そもそもオフィスに傘を持ってきていなければ意味がありません。

そこで、今回からは出勤前にオフィス周辺の天気を確認し、傘が必要かどうかを判断できるような機能を実装していきたいと思います。

ところで、世の中には気象情報を取得できるAPIがたくさんあります。しかし、APIによって取得できる情報は様々で、あるAPIで取得できる情報が他のAPIでは取得できないということがよくあります。

シリーズの第1回、「オフィスを出る前に外が雨かを知れるシステムを作ってみた。」で利用したYOLPは5分間隔で降雨量の実測値や予報を取得できますが、2時間前から1時間後までの情報しか取得できません。そのため、1日を通しての天気予報や翌日の天気予報を取得したい場合には向いていません。

そこで今回は、1日の天気予報の取得に向いている、「OpenWeatherMap」を利用して天気予報を取得する手順と取得できる情報について紹介していきたいと思います。

OpenWeatherMapとは

OpenweathermapはWebやモバイルアプリケーションの開発者に、現在の天候や予測履歴を含む各種気象データの無料APIを提供するオンラインサービスである。(Wikipediaより)

APIを利用して取得できる主な気象情報は以下になります。

  • 現在の気象情報(無料)
  • 5日分、3時間毎の予報(無料)
  • 16日分、1日毎の予報(有料)

今回は5日分、3時間毎の予報を取得していきたいと思います。

手順

  1. アカウントの作成

以下のURLからOpenWeatherMapのアカウントを作成します。

https://home.openweathermap.org/users/sign_up

下の画像を参考にアカウントの作成を行ってください

  1. APIキーの取得

アカウントを作成するとAPIキーが発行されます。以下の画像のように「API keys」タブからAPIキーを見ることができます。

コード

APIキーを取得できたら、実際に天気情報を取得します。

今回は緯度と経度を使用しますが都市名や都市ID、郵便番号で情報を取得することが可能です。その他、言語や単位のフォーマット指定もできるので詳細は以下にあるOpenWeatherMapのドキュメントを参照してください。

https://openweathermap.org/forecast5

  • API_KEY : APIキー
  • LAT : 緯度
  • LOT : 経度
import json
import datetime
import os
import requests
import sys

API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
LAT = 'xxxxxxxxxx'
LON = 'xxxxxxxxxx'
API_URL = 'http://api.openweathermap.org/data/2.5/forecast?lat={0}&lon={1}&units=metric&lang=ja&APP\ID={2}'

url = API_URL.format(LAT, LON, API_KEY)
response = requests.get(url)
forecastData = json.loads(response.text)

print(json.dumps(forecastData, indent=4))

取得した情報

以下のような情報がJSON形式で取得できました。

"cod": "200",
  "message": 0.0168,
  "cnt": 39,
  "list": [
    {
      "dt": 1551236400,
      "main": {
        "temp": 9.73,
        "temp_min": 7.67,
        "temp_max": 9.73,
        "pressure": 1026.4,
        "sea_level": 1026.4,
        "grnd_level": 1022.65,
        "humidity": 85,
        "temp_kf": 2.06
      },
      "weather": [
        {
          "id": 803,
          "main": "Clouds",
          "description": "曇りがち",
          "icon": "04d"
        }
      ],
      "clouds": {
        "all": 80
      },
      "wind": {
        "speed": 3.54,
        "deg": 12.5007
      },
      "rain": {},
      "sys": {
        "pod": "d"
      },
      "dt_txt": "2019-02-27 03:00:00"
    },

〜〜〜〜〜〜〜〜〜中略〜〜〜〜〜〜〜〜〜

"city": {
    "id": 1850144,
    "name": "Tōkyō-to",
    "coord": {
      "lat": 35.6895,
      "lon": 139.6917
    },
    "country": "JP",
    "population": 12445327
  }
}

さいごに

気象情報APIだけでも世の中にはたくさんあります。そのAPIによって取得できる情報は様々なので、用途によってAPIを使い分けることが大切になると思いました。次回はOpenWeatherMapを使って、実際に天気予報を取得し、slackへ通知する機能を実装していきます。

「オフィス上空の天気予報を通知してみた。」シリーズ(全4回)