Office365-rest-python-client: рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдФрд░ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рд╕реЗ рд╕рднреА рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдХреИрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдЕрдкреНрд░реИрд▓ 2019  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vgrem/Office365-REST-Python-Client

рдореБрдЭреЗ рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░, рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ Nth рддрдХ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреБрди: рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ? рдХреНрдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рд╕рд╛рде рд╣реА, рдореИрдВ рд░реВрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? @vgrem @Bachatero

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

folder_list = []

def get_folder_relativeUrl(context, folder_relativeUrl):

    libraryRoot = context.web.get_folder_by_server_relative_url(folder_relativeUrl)
    folders = libraryRoot.folders
    context.load(folders)
    context.execute_query()

    for cur_folder in folders:
        folder_list.append(cur_folder.properties["ServerRelativeUrl"])
        get_folder_relativeUrl(context, cur_folder.properties["ServerRelativeUrl"])

    return folder_list

рдЗрд╕ рддрд░рд╣ рдЖрдкрдХреЛ рдлреНрд▓реИрдЯ рд╕реВрдЪреА рдореЗрдВ рдкреИрд░реЗрдВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдПрдирдПрдЪ рдЙрдк рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ ..

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдзреАрдорд╛ рд╣реИред

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдПрдХ рд▓рд┐рдВрдХ рдорд┐рд▓рд╛, рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реЗ рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдЯреНрд░реА рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рд▓рд┐рдВрдХ рдХрд╛ рдкрд╣рд▓рд╛ рдЙрддреНрддрд░: https://sharepoint.stackexchange.com/questions/159105/with-rest-recursively-retrieve-file-and-folder-directory-struct

рдореИрдВ рдЖрдкрдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рд╕реЗ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: /_api/web/Lists/GetByTitle('Documents')/Items?$select=FileLeafRef,FileRef

рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЖрдЬрдорд╛рддрд╛ рд╣реВрдВ:

folder = ctx.web.lists.get_by_title('Documents')
folder = folder.get_items('$select=FileLeafRef,FileRef')

рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ: "'str' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'рдкреЗрд▓реЛрдб'"

рдХреНрдпрд╛ рдХрд░реЗрдВ?

рдирдорд╕реНрддреЗ,

рдЖрдк рдХреЙрд▓рд┐рдВрдЧ рдкреНрд░реЛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рдбреАрдИрдПрдлрд╝ рдкреНрд░рд┐рдВрдЯрдСрд▓ рд╕рд╛рдордЧреНрд░реА (рд╕реАрдЯреАрдПрдХреНрд╕, рд░рд┐рд▓реЗрдЯрд┐рд╡ рдпреВрдЖрд░рдПрд▓):

try:

    libraryRoot = ctx.web.get_folder_by_server_relative_url(relativeUrl)
    ctx.load(libraryRoot)
    ctx.execute_query()

    folders = libraryRoot.folders
    ctx.load(folders)
    ctx.execute_query()

    for myfolder in folders:
        print("Folder name: {0}".format(myfolder.properties["ServerRelativeUrl"]))
        printAllContents(ctx, relativeUrl + '/' + myfolder.properties["Name"])

    files = libraryRoot.files
    ctx.load(files)
    ctx.execute_query()

    for myfile in files:
        #print("File name: {0}".format(myfile.properties["Name"]))
        print("File name: {0}".format(myfile.properties["ServerRelativeUrl"]))
except:

    print('Problem printing out list of folders')   
    sys.exit(1)

рдоред

... рдЖрдк рддрдм, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ServerRelativeUrl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рд┐рдВрдЯ рдЖрдЙрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ ...

рдореИрдВрдиреЗ рдЕрдкрдиреА рдХреНрд╡реЗрд░реА рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХреА: рдЕрдзрд┐рдХ рд╕рдВрд░рдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗред

рдПрдлрд╡рд╛рдИрдЖрдИ: рдЬреЗрдПрд╕рдУрдПрди рд╕рд┐рд░реНрдл рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡/рд╕рдордЭрдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬрд┐рд╕ рдЦрд░реАрдж рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдмрд╕ рдпрд╣реА рдХрд░рддрд╛ рд╣реИ ... рдЗрди рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдФрд░ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рднреАрддрд░ рд╕рднреА рдлрд╝реЛрд▓реНрдбрд░реНрд╕/рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░рд┐рдХрд░реНрд╕рд┐рд╡ рд░реВрдк рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ ...

рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЬреИрд╕реЗ рд╣реА рдЖрдк рдкреЗрдбрд╝ рдХреЗ рдиреАрдЪреЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ ...

outputDir = "d:\output"

def printAllContents(ctx, relativeUrl):

    try:

        libraryRoot = ctx.web.get_folder_by_server_relative_url(relativeUrl)
        ctx.load(libraryRoot)
        ctx.execute_query()

        folders = libraryRoot.folders
        ctx.load(folders)
        ctx.execute_query()

        for myfolder in folders:
            #print("Folder name: {0}".format(myfolder.properties["Name"]))
            print("Folder name: {0}".format(myfolder.properties["ServerRelativeUrl"]))
            printAllContents(ctx, relativeUrl + '/' + myfolder.properties["Name"])

        files = libraryRoot.files
        ctx.load(files)
        ctx.execute_query()

        for myfile in files:
            print("File name: {0}".format(myfile.properties["ServerRelativeUrl"]))
            pathList = myfile.properties["ServerRelativeUrl"].split('/')
            fileDest = outputDir + "/"+ pathList[-1]
            downloadFile(ctx, fileDest, myfile.properties["ServerRelativeUrl"])

    except:

        print('Problem printing out list of folders')   
        sys.exit(1)
folder_list = []

def get_folder_relativeUrl(context, folder_relativeUrl):

    libraryRoot = context.web.get_folder_by_server_relative_url(folder_relativeUrl)
    folders = libraryRoot.folders
    context.load(folders)
    context.execute_query()

    for cur_folder in folders:
        folder_list.append(cur_folder.properties["ServerRelativeUrl"])
        get_folder_relativeUrl(context, cur_folder.properties["ServerRelativeUrl"])

    return folder_list

рдЗрд╕ рддрд░рд╣ рдЖрдкрдХреЛ рдлреНрд▓реИрдЯ рд╕реВрдЪреА рдореЗрдВ рдкреИрд░реЗрдВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдПрдирдПрдЪ рдЙрдк рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ ..

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдзреАрдорд╛ рд╣реИред

рдЕрднрд┐рд╡рд╛рджрди,

рдЪреВрдВрдХрд┐ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ahulist picture ahulist  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

florinmihut picture florinmihut  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Mark531 picture Mark531  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

etiennecelery picture etiennecelery  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Cesaaar picture Cesaaar  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ