Я ищу папки и подпапки в почтовом ящике O365, используя Microsoft Graph API Response, используя код Python (запрос).Я хочу, чтобы все папки имели соответствующий путь, но поддержка вызова API только для получения только дочерней папки на уровне 1, как будто есть папка «Входящие», и я хочу, чтобы в «Входящих» была chaild, она дает мне папку в папке «Входящие», но если я хочу, чтобы подпапки были внутриДочерняя папка Inbox Я хочу использовать Recurtion в коде, чтобы добиться этого, я пытаюсь найти такое решение, используя методы рекурсии, дерева и логики кодирования, но я не могу его получить.
здесь также я прилагаюпример кода, пожалуйста, помогите мне.
import adal
import requests
import uuid
import json
class Example:
staticstring = ''
staticVariable = []
staticArray = []
staticFolder = []
static_count = 0
tenant = "tenant_id"
client_secret = "client_secret_id"
client_id = 'client_id'
username = "user_name"
password = "user_pass"
authority = "https://login.microsoftonline.com/" + tenant
RESOURCE = "https://graph.microsoft.com"
context = adal.AuthenticationContext(authority)
# Use this for Client Credentials
token = context.acquire_token_with_client_credentials(RESOURCE,
client_id, client_secret)
# Use this for Resource Owner Password Credentials (ROPC)
#token = context.acquire_token_with_username_password(RESOURCE,
username, password, client_id);
graph_api_endpoint = 'https://graph.microsoft.com/v1.0{0}'
request_url =
graph_api_endpoint.format('/users/user_name/mailFolders/?$top=10')
headers = {
'User-Agent' : 'python_tutorial/1.0',
'Authorization' : 'Bearer
{0}'.format(token["accessToken"]),
'Accept' : 'application/json',
'Content-Type' : 'application/json'
}
response = requests.get(url = request_url, headers = headers)
mail_folders = response.json()
instance = Example()
def recuse(folders):
instance.static_count += 1
request_url =
graph_api_endpoint.format('/users/user_name/mailFolders/%s/
childFolders?$count=true' %(folders['id']))
response = requests.get(url = request_url, headers = headers)
response_data = response.json()
top = response_data['@odata.count']
if top != 0:
path_list = []
request_url =
graph_api_endpoint.format('/users/user_name/mailFolders/
%s/childFolders?$top=%d' %(folders['id'], top))
response = requests.get(url = request_url, headers =
headers)
child_data = response.json()
if len(child_data['value']) == 0:
return path_list
if folders['childFolderCount'] >= 2 :
if folders['displayName'] in instance.staticFolder:
print "folder already there"
else:
instance.staticFolder.append(
folders['displayName'])
for index, each in enumerate(child_data['value']):
#print "Each folder:- ", each['displayName']
instance.staticArray.append(each['displayName'])
recuse(each)
instance.staticVariable = []
for fo in instance.staticArray:
if fo in instance.staticFolder:
instance.staticArray.remove(fo)
folder_parent = '/' + '/'.join(instance.staticFolder)
folder_path = '/' + '/'.join(instance.staticArray)
folder_parent += folder_path
instance.staticVariable.append(folder_parent)
print "instance.staticVariable:- ", folder_parent
instance.staticArray = []
return instance.staticVariable
all_folders = []
for folders in mail_folders['value']:
folder_path = []
if folders['childFolderCount'] == 0:
instance.staticVariable.append(folders['displayName'])
else:
folder_path = []
recurse_info = recuse(folders)
print "Recurse info:- ", recurse_info
all_folders.append(folder_path)
if len(folder_path) > 0:
for folder in folder_path:
print folder
print "FInal Folder structure:- ", instance.staticVariable