Python에서 BOX API를 OAuth 인증 한 후 사용하는 샘플
소개
파일 공유 클라우드 서비스 "BOX"의 API를 Python에서 이용하는 샘플을 소개합니다.
API의 사용법 자체는 「BOX」의 문서 시작해, 다양한 사람이 소개해 주고 있습니다만
자신이 하고 싶었던 것에 가까운 정보가 없었기 때문에 기사로 했습니다.
하고 싶었던 일
htps : // 기주 b. 코 m/보 x/보 x-py 텐-sdk/bぉb/마s r/도 cs/우사게/아우테 ㅇ 치카치온. md
우선, 이 SDK의 사이트에 실려 있는 다음과 같은 샘플 코드를 바삭하게 움직이고 싶었습니다.
client = Client(auth)
user = client.user().get()
print('User ID is {0}'.format(user.id))
움직이는 것만으로는 수동으로 OAuth의 인증을 통과할 수도 있습니다만, 이번은 OAuth를 간이한 방법으로 실현해 보았습니다.
환경
Mac 10.14.6
Python 3.7.4
boxsdk 2.6.1
준비
박스 SDK 설치
환경에 맞게 pip 및 기타 도구로 설치하십시오.
pip install boxsdk
BOX 관리 화면에서 앱 등록
여기에 표시되는 클라이언트 ID와 클라이언트 기밀 코드를 소스에 복사합니다.
리디렉션 URI에는 "http://localhost:8080"을 입력하십시오.
샘플 코드
sample.pyfrom 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))
실행
Mac 10.14.6
Python 3.7.4
boxsdk 2.6.1
박스 SDK 설치
환경에 맞게 pip 및 기타 도구로 설치하십시오.
pip install boxsdk
BOX 관리 화면에서 앱 등록
여기에 표시되는 클라이언트 ID와 클라이언트 기밀 코드를 소스에 복사합니다.
리디렉션 URI에는 "http://localhost:8080"을 입력하십시오.
샘플 코드
sample.pyfrom 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))
실행
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))
주의점
마지막으로
JupyterLab에서 실행하고 싶었기 때문에 1 파일에 정리해 썼습니다.
파이썬으로 간단한 웹 서버를 시작하는 것은 쉽습니다. 이번에는 1 리퀘스트 처리한 것만으로 웹 서버가 종료되는 곳이 마음에 듭니다.
반대로 do_GET 메소드 안에서 글로벌 변수에 직접 대입하고 있는 것은 마음에 들지 않는 곳입니다. 깨끗한 쓰는 방법 없습니까?
아마 이상한 움직임은 하고 있지 않다고 생각합니다만, 아직 Python에 자세하지 않기 때문에 이상한 곳이나 개선점이 있으면 지적 받을 수 있으면 다행입니다.
Reference
이 문제에 관하여(Python에서 BOX API를 OAuth 인증 한 후 사용하는 샘플), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tatsumi_t2/items/64929f8dbd27c8f7560f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Python에서 BOX API를 OAuth 인증 한 후 사용하는 샘플), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tatsumi_t2/items/64929f8dbd27c8f7560f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)