Power Automate for desktop

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

前回前々回の記事でGoogle Drive APIの実行に必要なアクセストークンの取得まで行うことができました。
今回はいよいよPower Automate Desktop(PAD)でGoogle Driveの指定したフォルダにファイルをアップロードしてみようと思います。

Google Driveにファイルをアップロードするフロー(UploadGoogleDrive)

入力変数

アップロードするファイルのパスとアップロード先となるGoogle DriveのフォルダーのIDを入力変数として受け取ります。受け取ったフォルダーのIDが空だった場合はルートフォルダーにファイルをアップロードします。
フォルダーのIDについてはこちらのサイトをご参照ください。

  1. %TargetFilePath%
  2. %TargetFolderId%

1. 変数の設定

前回の記事で書いたアクセストークンを取得するフローの実行に必要なクライアントID(%ClientId%)、クライアントシークレット(%ClientSecret%)、トークンフォルダーのパス(%TokenFolderPath%)、スコープ(%Scopes%)、そしてエンドポイントのURI(%UploadURI%)を変数として設定します。

下記エンドポイントを見れば分かる通り、今回はマルチパートでアップロードを行います。

  • %Scopes%:https://www.googleapis.com/auth/drive
  • %UploadURI%:https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart

2. ファイルが存在する場合

アップロード対象のファイルが存在するかどうかを確認し、存在しない場合は「Err」ラベルに移動します。

3. Desktop フローを実行

前回作成したフロー(GetGoogleAccessToken)を実行し、アクセストークンを取得します。

エラー発生時の処理として「Err」ラベルに移動するようにします。

4. ファイル パス部分の取得

API実行時に必要となるファイル名をパスから取得します。

5. ランダム テキストの作成

上記の通り今回はマルチパート形式でファイルをアップロードするので、「ランダム テキストの作成」アクションを使ってboundary文字列を作成します。

6. PowerShell スクリプトの実行

下記PowerShellスクリプトでファイルをBase64エンコードし、結果を変数「%Base64%」として設定します。

[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("%TargetFilePath%"))

7. PowerShell スクリプトの実行

下記PowerShellスクリプトでファイルのMIMEタイプを取得し、結果を変数「%MIMEtype%」として設定します。

Add-Type -AssemblyName "System.Web"
[System.Web.MimeMapping]::GetMimeMapping("%TargetFilePath%")

8. If

アップロード先フォルダーのIDが空の場合とそうでない場合で、アップロード先やファイル名を指定するためのJSON文字列を変更します。

・フォルダーIDが空の場合

{"name":"%FileName%", "mimeType":"%MIMEtype%"}

・フォルダーIDが空でない場合

{"name":"%FileName%", "mimeType":"%MIMEtype%", "parents":["%TargetFolderId%"]}

9. 変数の設定

POSTするデータを変数「%PostData%」として設定します。

--%boundary%
content-type: application/json; charset=UTF-8

%JSON%
--%boundary%
Content-Type: Application/octet-stream
Content-Transfer-Encoding: base64

%Base64%
--%boundary%--

10. Web サービスを呼び出します

APIを実行し、ファイルをアップロードします。

・URL:%UploadURI%
・メソッド:POST
・受け入れる:application/json
・コンテンツ タイプ:

multipart/related; boundary="%boundary%"

・カスタム ヘッダー:

Authorization: Bearer %AccessToken%

・要求本文:%PostData%
・応答を保存します:テキストを変数に変換します (Web ページ用)
・要求本文をエンコードします:オフ

11. If

「Web サービスを呼び出します」アクションが成功した場合(StatusCodeが200)は、フローを正常に停止します。

12. ラベル(Err)

処理の途中で失敗した場合はラベル「Err」に移動し、エラーメッセージを表示してフローを終了するようにします。

フロー全体

動作確認

新規フローを作成し「Desktop フローを実行」アクションで上記アクションの動作確認を行ってみます。

結果は下図の通りで、問題無くファイルがアップロードされることが確認できました。

関連記事

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

「はじめてのPower Automate Desktop」レビュー次のページ

関連記事

  1. Power Automate for desktop

    Power Automate DesktopでPPAPしてみた。

    PPAP、所謂パスワード付きZipをメールに添付して、そのメールとは別…

  2. Google関連

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

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

  3. Power Automate for desktop

    [Power Automate Desktop]オートメーション ブラウザーとは?

    まず表題の「オートメーション ブラウザー」とは何かと言うと、Power…

  4. Google関連

    [Google Apps Script]Google ドライブにある画像をスライドに挿入する

    最近取り扱っているGoogle Apps ScriptによるGoogl…

  5. AppSheet

    AppSheetとGoogle Apps Scriptとの連携機能を試してみました。

    当ブログでも2年ほど前に取り上げたことがある(下記記事ご参照)「App…

  6. Google関連

    [Google Apps Script]拡張サービスを使用する。

    Google Apps Scriptでは「拡張サービス」(Advanc…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP