Power Automate Desktop(PAD)でGoogle ドライブにファイルをアップロードするフローを作成したいのですが、パソコン版 Google ドライブは使用したことが無いのでGoogle Drive APIを使うことにします。
今回はその前段階として、APIを呼び出すために必要なアクセストークンをPowerShellで取得してみます。
事前準備
APIを呼び出す際にクライアントIDとクライアントシークレットが必要になるため、下記記事を参考にして事前に準備しておきます。
数年前の記事で、いまとは一部内容が異なっている部分がありますが、大まかな作業は変わっていません。
今回はアプリケーションの種類を「デスクトップ アプリ」とし、API ライブラリからGoogle Drive APIを有効にしておきました。
.NET用ライブラリの準備
簡単にアクセストークンを取得できるライブラリ(実行するのに必要なものも含む)がNugetで公開されているので、事前にインストールしておきます。
- Google.Apis.dll
- Google.Apis.Core.dll
- Google.Apis.Auth.dll
- Newtonsoft.Json.dll
インストール方法は色々ありますが、私はお手軽なコマンドラインを使用することが多いです。
Google APIのアクセストークンを取得するPowerShellスクリプト
準備ができたらいよいよスクリプトを実行します。
コード内のクライアントIDとクライアントシークレットは上記手順で取得したものに置き換えてください。
[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 = "(クライアントID)" $client_secrets.ClientSecret = "(クライアントシークレット)" [String[]]$scopes = @("https://www.googleapis.com/auth/drive") $fds = New-Object Google.Apis.Util.Store.FileDataStore("C:\wk\GoogleAPI\token.json", $true) $gwab = [Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker]::AuthorizeAsync($client_secrets, $scopes, "user", [System.Threading.CancellationToken]::None, $fds) $res = $gwab.Result
上記コードを実行すると、問題が無ければログイン画面が表示されるので、ログインと承認を行います。
無事に承認が行われると、FileDataStoreのコンストラクタで指定したパス(上記コードでは「C:\wk\GoogleAPI\token.json」)にアクセストークンやリフレッシュトークンが書かれたJSONファイルが保存されます。
上記コードのようにクライアントIDとクライアントシークレットをハードコーディングしたくない場合は、下記ページにあるようにプロジェクトページからダウンロードできるclient_secrets.jsonファイルをFileStreamで読み込んで使用します。
この記事へのコメントはありません。