Office365-rest-python-client: Как рСкурсивно Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² sharepoint ΠΈΠ· ΠΏΠ°ΠΏΠΎΠΊ ΠΈ ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΎΠΊ?

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 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

Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ плоский список, содСрТащий Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ ΠΈ N ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΎΠΊ ..

ΠΎΠ΄Π½Π°ΠΊΠΎ это ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ВсС 9 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ» ссылку, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ говорится, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС Π΄Π΅Ρ€Π΅Π²ΠΎ структуры ΠΏΠ°ΠΏΠΎΠΊ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ запроса.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ этой ссылки: https://sharepoint.stackexchange.com/questions/159105/with-rest-recursively-retrieve-file-and-folder-directory-structure

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ воспроизвСсти это ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ссылки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ваш api: / _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' Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° 'payload'Β»

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,

Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π·ΠΎΠ²Π° proc, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСкурсивно Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

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["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, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ распСчатан ...

Π― размСстил свой запрос здСсь : Π±ΠΎΠ»Π΅Π΅ структурированным способом.

К Π²Π°ΡˆΠ΅ΠΌΡƒ свСдСнию: JSON сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для прСдставлСния / понимания.

Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΊ Ρ‡Π΅ΠΌΡƒ Π²Ρ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ‚Π΅. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я ΠΏΡ€ΠΈΠ²Π΅Π» Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, просто Π΄Π΅Π»Π°Π΅Ρ‚ это ... рСкурсивно пСрСчисляСт всС ΠΏΠ°ΠΏΠΊΠΈ / ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠΈ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π² этих ΠΏΠ°ΠΏΠΊΠ°Ρ… ΠΈ ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠ°Ρ… ...

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΈ рСкурсивном спускС ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ ...

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

Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ плоский список, содСрТащий Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ ΠΈ N ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΎΠΊ ..

ΠΎΠ΄Π½Π°ΠΊΠΎ это ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,

ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π° этот вопрос Π±Ρ‹Π» Π΄Π°Π½ ΠΎΡ‚Π²Π΅Ρ‚, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ