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

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

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

# 実際にフローを作る
## 0. 事前準備
目的が一目でわかる名前でフローを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/55de845c-e017-0cfd-ab02-4cc2f3fc8576.png)

## 1. WebシステムにGETを投げてレスポンスデータを取得する。
アクションから「Webサービスを呼び出します」をドラッグしてフローにドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/322bb86a-f965-64ad-bc51-8191742bac26.png)
アクションの設定画面が表示されるので、URLに「`https://httpbin.org/get?one=1&twe=2`」を設定します。
※「`https://httpbin.org/`」はGETでクエリパラメータ渡すとレスポンスデータに詰めて返してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/f6e4a1f5-f104-46a3-a98a-9f39a544e148.png)
追加されるとこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/088301b9-af62-0b4f-989b-1d074a4de833.png)

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

### 2-1. GETしたJSONをオブジェクトに変換
アクションから「JSONをカスタムオブジェクトに変換」をドラッグしてフローにドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/906ea36a-b3d8-cfc4-885d-031cae551162.png)
アクションの設定画面が表示されるので、1のレスポンスを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/ad1766e3-f117-1758-e957-1e8649248896.png)

### 2-2. オブジェクトを組み込みPythonスクリプトで変換
アクションから「Pythonスクリプトの実行」をドラッグしてフローにドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/ebe89342-2d05-5b03-32e4-30f77c5d6aed.png)
アクションの設定画面が表示されるので、実行するPythonスクリプトに下記コードを設定します。
※画面出力=Automateへの出力になります。

``` 組み込みPython
# 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/0b6c9a7a-330f-25a0-3df2-afebfe47c8a5.png)
追加されるとこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/d7ceb88d-fdb4-2393-33fa-3734d1c2f820.png)

## 3. WebシステムにPOSTでJsonを投げてレスポンスデータを取得する。
アクションから「Webサービスを呼び出します」をドラッグしてフローにドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/322bb86a-f965-64ad-bc51-8191742bac26.png)
アクションの設定画面が表示されるので、URLに「`https://httpbin.org/post?three=3`」を設定し、メソッドを「POST」に設定します。
要求本文には2-2の出力結果(Pythonで作ったJSON)を渡します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/d1549f72-78a4-7e92-01db-5074f3531ffd.png)
追加されるとこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/3633bbfb-67ac-c9cb-5f33-0919de704abb.png)

## 4. 外部Pythonファイルを実行してURLエンコード文字列をデコードする。
### 4-1. POSTの応答結果JSONをオブジェクトに変換
アクションから「JSONをカスタムオブジェクトに変換」をドラッグしてフローにドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/906ea36a-b3d8-cfc4-885d-031cae551162.png)
アクションの設定画面が表示されるので、3のレスポンスを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/5cc5146c-404d-b0ae-f266-1d963d579531.png)
### 4-2. オブジェクトを外部Pythonスクリプトで変換
アクションから「DOSコマンドの実行」をドラッグしてフローにドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/608e562f-e9fe-d951-61b7-d1a519c1c3e4.png)
アクションの設定画面が表示されるので、DOSコマンドに「python decode.py %JsonAsCustomObject2.data%」、作業フォルダにPythonスクリプトの格納ディレクトリを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/4255f9f2-443e-6b6a-1716-bf6f827f96a0.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/9b00cf16-274a-85b9-a94b-cd9d08a3f116.png)

## 5. デコード結果をダイアログで表示する。
アクションから「メッセージを表示」をドラッグしてフローにドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/de4af26d-0e05-c7cc-e45a-bbaafec1b721.png)
アクションの設定画面が表示されるので、表示するメッセージに4-2の実行結果を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/632de797-bc92-77e7-9676-7b8a95d06d1a.png)
追加されるとこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/865c37fc-a695-2f8a-ce30-a35c74dea0e8.png)

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

作成したフローを実行する。
下記のダイアログが表示されれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587410/489be5bd-95e9-929a-9d98-dd051a2a7ad5.png)