前回の記事でGoogle APIのアクセストークンを取得するPowerShellスクリプトを紹介しました。今回はそのスクリプトをPower Automate Desktop(PAD)のフローに組み込んでみようと思います。
Google APIのアクセストークンを取得するフロー(GetGoogleAccessToken)
入力変数
アクセストークンの取得に必要なクライアントID、クライアントシークレット、スコープ(複数ある場合は「,」で区切る)、トークンが書かれたJSONファイルの保存先フォルダ(トークンフォルダー)のパスを変数として受け取るため、下記の入力変数を用意します。
- %ClientId%
- %ClientSecret%
- %Scopes%
- %TokenFolderPath%
出力変数
取得したアクセストークンを出力するための出力変数を用意します。
- %AccessToken%
サブフロー:GetTokenFile
前回の記事で紹介したスクリプトをサブフローとして組み込みます。
スクリプト内で読み込んでいるDLLのパスは必要に応じて変更してください。
[void][Reflection.Assembly]::LoadFile("C:\System\Lib\Newtonsoft.Json.dll") [void][Reflection.Assembly]::LoadFile("C:\System\Lib\Google.Apis.dll") [void][Reflection.Assembly]::LoadFile("C:\System\Lib\Google.Apis.Core.dll") [void][Reflection.Assembly]::LoadFile("C:\System\Lib\Google.Apis.Auth.dll") $client_secrets = New-Object Google.Apis.Auth.OAuth2.ClientSecrets $client_secrets.ClientId = "%ClientId%" $client_secrets.ClientSecret = "%ClientSecret%" [String[]]$scopes = @("%Scopes%") $fds = New-Object Google.Apis.Util.Store.FileDataStore("%TokenFolderPath%", $true) $gwab = [Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker]::AuthorizeAsync($client_secrets, $scopes, "user", [System.Threading.CancellationToken]::None, $fds) $res = $gwab.Result
1. フォルダーが存在する場合
トークンフォルダーが存在するかを確認します。
存在しない場合は「サブフローの実行」アクションで「GetTokenFile」フローを実行します。
2. フォルダー内のファイルを取得
トークンフォルダー内にあるJSONファイルを取得します。
ファイルが存在しない場合(フォルダー内のファイル個数が1未満)は、「サブフローの実行」アクションで「GetTokenFile」フローを実行した後で再度フォルダー内のファイルを取得します。
3. ファイルからテキストを読み取ります
トークンフォルダー内にあるJSONファイルの内容を取得します。
・ファイル パス:%Files[0]%
・内容の保存方法:単一のテキスト値
・エンコード:UTF-8
4. JSON をカスタム オブジェクトに変換
取得したJSONをカスタムオブジェクトに変換します。
エラー発生時の処理として「Err」ラベルに移動するようにします。
5. Web サービスを呼び出します
JSONから取得したリフレッシュトークンを使用してアクセストークンを取得します。
・URL:https://accounts.google.com/o/oauth2/token
・メソッド:POST
・受け入れる:application/json
・コンテンツ タイプ:application/x-www-form-urlencoded
・要求本文:
grant_type=refresh_token&client_id=%ClientId%&client_secret=%ClientSecret%&refresh_token=%JsonAsCustomObject['refresh_token']%
・応答を保存します:テキストを変数に変換します (Web ページ用)
・要求本文をエンコードします:オフ
エラー発生時の処理として「Err」ラベルに移動するようにします。
6. If
「Web サービスを呼び出します」アクションが成功した場合(StatusCodeが200)のみ、出力変数「%AccessToken%」の値としてアクセストークンを設定し、フローを終了します。
7. ラベル(Err)
処理の途中で失敗した場合はラベル「Err」に移動し、エラーメッセージを表示してフローを終了するようにします。
フロー全体
動作確認
新規フローを作成し「Desktop フローを実行」アクションで上記アクションの動作確認を行ってみます。
結果は下図の通りで、無事にアクセストークンが取得できました。
この記事へのコメントはありません。