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%に返ります。
便利~!
コメント
コメントを投稿