DataSpiderでDropboxにつないでみた（ファイルダウンロード）

## はじめに

こんにちは！すぎもんです:grinning:

今回はタイトルの通り、DataSpiderでDropboxに繋いでみる検証をやってみました。
Dropboxは、世界的なシェアを持つクラウドストレージサービスの一つです。
オンライン上のデータを様々な媒体で共有できるDropboxというサービスは、ここ数年のパンデミックによるリモートワークの急速な普及にも大きな役割を果たしたことと思います。

今回は、Dropboxによってクラウド上に格納されたファイルを、DataSpiderからダウンロードしてみます！

## 今回やること

DataSpiderからDropboxに繋いで、Dropboxの特定のフォルダに格納されているファイルを、zip形式でダウンロードします。検証手順は、下記の通りです。

　①Dropbox側のアプリの設定
　②Dropbox内の連携ファイル準備
　③DataSpiderの設定（ZIP形式のファイルのダウンロード）
　④実行確認

以上です。早速やっていきます。

## 事前準備（Dropboxアプリの設定）
まずは、DropboxのAPIを利用するために必要なアプリケーションを作成します。
Dropboxのユーザーアカウントを作成して、下記にログインします。
（※今回は、無料アカウント使いました）
https://www.dropbox.com/developers/documentation

画面右上のアプリコンソールをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/10cc81e8-bdc5-48f1-34e9-e1ea7d19afd2.png)
Create Appをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6861811f-c6f9-0387-3fde-a29fc09c7cbd.png)
Create new app on the DBX Platformの画面で必要事項を入力して、CreateAppを押下します。DataSpiderからDropboxに接続できることの確認をしたいので、範囲の狭い「App Folder」を選択しました。

<strong>（参考）Dropbox for HTTP Developers Dropbox API v2　（API仕様）</strong>
https://www.dropbox.com/developers/documentation/http/documentation
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/82a71cac-ad65-f3be-cf63-5245e153108b.png)
アプリの設定をしていきます。まずは「Setting」タブの設定です。
「OAtuth2」に下記の通り設定します。
　　・Redirect URIsに`http://localhost:7700/dataspider/oauth_2_0`を追加
　　・Allow public clients（Implicit Grant & PKCE）は`Allow`を選択
　　・Generated access token は`デフォルト`

:::note info 
「App key」と「App secret」はDataSpiderの認証設定で使うのでメモします。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ddcaad6f-c96e-cf43-4f51-890366be3c90.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/22854bbd-1b97-1b58-84f9-270930ff7550.png)

次に、「Permissions」タブの設定を適宜行います。
ファイルやフォルダ等それぞれに対する書き込み／読み取り権限を設定します。私は、全ての書き込み権限を付与しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/662b47cf-ad97-1584-5d68-981faadb8f3e.png)
変更すると下記のようになるので、Submitをclickして保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/15845a98-a606-c7a9-b83d-6b1ad6eb800b.png)
以上で、Dropboxアプリの設定は完了です。

## 事前準備（Dropbox内の連携ファイル準備）
Dropboxにログインします。
https://www.dropbox.com/login

ログインすると下記の画面が表示されるので、「すべてのファイル」-「アプリ」の中から作成した「アプリ」を選び、配下に任意のフォルダとファイルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/fe41b30c-fcc2-5cf0-7ac8-81d17d3d32ae.png)
私は、下記のように自分の作成したアプリ内にフォルダとファイルを作成しました。
　　フォルダ名　：　`Dropbox/アプリ/Test01_CON01/test20220809`
　　ファイル名　：　`textfile.txt` `テキストファイル.txt`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/177084ef-5e6c-3b54-4fd9-c3bb639c0ccd.png)
以上で、Dropbox内の連携用ファイルの準備は完了です。

## DataSpiderの設定
新規でプロジェクトとスクリプトを作成します。
また、スクリプト内のロジックで使える「スクリプト変数」も作成します。

スクリプト変数は下記の通り作成します。値には、事前準備（Dropbox内の連携ファイル準備）で作成した任意のフォルダを指定してください。
    
　　変数名　：　`フォルダ`
　　変数型　：　`文字列`
　　値　　　：　`/Test01_CON01/test20220809`

:::note info 
スクリプト変数「フォルダ」の "値" は、先頭にスラッシュ( / )を付与します。
:::

次に、ツールパレットから「ネットワーク」-「REST」-「GET実行」のアイコンを、デザイナ上にドラッグ＆ドロップして設定画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e94c79f1-79f0-d91d-d625-4b6b597e6b0a.png)

まず「必須設定」タブの設定です。

接続先のテキストボックスを選択して、追加を選択します。
この「接続先」は、RESTで接続する先のURLを設定することになります。「パス」の値は、「接続先」で設定したURLの後ろに付加され、最終的なendpointになります。

:::note info
「URLの設定値」＋「GET実行の必須設定のパス値」
＝DropboxのAPI仕様（URL_STRUCTURE）となるよう設定する必要があります
:::

DropboxのAPI「files の download_zip」を利用しています。（URL_STRUCTURE、EXAMPLE、PARAMETERSを参考にしました。）
https://www.dropbox.com/developers/documentation/http/documentation#files-download_zip


今回は以下のように設定しました。

　　名前　　：　`GET:download_zip`
　　接続先　：　`Dropbox content REST接続設定`
　パス　　　：　`/2/files/download_zip`
＜接続先設定＞
　　URL　 　：　`https://content.dropboxapi.com`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/73cfd30b-e6b7-808b-19c3-f40406274759.png)

「接続テスト」を押下すると、入力されているURLがDataSpiderと通信ができるか、を確認することができます。OKであれば「接続先」が正しく設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/01064b2f-01e4-5f11-8c30-a394d4a0ba94.png)

::: note info 
DataSpiderの接続先設定は、上述のようにデザイナ上でもできますが、
「コントロールパネル」-「グローバルリソースの作成」からも設定できます。
:::

次に、「レスポンス設定」タブの設定します。

　データ出力先　：`ファイル`
　ファイルパス　：`/data/dropbox01/${フォルダ}.zip`

:::note info 
DataSpiderでは、設定値に変数を使うときに[${変数名}]と表記します。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/621fecb3-aedc-4a93-df09-8b36cb554d8a.png)

次に「ヘッダ設定」タブの設定です。
DropboxのAPI仕様のEXAMPLEを確認すると、headerとして"Dropbox-API-Arg"を設定しています。これに倣って、PARAMETERSの例を参考に値を設定します。
フォルダのパスを記載する方式を採用して、「ヘッダ設定」に下記の通り設定します。

　名前　：　`Dropbox-API-Arg`
　　値　：　`{"path":"${フォルダ}"}`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/f794479e-1359-9571-afff-ae3a15e1f7a5.png)

最後に、「認証設定」タブを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1716903a-40bc-dd04-2ec8-55d69448bac9.png)
「追加」を押下します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/60b717b8-228c-c1c1-5162-b7d0818648da.png)


<strong>＜必須設定＞</strong>
必須設定は、下記の通りです。DropboxのAPI仕様のAuthorizationを参考に設定します。
認可エンドポイントは「/oauth2/authorize」、トークンエンドポイントは「/oauth2/token」のAPIのURL_STRUCTUREの内容を記載します。
「/oauth2/authrize」でEXAMPLEの「Example: Auth URL for code flow with offline token access type」を参考にパラメータを設定します。

　　　　　名前　　　　　　　：　`任意`
　クライアントID　　　　　　：　`{App key}`
　クライアントシークレット　：　`{App Secret}`
　リダイレクトURI　　　　　 ：　`{redirect URI}`
　認可エンドポイント　　　　：　`https://www.dropbox.com/oauth2/authorize`
　トークンエンドポイント　　：　`https://api.dropboxapi.com/oauth2/token`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/bc1bc2d9-36bc-b250-0559-7d715c4ee40a.png)


<strong>＜詳細設定＞</strong>
詳細設定は、下記の通りです。、「response_type」は、認可コードを取得する必要があるので"code"を指定、「token_access_type」はrefresh_tokenを含む形式としたいので"offline"を指定します。
　　キー　：　`response_type`　　　　値　　：　`code`
　　キー　：　`token_access_type`　　値　　：　`offline`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/653c3be6-06c7-4e23-d390-462e5f68dca2.png)

設定完了後、「必須設定」タブ内の「トークンを発行する」をクリックします。
認可コードの設定ウィンドウが出てくるので、「認可コード取得」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6f946695-5f94-4aa0-3cc6-c799839b099f.png)


DropboxのAPIリクエストの承認画面で、`「このアプリをリンクする前に」`の注意画面が表示された場合は、[続行する]をクリックし、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/08fbc3a0-7ea8-009c-cae7-0ccf555847a6.png)
作成したアプリに権限を与える旨の画面が表示されるので、「許可」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2b98c748-8b21-9e16-ed34-aea79c11e19d.png)



画面に出力された「コード」をコピーし、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6c1c222c-3295-4946-43a4-a70214363e81.png)
認可コード欄に張り付けて、OKをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e367d7e7-f1e3-c16a-4fd7-7df5281afb3b.png)
「トークンを取得しました」が表示されれば、リクエストの承認が成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/c0100654-3699-61d8-02d7-262c50dcb92f.png)

## 実行してみる
作成したget実行アイコンとstartアイコンをドラッグ＆ドロップし、プロセスフローを作成します。同様に、getアイコンをendアイコンにドラッグ＆ドロップして完成です。

完成スクリプトはこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/eebbc1b6-6643-1639-1b00-5e5a04b9de1b.png)


DataSpiderのdataディレクトリの直下に「dropbox01」というディレクトリを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/314b91d3-9bd4-a255-6e24-3e207a9d51a6.png)

デバック実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ca273298-88bb-c0b5-44c0-2b725fc55285.png)

正しく実行されると、「/data/dropbox01」内に、Dropboxで作成したファイル名のZIPファイルが作成されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/91dd92c6-c61d-8be4-061f-6a9c04f5fd1c.png)


ZIPファイルを解凍して、事前に格納したファイルがあれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/5d9e1aac-523b-26fa-ff04-891b3ba58557.png)

冒頭Dropbox内に準備したファイルと、同様のファイルが確認できました。成功です！
　　ファイル名　：　`textfile.txt`, `テキストファイル.txt`

## 最後に

今回は、「DataSpiderからDropboxに作成したファイルをダウンロードしてみた」でした。いかがでしたでしょうか？比較的簡単に連携ができたのではないかと思います。
Dropboxの他のAPIを使ってみてもいいですし、今回のDropboxからダウンロードしたファイルを、後続処理のトリガーとしてみるなどして、DataSpiderで色々と作ってみていただけたらと思います。

今回は、基本的な処理として「GET実行」をしてみました。[DataSpiderでAgileWorksにつないでみた(2/2)（DataSpider設定編）](https://qiita.com/sugimon/items/3c55435132e7405ebd01)の記事では、「POST実行」を試しています。是非こちらもご一読いただき、皆さんの何かのご参考になれば幸いです。

このブログでは、今後も、実際にやってみた検証や、日々の業務で学んだり思いついた開発Tipsなどを投稿していきたいと思います！

お読みいただきありがとうございました。それでは、また！