見出し画像

PythonでBOXのAPIをOAuth認証で使用するサンプルコード

PythonでBOX APIをOAuth認証で使用する方法について、紹介したいと思います

BOX APIの準備


まずは、BOX APIを使うための準備を行います。以下の手順に従ってください。

  1. BOXアカウントの作成: BOXの公式ウェブサイトにアクセスしてアカウントを作成します。

  2. 開発者コンソールへのアクセス: アカウントを作成したら、開発者コンソールにログインします。

  3. アプリケーションの登録: 「Create New App」を選び、「Custom App」を選んで、「OAuth 2.0 with JWT (Server Authentication)」を選びます。

  1. クライアントIDとクライアントシークレットの取得: アプリ登録後、クライアントIDとクライアントシークレットが生成されます。これらは後でAPIを認証するために使用します。

  2. リダイレクトURIの変更
    リダイレクトURIを「http://localhost:8080」に変更します

PythonでのAPI利用の設定

必要なライブラリのインストール

まず、Python環境に`boxsdk` ライブラリをインストールします。コマンドプロンプトまたはターミナルで以下のコマンドを実行します。

pip install boxsdk


Pythonスクリプトの作成

次に、Pythonスクリプトを作成してBOX APIにアクセスします。以下のコードをエディタに貼り付け、適切な箇所を自分のクライアントID、クライアントシークレット、アクセストークンで置き換えます。

from boxsdk import OAuth2, Client
import webbrowser
import http.server
import socketserver
from urllib.parse import urlparse, parse_qs

# BOXの管理画面から取ってくる
CLIENT_ID = 'クライアントID'
CLIENT_SECRET = 'クライアント機密コード'

# BOXの管理画面に設定する
REDIRECT_URI = 'http://localhost:8080'

HOST = '127.0.0.1'
PORT = 8080

# BOXが発行する認証コードを入れる変数
global auth_code

auth_code = None

oauth = OAuth2(
    client_id = CLIENT_ID,
    client_secret = CLIENT_SECRET,
    store_tokens = None     # トークンの保管は今回は省略
)

# OAuth開始
auth_url, csrf_token = oauth.get_authorization_url(REDIRECT_URI)

# ブラウザ起動してBOXのIDとパスワードを入力する
# 入力するとREDIRECT_URIにリダイレクトされる
webbrowser.open(auth_url)

# REDIRECT_URIが叩かれた時の処理
class ServerHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        global auth_code
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(b"<h1>Authenticated</h1>")
        parsed_path = urlparse(self.path)
        query = parse_qs(parsed_path.query)
        auth_code = query['code'][0]

with socketserver.TCPServer((HOST, PORT), ServerHandler) as server:
    print('http server start')
    # server.serve_forever()    # Ctrl+Cが押されるなどの割り込みがあるまで処理し続ける
    server.handle_request()     # 1回リクエストを処理したら抜ける
    print('http server shutdown')

# auth_codeが取れたので、ここからAPIが使える
access_token, refresh_token = oauth.authenticate(auth_code)

client = Client(oauth)
me = client.user().get()
print('My user ID is {0}'.format(me.id))


BOX APIの利用

上記のスクリプトで基本的なBOX APIの認証とユーザー情報の取得ができます。これを基にして、ファイルのアップロード、ダウンロード、更新など、さまざまな機能を利用することが可能です。

注意点

  • セキュリティ: APIキー(クライアントID、クライアントシークレット)は厳重に管理してください。公開されると第三者に悪用される可能性があります。

  • アクセストークンの取得: ここでは単純化のために既存のアクセストークンを使用していますが、実際にはアプリケーションで認証フローを完全に実装する必要があります。


ファイルのアップロード

以下のスクリプトは、特定のローカルファイルをBOXにアップロードする例を示しています。ファイルパスやBOXのフォルダIDを適切に設定してください。


from boxsdk import OAuth2, Client 

# OAuth認証設定 
oauth = OAuth2( 
        client_id='YOUR_CLIENT_ID', 
        client_secret='YOUR_CLIENT_SECRET', 
        access_token='YOUR_ACCESS_TOKEN', 
) 
client = Client(oauth) 

# ローカルファイルのパス 
file_path = 'path/to/your/file.txt' 

# BOXにアップロードする際のファイル名 
file_name = 'file.txt' 

# BOXのフォルダID(例:0はルートフォルダ) 
folder_id = '0' # ファイルのアップロード 

with open(file_path, 'rb') as file: 
    uploaded_file = client.folder(folder_id).upload_stream(file, file_name) 
    print(f'Uploaded file ID: {uploaded_file.id}')


解説

  • OAuth認証: OAuth2クラスを使用して認証を行います。ここでclient_idclient_secretaccess_tokenを設定します。

  • ファイルの読み込み: open関数でローカルのファイルをバイナリ読み込みモード('rb')で開きます。

  • ファイルのアップロード: upload_streamメソッドを使用してファイルを指定したBOXのフォルダにアップロードします。このメソッドはストリーム(ここではファイルの内容)とファイル名を引数に取ります。

  • アップロード結果の確認: アップロードが成功すると、アップロードされたファイルのIDが返されます。これを使用してファイルにアクセスしたり、追加の操作を行うことができます。

注意点

  • アクセストークンの有効期限: 取得したアクセストークンには有効期限があります。長期間利用する場合は、リフレッシュトークンを使用してアクセストークンを定期的に更新する必要があります。

  • ファイルサイズの制限: アップロードするファイルのサイズには制限があります。大きなファイルをアップロードする場合は、分割アップロードや他のテクニックを検討する必要があります。


終わり


この記事で基本的なBOX APIの使用方法について紹介しました。そのほかの機能はAPIドキュメントなどに記載されているのでそれを参考に進めてみてください!

APIドキュメント:https://github.com/box/box-python-sdk

この記事が気に入ったらサポートをしてみませんか?