Skip to content

Python で BOX へ JWT 認証ログインするサンプルスクリプト

Python から BOX へアクセスする方法は以下などが考えられます。

No. 方法 GitHub ページ 補足
1 REST API を直接、呼び出す - 抽象化されていない為、利用がやや大変
2 Pythoh SDK を利用する Box Python SDK サポート終了予定
3 Python SDK (Generated) を利用する Box Python SDK GENERATED 今後の主流?

2 番目の Python SDK は Python SDK (公式サポート終了) のインストール ページで以下のように記載されており、サポート終了予定です。 今後、積極的に利用するのは躊躇われます。

Python SDKは、現在メンテナンスモードであり、まもなく公式サポートが終了する予定です。つまり、実装されるのは重要なセキュリティ更新プログラムとバグ修正のみになります。自動生成されたPython SDKを使用することをお勧めします。

3 番目の Python SDK (Generated) は Python SDK (Generated) のインストール ページで以下のように記載されています。

Pythonプロジェクトでは、自動生成されたBox Python SDKを使用してBox APIを呼び出すことができます。この次世代のSDKには、開発者エクスペリエンスを向上させ、Boxコンテンツクラウドとの統合を効率化することを目的とした新機能が備わっています。

今回は Python SDK (Generated) を利用し、Python から Box へ JWT 認証ログインするサンプルスクリプトをメモしておきます。

検証環境

対象 バージョン
macOS 15.3
Python 3.12.9
box-sdk-gen 1.11.0

サンプルスクリプト

Box の開発者コンソール から JWT 認証用のトークンを発行し、それを使って Box へログインします。 15 〜 17 行目が Box へのログイン処理です。 ログイン処理とは関係ありませんが、オマケとして get_items() を使って再起的に Box 上のコンテンツを取得し、tabulate で表形式にして表示します。

sample.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from box_sdk_gen import BoxClient, BoxDeveloperTokenAuth
from box_sdk_gen.schemas import FolderBaseTypeField
from tabulate import tabulate


def get_items(client: BoxClient, targets: list, target_id: int):
    for item in client.folders.get_folder_items(target_id).entries:
        targets.append([item.id, item.name, item.type])
        if item.type is FolderBaseTypeField.FOLDER:
            targets = get_items(client=client, targets=targets, target_id=item.id)
    return targets


def main():
    token: str = "01234567890123456789012345678901"
    auth: BoxDeveloperTokenAuth = BoxDeveloperTokenAuth(token=token)
    client: BoxClient = BoxClient(auth=auth)
    targets: list = []
    targets = get_items(client=client, targets=targets, target_id=0)
    print(tabulate(targets, headers=["ID", "Name", "Type"]))


if __name__ == "__main__":
    main()

実行例

実行例は以下の通りです。

% python sample.py
           ID  Name         Type
-------------  -----------  --------------------------
 306880316631  dir1         FolderBaseTypeField.FOLDER
 306879296765  dir1-1       FolderBaseTypeField.FOLDER
1774174122895  file1-1.txt  FileBaseTypeField.FILE
 306879422332  dir1-2       FolderBaseTypeField.FOLDER
1774180093821  file1-2.txt  FileBaseTypeField.FILE
 306878337515  dir1-3       FolderBaseTypeField.FOLDER
1774171247666  file1-3.txt  FileBaseTypeField.FILE
 306878910448  dir2         FolderBaseTypeField.FOLDER
 306880888369  dir2-1       FolderBaseTypeField.FOLDER
1774174859122  file2-1.txt  FileBaseTypeField.FILE
 306880995730  dir2-2       FolderBaseTypeField.FOLDER
1774179457812  file2-2.txt  FileBaseTypeField.FILE
 306880934049  dir2-3       FolderBaseTypeField.FOLDER
1774183905340  file2-3.txt  FileBaseTypeField.FILE
 306881075195  dir3         FolderBaseTypeField.FOLDER
 306878378334  dir3-1       FolderBaseTypeField.FOLDER
1774181835798  file3-1.txt  FileBaseTypeField.FILE
 306880638490  dir3-2       FolderBaseTypeField.FOLDER
1774180700656  file3-2.txt  FileBaseTypeField.FILE
 306878829521  dir3-3       FolderBaseTypeField.FOLDER
1774177298106  file3-3.txt  FileBaseTypeField.FILE