OneDrive のファイル操作(登録/取得)を自動化する
Pythonを使って「OneDriveへファイルアップロード」「OneDriveからのファイルダウンロード」を実現する手順を解説します。
概要
- OneDriveへ自動アクセスするため
Azure アプリ
を登録します。 - OneDriveへログインし、認証コードを取得します。
- 認証コードからアクセストークンを取得します。
- アク セストークンを利用してMicrosoft Graphにより「OneDriveへファイルアップロード」「OneDriveからのファイルダウンロード」を実現します。
OneDriveへ自動アクセスするためAzure アプリ
を登録
- 下記手順を参考に
Azure アプリ
を登録します。
Microsoft にアプリを登録する
操作はAzure Portalから実施します。
- リダイレクトURLには
http://localhost:4200/
を入力します。
- 概要を選択し、クライアントIDを取得します。
- 証明書とシークレットを選択し、新しいクライアントシークレットを選択します。
- 任意の有効期限を指定します。
- クライアントシークレットを取得します。
※ クライアントシークレットとして取得するのは「値」の方です。(シークレットIDの方ではありません。)
OneDriveへログインし、認証コードを取得
- 下記手順を参考にOneDriveへのサインインを組み込みます。
ユーザーのサインイン
トークン取得用URLを作成し、ブラウザへ貼り付けます。
- 下記の
client_id=xxxxxxxxxxxxxxxxxxxxxxxx
には上記で取得したクライアントIDを指定します。
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id=xxxxxxxxxxxxxxxxxxxxxxxx&scope=offline_access%20files.readwrite.all&response_type=code&redirect_uri=http://localhost:4200/
-
サインインが完了すると認証コードが発行されるので取得します。
-
code=xxxxxxxxxxxxx
と表示されます。このxxxxxxxxxxxxx
が認証コードです。
認証コードからアクセストークンを取得
-
下記手順を参考に認証コードからアクセストークンを取得します。
アクセストークンの取得 -
aaaaaaaaaaaaaaaaa
には上記で取得した認証コードを指定します。 -
bbbbbbbbbbbbbbbbb
には上記で取得したクライアントIDを指定します。 -
ccccccccccccccccc
には上記で取得したクライアントシークレットを指定します。
import urllib.parse
import urllib.request
import json
def get_onedrive_token(code: str):
apl_client_id= "bbbbbbbbbbbbbbbbb"
client_secret = "ccccccccccccccccccc"
redirect_url = "http://localhost:4200/"
url = "https://login.microsoftonline.com/common/oauth2/v2.0/token"
method = "POST"
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
params = {
"client_id": apl_client_id
,"redirect_uri": redirect_url
,"client_secret": client_secret
,"code": code
,"grant_type": "authorization_code"
}
encoded_param = urllib.parse.urlencode(params).encode()
request = urllib.request.Request(url, data=encoded_param, method=method, headers=headers)
with urllib.request.urlopen(request) as res:
body = res.read()
dat = json.loads(body)
print(dat)
if __name__ == '__main__':
code = "aaaaaaaaaaaaaaaaaaaaaaaa"
get_onedrive_token(code)
- 下記のようなjsonが取得できます。
- この中に以降の処理で必要な アクセストークン(
access_token
)及びリフレッシュトークン(refresh_token
)が含まれます。
{
"token_type":"bearer",
"expires_in": 3600,
"scope":"wl.basic onedrive.readwrite",
"access_token":"EwCo...AA==",
"refresh_token":"eyJh...9323"
}