Pythonで天気予報を取得する方法

Python
挨拶
くろやぎ
くろやぎ

こんにちは!くろやぎ(kuroyagi_info)です。

この記事では、Pythonで天気予報を取得する方法について解説します。APIの基本的な仕組みについても併せて解説しているので、「APIって名前だけ聞いたことあるけど、どういう仕組みで動いているの?」と疑問に思っている方は必見です。

  • 内容
    • Pythonで天気予報を取得する方法
    • APIの基本的な仕組み
  • 実行環境
    • Windows 10
    • Python 3.7

Pythonで天気予報を取得する仕組みの解説

Pythonで天気予報を取得するためには、APIを使用します。APIとはApplicationn Programing Interfaceの略で、「アプリケーションをプログラミングで使用するためのインタフェース」という意味です。簡単に説明すると、アプリケーションの機能を外部から利用する際の窓口、それがAPIです。

そのAPIの中でもよく使われるのがWeb APIというWeb上で使用するAPIです。今回もWeb APIのサービスを使用して天気予報を取得します。このAPIは「あるURLに接続すると天気予報の情報を返す」という機能を持った窓口を開いています。

このURLにリクエストを送信します。

http://weather.livedoor.com/forecast/webservice/json/v1?city=130010

すると、json形式で以下のような情報が返って来ます。

{
    "location": {
        "city": "東京",
        "area": "関東",
        "prefecture": "東京都"
    },
    "publicTime": "2019-10-28T05:00:00+0900",
    "copyright": {
        "provider": [
            {
                "link": "http://tenki.jp/",
                "name": "日本気象協会"
            }
        ],
        "link": "http://weather.livedoor.com/",
        "title": "(C) LINE Corporation",
        "image": {
            "width": 118,
            "link": "http://weather.livedoor.com/",
            "url": "http://weather.livedoor.com/img/cmn/livedoor.gif",
            "title": "livedoor 天気情報",
            "height": 26
        }
    },
    "title": "東京都 東京 の天気",
    "description": {
        "text": "  前線が本州の南岸に停滞しています。また、関東甲信地方を上空の気圧の谷が通過中です。一方、東シナ海には高気圧があって東へ移動しています。\n\n 東京 地方は、おおむね曇りとなっています。\n\n 28日は、高気圧に覆われて晴れま すが、気圧の谷や湿った空気の影響により朝晩を中心に曇るでしょう。伊豆諸島南部では雨や雷雨となる所がある見込みです。\n\n 29日は、前線や低気圧が伊豆諸島付近を通過する見込みです。このため曇り時々雨となるでしょう。伊豆諸島では雷を伴い激しく降る所がある見込みです。\n\n<天気変化等の留意点>\n 28日は、晴れで朝晩は曇りとなるでしょう。\n 29日は、曇り時々雨となるでしょう。\n(雨の予想)\n 28日06時から29日06時までに予想される24時間降水量は、多い所で、\n  東京地方  10ミリ\nの見込みです。\n\n【関東甲信地方】\n 関東甲信地方は、おおむね曇りで、伊豆諸島では雨の降っている所があります。\n\n 28日は、高気圧に覆われて晴れますが、気圧の谷や湿った空気の影響により朝晩を中心に曇るでしょう。伊豆諸島では雨や雷雨となる所がある見込み です。\n\n 29日は、前線や低気圧が伊豆諸島付近を通過する見込みです。このため曇りで断続的に雨となり、伊豆諸島では雷を伴い激しく降る所があるでしょう。\n\n 関東地方と伊豆諸島の海上では、うねりを伴い、28日は波が高く、29日は波がやや高いでしょう。船舶は高波に注意してください。",
        "publicTime": "2019-10-28T04:37:00+0900"
    }
}

余談ですが、jsonの整形にはこちらのサービスが役立ちます。ページ内のテキストボックスにjson形式の文字列を入力するだけで自動整形してくれます。
JSON Pretty Linter Ver3

天気情報を取得するPythonスクリプト

それでは、Pythonで天気予報を取得する方法について解説していきます。今回はlivedoorが提供しているWeather Hacksという天気予報サービス(Web API)を利用します。

import json
import requests

def get_weather():
    url = 'http://weather.livedoor.com/forecast/webservice/json/v1'
    # 東京のcityタグのid
    payload = {'city': '130010'}
    # お天気情報をjsonで取得
    data = requests.get(url, params=payload).json()

    # お天気情報を出力
    print('以下が{}の天気情報になります。\n'.format(data['location']['city']))
    for weather in data['forecasts']:
        print('{}の天気は、{}でしょう。'.format(weather['dateLabel'], weather['telop']))
    print('\n' + data['description']['text'])

if __name__ == '__main__':
    get_weather()

このスクリプトを実行すると、以下のように出力されます。

以下が東京の天気情報になります。

今日の天気は、晴時々曇でしょう。
明日の天気は、曇時々雨でしょう。

前線が本州の南岸に停滞しています。また、関東甲信
を上空の気圧の谷が通過中です。一方、東シナ海には
があって東へ移動しています。

東京地方は、おおむね曇りとなっています。

28日は、高気圧に覆われて晴れますが、気圧の谷や湿
空気の影響により朝晩を中心に曇るでしょう。伊豆諸
では雨や雷雨となる所がある見込みです。

29日は、前線や低気圧が伊豆諸島付近を通過する見込
29日は、前線や低気圧が伊豆諸島付近を通過する見込
29日は、曇り時々雨となるでしょう。
(雨の予想)
28日06時から29日06時までに予想される24時間降水 
量は、多い所で、
東京地方 10ミリ
の見込みです。

【関東甲信地方】
関東甲信地方は、おおむね曇りで、伊豆諸島では雨 
の降っている所があります。

28日は、高気圧に覆われて晴れますが、気圧の谷や 
湿った空気の影響により朝晩を中心に曇るでしょう。
伊豆諸島では雨や雷雨となる所がある見込みです。 

29日は、前線や低気圧が伊豆諸島付近を通過する見 
込みです。このため曇りで断続的に雨となり、伊豆諸
島では雷を伴い激しく降る所があるでしょう。 

関東地方と伊豆諸島の海上では、うねりを伴い、28 
日は波が高く、29日は波がやや高いでしょう。船舶は
高波に注意してください。

今回は東京の天気予報を取得するために次のURLを使いました。

http://weather.livedoor.com/forecast/webservice/json/v1?city=130010

他の地域の天気予報を取得するにはlivedoorお天気webサービス地域ID一覧からIDを取得し、URLパラメータcityの値にIDを設定します。

715
タイトルとURLをコピーしました