Box APIを使用したzipアーカイブのダウンロード

Box Platformでよくある質問に、Boxに存在する大量のコンテンツのダウンロード方法があります。データを独立したサーバーにアーカイブする場合や、コンテンツをオンプレミスのアプリケーションシステムと直接統合する場合が考えられます。Box APIを使用すると、1ファイルを直接ダウンロードすることができますが、さらに多くのファイルをダウンロードするには、zipアーカイブを作成してダウンロードする必要があります。

開発者がこの処理を行うためのオプションを見てみましょう。

前提条件

Box APIを使用するには、開発者コンソールでカスタムアプリケーションを作成する必要があります。認証方法については、JWT、OAuth 2.0、CCGといったオプションのいずれかを選択できます。

Boxのカスタムアプリケーションの作成

JWTまたはCCGを選択した場合は、実際にアプリケーションを使用してAPI呼び出しを行う前に、管理者にそのアプリケーションを承認してもらう必要があります。アプリケーションスコープに変更を加えた場合は、管理者にアプリケーションを再承認してもらう必要もあります

選択した認証方法に応じて、サービスアカウント (OAuth 2.0の場合は自分自身) に、ダウンロードしようとしているコンテンツへのアクセス権限があることを確認します。zipダウンロードプロセスでは、自分またはサービスアカウントがコラボレータとしてコンテンツに追加されていない場合、そのコンテンツはダウンロードされません。サービスアカウントの詳細については、こちらを参照してください。

cURL

cURLを使用してその他のインストール要件を実行しなくても、直接Box APIを呼び出すことができます。その場合は、作成したアプリケーションから開発者トークンを取得します。そのトークンを、以下のACCESS_TOKENというラベルの付いた場所に入力します。

その後、ターミナルまたはコンソールで、以下のコマンドを実行できます。ダウンロードファイル名には、任意の名前を指定できます。また、ファイルIDおよびフォルダIDは、最大10,000ファイルまたはアカウントのアップロード上限まで、いくつでも列挙できます。

curl -i -X POST "https://api.box.com/2.0/zip_downloads" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-d '{
"download_file_name": "<insert_download_name",
"items": [
{
"type": "file",
"id": "<file_id>"
},
{
"type": "folder",
"id": "<folder_id>"
}
]
}'

成功すると、以下のようなデータを含むレスポンスが返されます。

{
"download_url":"https://dl.boxcloud.com/2.0/zip_downloads/25gvaXcIE4QJlinNiw2oHAQ==ZFs3Q2Xpd7pKBz7OyzXNrUaoW3aJxQRN5znAvyM-KpdEEPdWcQDKU-Dl85Ew/content",
"status_url":"https://api.box.com/2.0/zip_downloads/25gvaXcIE4QJlinNiw2oHAQ==ZFs3Q2Xpd7pKBz7OyzXNrUaoW3aJxQRN5znAvyM-KpdEEPdWcQDKU-Dl85Ew/status",
"expires_at":"2023-02-28T10:23:54Z",
"name_conflicts":[]
}

ダウンロードURLフィールドで、スラッシュとスラッシュの間に表示されるダウンロードIDを取得します。上記の例の場合は、以下が該当します: 25gvaXcIE4QJlinNiw2oHAQ==ZFs3Q2Xpd7pKBz7OyzXNrUaoW3aJxQRN5znAvyM-KpdEEPdWcQDKU-Dl85Ew

このIDを以下のzip_download_idと表示された場所に入力するほか、最初の呼び出しで使用したものと同じ開発者トークンをACCESS_TOKENと表示された場所に入力します。-oは出力を表しており、末尾に.zipを付ける必要はありますが、任意の名前を付けることができます。Enterキーを押すと、ポップアップが表示され、ダウンロードの保存場所を指定するよう求められます。

この手順は、迅速に実行する必要があります。ご覧のとおり、リンクはレスポンスに表示された時刻で期限切れとなります。

curl -L "https://dl.boxcloud.com/2.0/zip_downloads/<zip_download_id>/content" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-o sample_curl.zip

以上です。大量のコンテンツをダウンロードする場合は、この処理はすぐに完了しないことに注意してください。インターネットの速度に制限されます。必要に応じて、ステータスを確認するエンドポイントを使用して、スキップされた可能性のある項目を含め、長時間かかっているzipダウンロードのステータスを確認できます。

Postman

上記の処理は、Boxの優れたPostmanコレクションを使用して行うこともできます。これまでにPostmanコレクションを設定したことがない場合は、YouTubeの動画 (英語) およびブログで詳細をご確認ください。

以下のスクリーンショットでは、前述のcURLコマンドで使用した、Create zip downloadsエンドポイントとDownload zip archiveエンドポイントの使用を示しています。

Postman: BoxのCreate zip downloads

Postmanを使用する場合、実際にzipファイルをダウンロードするには、[Send (送信)] の横にある下矢印をクリックします。これを行わないと、200と表示されるだけで、実際には何もダウンロードされません。

Postman: BoxのDownload zip archive

Box CLI

Postmanと同様、Box CLIを使用して、この処理をさらに自動化することも可能です。これまでにBox CLIを設定したことがない場合は、この処理の詳細についてYouTubeの動画 (英語) およびブログを参照してください。

CLIを使用すると、2つの処理に対して1回の呼び出しで済むので非常に便利です。

box files:zip sample.zip --item=file:1090181431874 --item=folder:186279475438 --destination=/Users/anovotny/Desktop

この例は、CLIのGitHubリポジトリのdocsセクションにあります。

Box CLIのzipリクエストの呼び出し

Box SDK

cURL、Postman、Box CLIに加えて、Boxが提供するすべてのSDKでは、それぞれのdocsセクションに、zipアーカイブをダウンロードするためのサンプルコードが用意されています。こちらのリンク先を参照してください: NodePythonJava.NET

このブログが皆さんのお役に立てば幸いです。質問がある場合は、Boxの開発者向けフォーラムに英語で投稿してください。また、Boxのzipダウンロードに関するリクエストがある場合は、Box Pulseに英語で投稿してください。

--

--