Извлечение структуры папок почтового ящика Office 365 с помощью Microsoft Graph API Response с использованием Python - PullRequest
0 голосов
/ 24 декабря 2018

Я ищу папки и подпапки в почтовом ящике 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
...