Как перечислить элементы внутри папок на одном диске с помощью библиотеки python O365

#python #microsoft-graph-api #onedrive

Вопрос:

Я пытаюсь перечислить элементы внутри папок, используя библиотеку O365 с учетными данными клиента (с собственной идентификацией). Я настроил разрешения на чтение и запись файлов в Azure и могу получать результаты, если использую поток аутентификации от имени пользователя.

Поток аутентификации(работает, но требует взаимодействия):

 from O365 import Account

credentials = (client,secret)
account = Account(credentials)
storage = account.storage()

if account.authenticate(scopes=['onedrive_all',('offline_access')]): #Once u get the token file with refresh token u can remove the if statement to avoid always asking user input
    print('Authenticated!')
    
my_drive = storage.get_default_drive() 
root_folder = my_drive.get_root_folder()

# iterate over the first 25 items on the root folder
for item in root_folder.get_items(limit=25):
    if item.is_folder:
        print(list(item.get_items(2))) # print the first two element on this folder.
 

Поток учетных данных — С собственной идентификацией приложения (не требует взаимодействия с пользователем, но не работает):

 from O365 import Account

credentials = (client,secret)
account = Account(credentials, auth_flow_type='credentials', tenant_id=tenant)
storage = account.storage()

if account.authenticate():
    print('Authenticated!')
    
my_drive = storage.get_default_drive() 
root_folder = my_drive.get_root_folder()

# iterate over the first 25 items on the root folder
for item in root_folder.get_items(limit=25):
    if item.is_folder:
        print(list(item.get_items(2))) # print the first two element on this folder.
 

Как я могу заставить работать метод учетных данных клиента? В настоящее время я получаю пустой список, а также ошибки в других функциях, которые работают с первой техникой

Ответ №1:

Решен поток учетных данных с помощью

 account = Account(credentials,auth_flow_type='credentials',
tenant_id=tenant,main_resource=myemail)