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

Python
スポンサーリンク
読了時間 挨拶

記事は約 7 分で読めます。

くろやぎ
くろやぎ

みなさん、こんにちは!
くろやぎ(kuroyagikuncom)です。
よろしければ、Twitterの方にも遊びに来てください。

Python勉強し始めたのはいいんだけど、なんか実際の生活に役立てられないかな?例えば、Pythonで天気予報を取得してみたりとか…

APIって聞いたことはあるけど、仕組みとか実際の使い方とか分からないな…

この記事では、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に接続すると天気予報の情報を返す」という機能を持った窓口を開いています。

詳しく言うと、「http://weather.livedoor.com/forecast/webservice/json/v1?city=130010
」というURLを叩くと、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日は波がやや高いでしょう。船舶は
高波に注意してください。

今回は東京の天気予報を取得するために「http://weather.livedoor.com/forecast/webservice/json/v1?city=130010」というURLを使用しました。他の地域の天気予報を取得するにはlivedoorお天気webサービス地域ID一覧からIDを取得し、URLパラメータcityの値にIDを設定します。

まとめ

Pythonでお天気情報を取得する方法を解説しました。APIと聞くと難しそうなイメージがありますが、今回扱ったようにURLを叩くだけで簡単に利用できるものもあります。以下の記事を参考に、Herokuと組み合わせれば毎日決まった時間に天気情報をツイートできるので、そんな使い方をしてみるのも面白いかもしれません。
Pythonで作ったTwittter botをHerokuで定期実行する方法【Windows版】

コメント

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