Power Automate Desktop

[Power Automate Desktop]Google APIのアクセストークンを取得するフロー

前回の記事でGoogle APIのアクセストークンを取得するPowerShellスクリプトを紹介しました。今回はそのスクリプトをPower Automate Desktop(PAD)のフローに組み込んでみようと思います。

Google APIのアクセストークンを取得するフロー(GetGoogleAccessToken)

入力変数

アクセストークンの取得に必要なクライアントID、クライアントシークレット、スコープ(複数ある場合は「,」で区切る)、トークンが書かれたJSONファイルの保存先フォルダ(トークンフォルダー)のパスを変数として受け取るため、下記の入力変数を用意します。

  1. %ClientId%
  2. %ClientSecret%
  3. %Scopes%
  4. %TokenFolderPath%

出力変数

取得したアクセストークンを出力するための出力変数を用意します。

  1. %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 フローを実行」アクションで上記アクションの動作確認を行ってみます。

結果は下図の通りで、無事にアクセストークンが取得できました。

関連記事

[PowerShell]Google APIのアクセストークンを取得する前のページ

[Power Automate Desktop]Google Driveにファイルをアップロードするフロー次のページ

関連記事

  1. Google関連

    [Google Apps Script]URL Shortener APIを使って短縮URLを取得す…

    2015/7/14 追記:いつの間にかAPIの呼び出しにAPI…

  2. Google関連

    [Google Apps Script]スプレッドシートをExcelファイル(xlsx)に変換する

    スプレッドシートのファイルメニュー → 形式を指定してダウンロード →…

  3. Google関連

    Google Docs API v1を試してみました。

    下記TechCrunchの記事によると、Google ドキュメントの新…

  4. Office関連

    Gmail APIを使ってメール送信するVBAマクロ(3)

    前回、前々回とGmail APIを扱ってきましたが、今回は前々回の記事…

  5. Google関連

    [Google Apps Script]CLIツール「clasp」を試してみました。

    今年の初めに話題になった、GASのCLI(Command Line I…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP