Power Automate DesktopでAPIを使っていろいろ試してみた(Gmail受信編)

無料で使えるMicrosoft Power Automate DesktopでAPIを使っていろいろ試してみた。 

今回はGoogle REST APIでGmailのメッセージ取得に挑戦します。

Gmailのスコープの設定とかアクセストークンの取得方法はいろんなサイトで詳説されているので割愛です。 


①アクセストークンの取得
まずはOAuth2.0認証を行いGoogle REST APIに接続します。
リフレッシュトークンを使用してアクセストークンを取得しましょう。
Power Automate Desktopのアクション「Webサービスを呼び出します」でパラメータを以下のように設定。

URL: https://accounts.google.com/o/oauth2/token
メソッド: POST
受け入れる: application/json
コンテンツタイプ: application/x-www-form-urlencoded
要求本文: client_id=あなたのクライアントID&client_secret=あなたのクライアントシークレット&refresh_token=あなたのリフレッシュトークン&grant_type=refresh_token

 

request bodyが黒塗りばっかでワロタ。


②JSONをカスタムオブジェクトに変換
Power Automate Desktopのアクション「JSONをカスタムオブジェクトに変換」を使用して、①の%WebServiceResponse%を使用しやすい形にしておきましょう。


%WebServiceResponse%の内容が%JsonAsCustomObject%にリストとして格納されます。


%JsonAsCustomObject['access_token']%とすればアクセストークンのみ取得できます。
このようにして取得したJSONの内容を後続の処理に使用していきます。


③メッセージIDの取得
②で取得したアクセストークンを使用してメッセージIDの一覧を取得します。
再び「Webサービスを呼び出します」を使用していきますが、①とは異なりメソッドはGETとします。
また、カスタムヘッダーに認証情報が必要です。

URL: https://www.googleapis.com/gmail/v1/users/me/messages/
メソッド: GET
受け入れる: application/json
コンテンツタイプ: application/json
カスタムヘッダー: Authorization: Bearer  %JsonAsCustomObject['access_token']%


④メッセージの取得
③で取得したメッセージIDをURLの最後に付け足して再度「Webサービスを呼び出します」。


今回の例では、%WebServiceResponse2['payload']['parts'][0]['parts'][0]['body']['data']%の中にメールの本文が格納されています。


⑤メール本文のデコード
④で取得したメール本文はBase64URLエンコードされています。
Base64URLエンコードとは通常のBase64エンコードに加えて「+」を「-」に、「/」を「_」に置き換えたものです。
「+」や「/」はURLでは別の意味を持ってしまうため、URLセーフにするためこのような方法が用いられます。
Power Automate DesktopではBase64URLはおろかBase64も直接デコードすることはできないため、次のようにしてデコードしていきます。

「テキストを置換する」で「-」を「+」に置換。

再び「テキストを置換する」で「_」を「/」に置換。

これでURLセーフにされていたのを通常のBase64文字列に変換することができました。

最後に「PowerShell スクリプトの実行」でBase64をデコードします。
実行するPowerShellコードは下記のようにします。
変数名は適宜書き換えてください。

$b64txt = "%Replaced2%"
$byte = [System.Convert]::FromBase64String($b64txt)
$txt = [System.Text.Encoding]::UTF8.GetString($byte)
echo $txt


echo $txtの内容が%PowershellOutput%に返ります。

今回はメール本文の内容を取得しましたが、添付ファイルなども同じようにして取得することができます。

便利~!

コメント

このブログの人気の投稿

Power Automate Desktopで「IMAP サーバー imap.gmail.com で認証できませんでした。」の対処法

コマンドでサウンド関係の設定を変更する