2017年10月22日

【PowerShell】Invoke-RestMethodを使って天気予報を取得してみる


最近、Web APIについてちょっと調べてたのですが、そのなかでお天気情報もWeb APIで取得できることが分かり、ためしにPowerShellで取得してみました。

まず、今回使用するWeb APIですが、livedoorの「お天気Webサービス」を使わせていただきました。
http://weather.livedoor.com/weather_hacks/webservice

こういうお天気のWeb APIって有料のところが多く、なかなか無料で使わせてもらえるところは少ないのですが、livedoorの「お天気Webサービス」は個人利用に限って無料で使うことが出来ます。


それではまず、単純にAPIを叩いてお天気情報を取得してみたいと思います。

使い方は簡単です。
Invoke-RestMethodコマンドレットのあとにAPIのURIを指定するだけです。

レスポンスはJSONで返ってきます。




PS C:\work> Invoke-RestMethod http://weather.livedoor.com/forecast/webservice/json/v1?city=140020


pinpointLocations : {@{link=http://weather.livedoor.com/area/forecast/1415000; name=相模原市}, @{link=http://weather.livedoor.com/area/forecast/1415011; name=相
                    模原市西部}, @{link=http://weather.livedoor.com/area/forecast/1415012; name=相模原市東部}, @{link=http://weather.livedoor.com/area/forecast/
                    1420600; name=小田原市}...}
link              : http://weather.livedoor.com/area/forecast/140020
forecasts         : {@{dateLabel=今日; telop=雨; date=2017-10-22; temperature=; image=}, @{dateLabel=明日; telop=雨のち晴; date=2017-10-23; temperature=; image=
                    }, @{dateLabel=明後日; telop=晴時々曇; date=2017-10-24; temperature=; image=}}
location          : @{city=小田原; area=関東; prefecture=神奈川県}
publicTime        : 2017-10-22T11:00:00+0900
copyright         : @{provider=System.Object[]; link=http://weather.livedoor.com/; title=(C) LINE Corporation; image=}
title             : 神奈川県 小田原 の天気
description       : @{text= 前線が本州の南岸に停滞しています。また、台風第21号が日本の南にあ
                    って北北東に進んでいます。

                     神奈川県は、雨となっています。

                     22日は、前線が本州南岸に停滞するため、雨で夜遅くには雷を伴って非
                    常に激しく降る所があるでしょう。

                     23日は、台風第21号の影響で、雨で朝まで雷を伴い非常に激しい雨が
                    降る所がある見込みです。午後は晴れとなる見込みです。

                     神奈川県の海上では、22日はうねりを伴いしけるでしょう。23日はう
                    ねりを伴い猛烈なしけとなる見込みです。船舶は高波に厳重に警戒してくだ
                    さい。; publicTime=2017-10-22T13:34:00+0900}
単純に実行するとこのような感じになるのですが、オブジェクト変数に格納してそれぞれの内容を個別に取得することも簡単に出来ます。

たとえば変数$tenkiに格納してみます。
PS C:\work> $tenki = Invoke-RestMethod http://weather.livedoor.com/forecast/webservice/json/v1?city=140020

ここで、タイトルを取得するには次のようにアクセスします。
PS C:\work> $tenki.title
神奈川県 小田原 の天気

また、予報を取得するには次のようにアクセスします。
PS C:\work> $tenki.forecasts


dateLabel   : 今日
telop       : 雨
date        : 2017-10-22
temperature : @{min=; max=}
image       : @{width=50; url=http://weather.livedoor.com/img/icon/15.gif; title=雨; height=31}

dateLabel   : 明日
telop       : 雨のち晴
date        : 2017-10-23
temperature : @{min=; max=}
image       : @{width=50; url=http://weather.livedoor.com/img/icon/19.gif; title=雨のち晴; height=31}

dateLabel   : 明後日
telop       : 晴時々曇
date        : 2017-10-24
temperature : @{min=; max=}
image       : @{width=50; url=http://weather.livedoor.com/img/icon/2.gif; title=晴時々曇; height=31}


さらに詳しく取得するには、次のようにアクセスします。

明日の天気
PS C:\work> $tenki.forecasts[1].telop
雨のち晴

明日の最低気温(摂氏)
PS C:\work> $tenki.forecasts[1].temperature.min.celsius
20

明日の最高気温(摂氏)
PS C:\work> $tenki.forecasts[1].temperature.max.celsius
26


非常に簡単にデータを取得できましたので、これを使っていろいろ作れそうな気がしますね。
またこんど作ったときに紹介したいと思います。





<関連記事>
天気予報を取得してWindowsフォームに表示する



スポンサーリンク