こんにちは。ハイダックです。
記事タイトルの通りUiPathでBoxAPIを使いフォルダ操作を行ってみました。
ファイル操作の部分はUiPathでの実行になりますが、その準備段階での初期設定やトークン取得はUiPathに限らない共通の手順になりますので、UiPathユーザでなくとも「BoxAPIを触ってみたいけど設定が面倒臭そう!」という方は参考にしてはいかがでしょうか。
はじめに
Box(ボックス)とは、DropboxやGドライブなどの「クラウドストレージ」の1つです。Boxの特徴には触れませんが、BoxのAPIを使うことでコピーや削除、アップロード等のファイル操作がUI操作を介さずに高速で行えます。
私自身BoxのAPIを叩くのは初めてで、アクセストークン取得までにいろいろな記事を参考にしました。
私の苦労を踏まえ、どの記事よりも画像を多く、具体的に説明しようと思います。
初期設定
boxのアカウントは既に存在するものとして、その後の設定から説明します。
アプリケーション作成
box developer console(https://app.box.com/developers/console)にログインします。
「アプリの新規作成」を選択します。
「企業統合」を選択します。
「標準OAuth2.0(ユーザー認証)」を選択します。
アプリ名を決定して「アプリの作成」を行います。このアプリ名は後からでも変更可能です。
これで設定は完了です。ここまでは簡単ですね。
トークン取得
アクセストークンを取得するまでの手順です。ここが一番複雑でめんどくさいところですので頑張ってください。
ID・シークレット・リダイレクトURI
先ほど作成したアプリ管理画面の「構成」を開きます。
Developerトークンは使いません。ここでは、クライアントIDとクライアント機密コード、リダイレクトURIを使います。メモしておきましょう。
※クライアントIDと機密コードは意図的に変更しない限り変わることはありません。リダイレクトURIは後で変更することになります。
さらに「構成」画面では、システムに許可するbox操作の権限を決めることができます。今回は何もいじりません。
認証コード取得
以下のURLにアクセスしてください。下のようなページに遷移するはずです。
https://account.box.com/api/oauth2/authorize?response_type=code&client_id={クライアントID}&redirect_uri={リダイレクトURI}
※{クライアントID}と{リダイレクトURI}は先ほどメモしたものです。コピペの際、半角スペースが入ることがあります。注意してください。
操作権限が正しければ「Boxへのアクセスを許可」します。
すると、以下のようにリダイレクトします。ここでリダイレクトしたページのURLをメモしておきましょう。
再度開発者コンソールの「構成」画面にアクセスし、リダイレクトURIを先ほどコピーしたURLで上書きします。その後「変更を保存」します。
変更の保存後もう一度、以下のURLにアクセスしてください。{リダイレクトURI} は変わっていると思います。
https://account.box.com/api/oauth2/authorize?response_type=code&client_id={クライアントID}&redirect_uri={リダイレクトURI}
前述同様、アクセスを許可するとリダイレクトします。一度目とあまり変わらないように思いますがURLが変わっているはずです。このURLの中でcode=○○の◯◯部分が認証コードになります。このコードをメモしておきましょう。
※認証コードは30秒で失効してしまいますので、取得後は速やかに下の処理を行ってください。失効してしまった場合は、再度URLへアクセスすれば再取得できます。
アクセストークン取得(初回)
アクセストークンを取得する為に基本的にはコマンドプロンプト(以下cmd)を使うのですが、今回はそれに加えUiPathを使った方法も記載しようと思います。
cmdを使った取得
cmdで以下のcurlコマンドを実行します。
curl -d grant_type=authorization_code -d code={認証コード} -d client_id={クライアントID} -d client_secret={クライアント機密コード} https://api.box.com/oauth2/token
成功すると以下のようにレスポンスが得られます。
※認証コードの失効により失敗した場合は、認証コードの取得からやり直してください。
ここでアクセストークンとリフレッシュトークンが得られますが、アクセストークンは有効期限が60分で実用性が低く、ロボ作成には向いていません。
アクセストークンはリフレッシュトークンを用いて再生成することができます。後でトークンリフレッシュの方法に触れます。リフレッシュトークンをメモしておきましょう。
(このリフレッシュトークンにも失効条件があるようです。詳しくはわからないのですが、多いときは数十回、少ないときは数回でリフレッシュトークンが失効しました。リフレッシュトークンが失効するのは初体験で対応に困りましたが、再取得する処理を組み込むべきでしょう。かなり不便)
UiPathでの取得
UiPathでWebAPIを使用する場合「Httpリクエスト」アクティビティを用います。
認証コードからアクセストークンを取得するためには次のように設定します。
下のような設定画面は一度「Ok」を押し完了すると二度と表示できません。しかし、プロパティフィールドで設定できますのでご安心ください。
具体的に設定すると次のようになります。
この状態で右下の「プレビュー」をクリックすると、以下のようにレスポンスが得られます。
このようにして、リフレッシュトークンを取得します。
トークンリフレッシュ
先ほども説明しましたが、アクセストークンそれ自体は60分で失効してしまいます。ですので実際には、API処理の前にトークンリフレッシュ(リフレッシュトークンからアクセストークンを取得する)処理を組み込むことが一般的です。
今回はUiPath上でのトークンリフレッシュの方法のみを説明します。
先ほど同様「Httpリクエスト」アクティビティを用い、下のように設定します。
プロパティフィールドで確認するとこのようになります。
スタートノードにつなぎ実行すると、レスポンスがJsonで得られます。
実際には得られるJson型テキストを「デシリアライズJson」アクティビティ等で整形し、アクセストークン部分だけ取り出して使うのですが今回は割愛いたします。
ファイル操作API(コピー・削除・アップロード)
ここから実際にAPIを使ってファイル操作を行います。
boxAPIで行える処理及びリクエスト方法は公式リファレンスで公開されています。本記事もこれに基づいています。
また、使用するアクティビティは例によって「Httpリクエスト」アクティビティです。
ファイルコピー
以下のように設定します。
{アクセストークン}には、トークンリフレッシュにより得られたアクセストークンを入れます。
{ファイルID}と{フォルダID}は、Box上でのURLから確認できます。
(自動化の際には、都度URLから確認するわけにはいかないので このID取得もAPIで実装していきます。)
設定後のプロパティは次のようになります。
この状態で実行するとファイルがコピーされます。
ファイル削除
以下のように設定します。
先ほどより簡単なのでプロパティの設定画面は割愛します。
ファイルアップロード
以下のように設定します。
ボディのmultipart/form-data はファイルデータの送信によく用いられる形式です。
例として、以下のようになります。
1つ目のパートでアップロードするファイルの情報を記述し、2つ目のパートでアップロード先を指定しています。
実際にUiPath上で設定すると次のようになります。
このようにした場合、実行すると次のようなテキストファイルがアップロードされます。
終わりに
いかがだったでしょうか。
BoxAPIはリフレッシュトークンにも失効があり驚きました。同時に、自動化には不向きなのかなと感じましたね。
アクセストークンさえ取得できればAPIを使用するのは比較的簡単だと思っております。是非、公式リファレンスを見ながら色々なAPIを試してみてください。
今後も色々なアプリ連携を記事にしていきたいと思っておりますので、どうぞよろしくお願いいたします。