最近、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段階認証していたのでアプリパスワードの設定に少してこずりました。
コメントを残す