最近、Power Automateをいろいろといじり始めていますが、今回は、Power Automateから Virus TotalにアクセスするPythonプログラムを呼び出してみましたので、そのときの設定を記録しておきます。
なお、処理の流れは以下の通りです。
1.入出力変数(NewInput)にVirus Totalで評価するURLを設定
2.NewInputの内容をinput.txtに書き込み
3.Virus TotalにアクセスするPythonプログラムを呼び出し
(input: input.txt, output:output.txt, scan_result.json)
4.Virus Totalでの評価結果をoutput.txtファイル等から読み込み
5.Gmailをつかって評価結果をメール送信

以下、フローを作成していて苦労した点を少し説明していきます。
2.NewInputの内容をinput.txtに書き込み
Power Automateの機能メニューから「テキストをファイルに書き込む」を選択した際に、エンコードがデフォルトでUTF-8になっていましたが、それだとなぜが Pythonで読み込んだときに半角が全角になってしましいました。
そこでエンコードの設定を「UTF-8」から「システムの規定値」に変えたところ、半角のままpythonで処理することができました。

3.Virus TotalにアクセスするPythonプログラムを呼び出し
正直このPythonプログラムは ChatGPTにお願いして大部分を作成してもらいました。
手直ししたのは、「json_response[‘positives’]」を「json_response[“positives”]」を書き換えたくらいです。
あとはそのまま動いてくれました。
import requests
import json
# VirusTotalのAPIキーを設定します。
api_key = 'virus totalのapiキーをここに設定'
# VirusTotalのURLスキャンAPIエンドポイントを設定します。
url_scan_endpoint = 'https://www.virustotal.com/vtapi/v2/url/scan'
# ファイルを読み込みモードで開きます。
with open('c:\\tmp\\input.txt', 'r') as file:
# ファイルから文字列を読み込み、調査したいURLを設定します。
url_to_check = file.read()
print(url_to_check)
# APIリクエストのパラメータを設定します。
params = {'apikey': api_key, 'url': url_to_check}
# URLスキャンAPIにリクエストを送信します。
response = requests.post(url_scan_endpoint, data=params)
# レスポンスをJSON形式で取得します。
json_response = response.json()
# スキャンIDを取得します。
scan_id = json_response["scan_id"]
# VirusTotalのURLレポートAPIエンドポイントを設定します。
url_report_endpoint = 'https://www.virustotal.com/vtapi/v2/url/report'
# APIリクエストのパラメータを設定します。
params = {'apikey': api_key, 'resource': scan_id}
# URLレポートAPIにリクエストを送信します。
response = requests.get(url_report_endpoint, params=params)
# レスポンスをJSON形式で取得します。
json_response = response.json()
# URLが安全かどうかを判断します。
if json_response["positives"] > 0:
text_to_write = 'The URL is not safe.'
else:
text_to_write = 'The URL is safe.'
# ファイルを書き込みモードで開きます。
with open('output.txt', 'w') as file:
# 文字列をファイルに書き出します。
file.write(text_to_write)
# レスポンスをファイルに保存します。
with open('scan_result.json', 'w') as outfile:
json.dump(json_response, outfile)
5.Gmailをつかって評価結果をメール送信
ここでは、Gmailサーバにアクセスする為のポート番号の設定や、2段階認証していたのでアプリパスワードの設定に少してこずりました。

