清水理史の「イニシャルB」

「Power Automate Desktop」で気象庁から天気を取得しExcelへ自動で書き込む

 Microsoftから提供が開始された「Power Automate Desktop」は、Windows 10ユーザーであれば追加料金なしで利用可能な無料のRPAソリューションだ。

 アプリの操作を自動化するだけでなく、インターネット上で提供されているさまざまなAPIをより身近に利用できるようにするプラットフォームでもある。

 ここでは例として、気象庁から今日と明日の天気予報を取得し、自動的にExcelに書き込む方法を紹介しよう。

気象庁のウェブページから天気情報を取得

Power Automate DesktopでAPI呼び出し

 Power Automate Desktopでは、Windows上のデスクトップアプリやウェブページの操作を自動化することで、さまざまな業務を自動化できる。

 概要と基本的な使い方については、僚誌PC Watchに掲載した『タダで使えるWindows用業務自動化ツールを活用! Microsoft「Power Automate Desktop」の使い方』を参照していただくとして、本記事では、INTERNET Watchらしくウェブサービスを活用する方法を紹介する。

 具体的には、先日話題になった気象庁の天気データを活用してみよう。僚誌窓の杜『気象庁公式の天気予報API(?)が発見 ~Twitterの開発者界隈に喜びの声が満ちる』でも紹介されたが、気象庁のウェブページがリニューアルされ、公式に提供が開始されたわけではないものの、API的な使い方が可能になった。

自動的に天気データをExcelに書き込むフローを作成する

 こうしたウェブサービスで公開されているAPIは、これまでコードを書く必要があったが、Power Automate Desktopを利用すれば、アクティビティを数個配置するだけの「ローコード」で活用することができる。

 返される値がJSONなので、このあたりの知識は若干必要だが、工夫次第でコピペによって値を取得することもでき、ぐっと敷居が低くなった印象だ。

 公式に公開されたサービスではない上、発展的な使い方をするには、やはりプログラミングの知識は要求されるので、あくまでも自己責任で試してもらう必要があるが、無料で利用できるので、試してみる価値はあるだろう。

早速、Power Automate Desktopでフローを作成

 では早速、Power Automate Desktopでフローを作成してみよう。

 今回作成するフローは次の通りだ。

  • 気象庁のウェブページから東京の天気予報データを取得する
  • 取得したJSONデータを変換する
  • Excelを開く
  • 取得した天気データをExcelに書き込む

 最初に全体像を示しておくと次の画面のようになる。アクションの数も少なくシンプルだ。Power Automate Desktopに貼り付けて利用できるコードも以下に示しておく(ファイルのパスなどは変更が必要)。

SET AreaCode TO 130000
Web.InvokeWebService Url: $'''https://www.jma.go.jp/bosai/forecast/data/forecast/%AreaCode%.json''' Method: Web.Method.Get Accept: $'''application/xml''' ContentType: $'''application/xml''' ConnectionTimeout: 30 FollowRedirection: True ClearCookies: False FailOnErrorStatus: False EncodeRequestBody: True UserAgent: $'''Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.21) Gecko/20100312 Firefox/3.6''' Encoding: Web.Encoding.AutoDetect AcceptUntrustedCertificates: False ResponseHeaders=> WebServiceResponseHeaders Response=> WebServiceResponse StatusCode=> StatusCode
Variables.ConvertJsonToCustomObject Json: WebServiceResponse CustomObject=> WeatherObjects
Text.FromCustomDateTime DateTime: WeatherObjects[0]['timeSeries'][0]['timeDefines'][0] CustomFormat: $'''dd''' Result=> FormattedDateTime
Excel.LaunchAndOpen Path: $'''D:\\Temp\\sales.xlsx''' Visible: True ReadOnly: False LoadAddInsAndMacros: False Instance=> ExcelInstance
Excel.WriteCell Instance: ExcelInstance Value: WeatherObjects[0]['timeSeries'][0]['areas'][0]['weathers'][0] Column: 3 Row: FormattedDateTime + 1
Excel.WriteCell Instance: ExcelInstance Value: WeatherObjects[0]['timeSeries'][0]['areas'][0]['weathers'][1] Column: 3 Row: FormattedDateTime + 2

 データを書き込むExcelファイルは次のようなもので、「天気」列に取得したデータを書き込むかたちとなる。

データを取得してExcelに書き込むまでのフローを解説

 それではフローの内容を見ていこう。

1. 変数の設定

 [変数]の[変数の設定]を使って、取得するデータの地域を設定する(ここでは変数名をAreaCodeと変更)。

 今回は東京なので「130000」を指定する。他のエリアを参照したい場合は、気象庁のウェブページから「都道府県選択」でエリアを選択して、URLを確認するといいだろう。

 例えば、神奈川を選択すると「https://www.jma.go.jp/bosai/forecast/#area_type=offices&area_code=140000」となるので、エリアコードは「140000」となる。

2. ウェブサービスを呼び出します

 これがAPIを呼び出すためのアクションとなる。[Web]の項目から配置することができる。パラメーターは次のように設定する。

  - URL:https://www.jma.go.jp/bosai/forecast/data/forecast/%AreaCode%.json

 URLの最後の部分を1で設定した変数「%AreaCode%」とすることで、設定した値(ここでは「130000」)が入力されるようになっている。複数エリアを自動処理したい場合は、この値を変更しながら処理すればいい。

3. JSONをカスタムオブジェクトに変換

 [変数]の[JSONをカスタムオブジェクトに変換]を使って、2.で取得したデータをフロー内で扱えるようにする。

 取得したJSONデータは[%WebServiceResponse%]という変数に入るので、これをパラメーターに指定し、カスタムオブジェクトに変換する。オブジェクト名は分かりやすく「%WeatherObjects%」と変更しておいた。

 なお、JSONの中身と読み方については、後述するウェブサービスを使うことをお勧めする。

4. datetimeをテキストに変換

 取得したJSONには、さまざまなデータが含まれているが、まずは日付のデータを取り出す。

 取り出し方は後述するが、上記データには今日と明日の予報が含まれている(さらに週間予報も含まれるが、ここでは今日と明日のみ扱う)。このうち、今日の日付は「%WeatherObjects[0]['timeSeries'][0]['timeDefines'][0]%」と指定することで取り出せる。

 これを[テキスト]の[datetimeをテキストに変換]を使って、以下のように日付部分だけ取り出す。

 これは、天気情報をExcelに書き込む際、Excelの行番号を指定するのに使う。少し強引なやり方だが、今回のようなシンプルな表の場合、行番号と日付の関連付けが簡単にできるので、番地の指定に都合がいいわけだ。

5. Excelの起動

 [Excel]の[Excelの起動]を使って、書き込むExcelファイルを開く。パラメーターとして開くExcelファイルを指定しておく。

6. Excelワークシートに書き込み

 [Excel]の[Excelワークシートに書き込み]を配置し、パラメーターとして以下の値を指定する。これで今日の天気が書き込まれる。今日の日付に1を足した行がExcel上の書き込み先となる

  • 書き込む値:「%WeatherObjects[0]['timeSeries'][0]['areas'][0]['weathers'][0]%」と指定する。JSONの指定の仕方は後の記載を参照のこと
  • 列:列は固定なので「3」を指定
  • 行:行には「%FormattedDateTime + 1%」

7. Excelワークシートに書き込み

 6.と同様に、パラメーターとして以下の値を指定して、明日の天気を書き込む。

  • 書き込む値:「%WeatherObjects[0]['timeSeries'][0]['areas'][0]['weathers'][1]%」と指定。最後が[1]になっている点に注意
  • 列:列は固定なので「3」を指定
  • 行:明日のデータなので行には「%FormattedDateTime + 2%」と指定

 フローとしては以上で完了だ。実行すれば、Excelのシートに自動的に今日と明日の天気が書き込まれる。なお、ここでは書き込む様子を見たいので保存操作をしていない。Excelを保存する場合は、[Excelを閉じる]を配置し、[ドキュメントを保存]を選択しておこう。

JSONを簡単に扱う

 今回のフローのポイントとなるのは、どのようにしてJSONからデータを取り出すかだ。これにはSYNCERのウェブツールである「JSON Pretty Linter Ver3」を利用すると便利だ。

 取得したJSONを整形したり、パスを表示してデータを取得する際に指定する文字列を簡単にコピーすることができる。

 例えば、東京のデータの場合であれば、ウェブブラウザーで「https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json」にアクセスし、表示されたJSONを丸ごとコピーして、上記サイトに貼り付ける。

JSONデータを表示

 すると、画面下部の[ビューアー]の部分に整形されたデータが表示される。ここでさらに右側に表示されている[Path]をクリックすると、それぞれのデータにアクセスするためのパスが表示される。

 フローで使った日付のデータなら「object[0]['timeSeries'][0]['timeDefines'][0]」、天気のデータなら「object[0]['timeSeries'][0]['areas'][0]['winds'][0]」や「object[0]['timeSeries'][0]['areas'][0]['winds'][1]」と表示されるので、これを使えばいい。

 ただし、ウェブ上のデータはオブジェクトが「object」となっているので、これをフローの中で変換した「%WeatherObjects%」に置き換えればいい。

いろいろなサービスに使える

 以上、Power Automate Desktopを利用して、気象庁から天気データを取得する方法を紹介した。これを応用すると、インターネット上で公開されているさまざまなサービスを活用可能となるので、一度、体験しておくことをお勧めする。

 ただし、あくまでも一例なので、実際には環境に合わせて変更する必要がある。おそらく、Excelの形式が複雑だと、書き込み先の指定は、それ以上に複雑になる可能性がある。その辺りは、自分で工夫してほしい。

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できる Windows 10 活用編」ほか多数の著書がある。