4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

入門Power Automate Desktop:第八話「REST APIを叩いてWebシステムを利用しよう」

Posted at

自動化する作業

  1. WebシステムにGETを投げてレスポンスデータを取得する。
  2. 取得データから組み込みPythonコードでJsonデータを作成する。
  3. WebシステムにPOSTでJsonを投げてレスポンスデータを取得する。
  4. 外部Pythonファイルを実行してURLエンコード文字列をデコードする。
  5. デコード結果をダイアログで表示する。

Web1からGETしたデータを内部で加工し、Web2にPOSTして取得したデータを外部ファイルで加工して表示するパターン例です。
※GETとPOSTは「 https://httpbin.org/ 」に投げてお試しします。

実際にフローを作る

0. 事前準備

目的が一目でわかる名前でフローを作成します。
image.png

1. WebシステムにGETを投げてレスポンスデータを取得する。

アクションから「Webサービスを呼び出します」をドラッグしてフローにドロップします。
image.png
アクションの設定画面が表示されるので、URLに「https://httpbin.org/get?one=1&twe=2」を設定します。
※「https://httpbin.org/」はGETでクエリパラメータ渡すとレスポンスデータに詰めて返してくれます。
image.png
追加されるとこんな感じです。
image.png

2. 取得データから組み込みPythonコードでJsonデータを作成する。

2-1. GETしたJSONをオブジェクトに変換

アクションから「JSONをカスタムオブジェクトに変換」をドラッグしてフローにドロップします。
image.png
アクションの設定画面が表示されるので、1のレスポンスを設定します。
image.png

2-2. オブジェクトを組み込みPythonスクリプトで変換

アクションから「Pythonスクリプトの実行」をドラッグしてフローにドロップします。
image.png
アクションの設定画面が表示されるので、実行するPythonスクリプトに下記コードを設定します。
※画面出力=Automateへの出力になります。

# Automateから値受け取り
input_json = %WebServiceResponse%

# JSON作成
output_json = {
    'first': input_json['args']['one'],
    'second': input_json['args']['twe'],
    'third': 3
}

# Automateへ値受け渡し
print output_json

image.png
追加されるとこんな感じです。
image.png

3. WebシステムにPOSTでJsonを投げてレスポンスデータを取得する。

アクションから「Webサービスを呼び出します」をドラッグしてフローにドロップします。
image.png
アクションの設定画面が表示されるので、URLに「https://httpbin.org/post?three=3」を設定し、メソッドを「POST」に設定します。
要求本文には2-2の出力結果(Pythonで作ったJSON)を渡します。
image.png
追加されるとこんな感じです。
image.png

4. 外部Pythonファイルを実行してURLエンコード文字列をデコードする。

4-1. POSTの応答結果JSONをオブジェクトに変換

アクションから「JSONをカスタムオブジェクトに変換」をドラッグしてフローにドロップします。
image.png
アクションの設定画面が表示されるので、3のレスポンスを設定します。
image.png

4-2. オブジェクトを外部Pythonスクリプトで変換

アクションから「DOSコマンドの実行」をドラッグしてフローにドロップします。
image.png
アクションの設定画面が表示されるので、DOSコマンドに「python decode.py %JsonAsCustomObject2.data%」、作業フォルダにPythonスクリプトの格納ディレクトリを設定します。
image.png

decode.py
import urllib.parse
import sys

args = sys.argv

# URLデコード
decode_str = urllib.parse.unquote_plus(args[1])

# 文字コード不一致回避(エラー内容は後述)
before = decode_str.encode('cp932', "ignore")
after = before.decode('cp932')

# Automateへ値受け渡し
print(after)

文字コードをShift_JISに変更しないとprintで下記エラーとなります。

UnicodeEncodeError: 'cp932' codec can't encode character '\ufeff' in position 0: illegal multibyte sequence

追加されるとこんな感じです。
image.png

5. デコード結果をダイアログで表示する。

アクションから「メッセージを表示」をドラッグしてフローにドロップします。
image.png
アクションの設定画面が表示されるので、表示するメッセージに4-2の実行結果を設定します。
image.png
追加されるとこんな感じです。
image.png

作成したフローを実行してみる

作成したフローを実行する。
下記のダイアログが表示されれば成功です。
image.png

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?