自動化する作業
- WebシステムにGETを投げてレスポンスデータを取得する。
- 取得データから組み込みPythonコードでJsonデータを作成する。
- WebシステムにPOSTでJsonを投げてレスポンスデータを取得する。
- 外部Pythonファイルを実行してURLエンコード文字列をデコードする。
- デコード結果をダイアログで表示する。
Web1からGETしたデータを内部で加工し、Web2にPOSTして取得したデータを外部ファイルで加工して表示するパターン例です。
※GETとPOSTは「 https://httpbin.org/ 」に投げてお試しします。
実際にフローを作る
0. 事前準備
1. WebシステムにGETを投げてレスポンスデータを取得する。
アクションから「Webサービスを呼び出します」をドラッグしてフローにドロップします。
アクションの設定画面が表示されるので、URLに「https://httpbin.org/get?one=1&twe=2
」を設定します。
※「https://httpbin.org/
」はGETでクエリパラメータ渡すとレスポンスデータに詰めて返してくれます。
追加されるとこんな感じです。
2. 取得データから組み込みPythonコードでJsonデータを作成する。
2-1. GETしたJSONをオブジェクトに変換
アクションから「JSONをカスタムオブジェクトに変換」をドラッグしてフローにドロップします。
アクションの設定画面が表示されるので、1のレスポンスを設定します。
2-2. オブジェクトを組み込みPythonスクリプトで変換
アクションから「Pythonスクリプトの実行」をドラッグしてフローにドロップします。
アクションの設定画面が表示されるので、実行する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
3. WebシステムにPOSTでJsonを投げてレスポンスデータを取得する。
アクションから「Webサービスを呼び出します」をドラッグしてフローにドロップします。
アクションの設定画面が表示されるので、URLに「https://httpbin.org/post?three=3
」を設定し、メソッドを「POST」に設定します。
要求本文には2-2の出力結果(Pythonで作ったJSON)を渡します。
追加されるとこんな感じです。
4. 外部Pythonファイルを実行してURLエンコード文字列をデコードする。
4-1. POSTの応答結果JSONをオブジェクトに変換
アクションから「JSONをカスタムオブジェクトに変換」をドラッグしてフローにドロップします。
アクションの設定画面が表示されるので、3のレスポンスを設定します。
4-2. オブジェクトを外部Pythonスクリプトで変換
アクションから「DOSコマンドの実行」をドラッグしてフローにドロップします。
アクションの設定画面が表示されるので、DOSコマンドに「python decode.py %JsonAsCustomObject2.data%」、作業フォルダにPythonスクリプトの格納ディレクトリを設定します。
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
5. デコード結果をダイアログで表示する。
アクションから「メッセージを表示」をドラッグしてフローにドロップします。
アクションの設定画面が表示されるので、表示するメッセージに4-2の実行結果を設定します。
追加されるとこんな感じです。