Office365-rest-python-client: рдлрд╝рд╛рдЗрд▓ рдирд╛рдо (рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде) рдХреЛ рдХреИрд╕реЗ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдЬреВрди 2020  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vgrem/Office365-REST-Python-Client

рдирдорд╕реНрдХрд╛рд░,

рдореИрдВ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд▓реВрдк рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреБрдЫ рдЖрдЗрдЯрдо рдвреВрдВрдврдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЕрдм рддрдХ рдореИрдВ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рддрддреНрд╡ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рдлрд╝реАрд▓реНрдб "рдирд╛рдо" рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИред

рдЬрдм рдореИрдВ рддрддреНрд╡ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЧреБрдг рд╢реВрдиреНрдп ({}) рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ file.dowload() рдореЗрдереЛрдЯ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдореБрдЭреЗ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡рд░реНрддрдорд╛рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрд▓реЛрдб рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрд╕рдВрднрд╡ рд╣реИред

рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

рдореИрдВ рдЬрд┐рд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery

ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("XXX")
caml_query = CamlQuery()
caml_query.ViewXml = """XXX"""

items = lib.get_items(caml_query)
ctx.load(lib)
ctx.execute_query()
for item in items:
    file = item.file
    with open(download_path, "wb") as local_file:
        file.download(local_file)
        ctx.execute_query()
        print("[Ok] file has been downloaded: {0}".format(download_path))

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!

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

рд╢реБрдн рдкреНрд░рднрд╛рдд,

рдореИрдВ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдЖрдЗрдЯрдо рд╕реВрдЪреА рдХреЗ рдЕрдВрджрд░ iter рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИ, рдлрд┐рд░ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:

client_id = "XXX"
client_secret = "XXX"
site_url = "XXX"
download_folder = r'C:\Users\yourname\sharepoint'


from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery


ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("REO")
caml_query = CamlQuery()
caml_query.ViewXml = XXX
items = lib.get_items(caml_query)
ctx.load(items)
ctx.execute_query()
for item in items:
    file = item.file
    ctx.load(file)
    ctx.execute_query()
    file_name = "{0}".format(file.properties["Name"])
    download_path = download_folder + '//' + file_name
    with open(download_path, "wb") as local_file:
        file.download(local_file)
        ctx.execute_query()
        print("[Ok] file has been downloaded: {0}".format(download_path))

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

рд╢реБрдн рдкреНрд░рднрд╛рдд,

рдореИрдВ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдЖрдЗрдЯрдо рд╕реВрдЪреА рдХреЗ рдЕрдВрджрд░ iter рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИ, рдлрд┐рд░ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рдиреАрдЪреЗ рд╣реИ:

client_id = "XXX"
client_secret = "XXX"
site_url = "XXX"
download_folder = r'C:\Users\yourname\sharepoint'


from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery


ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("REO")
caml_query = CamlQuery()
caml_query.ViewXml = XXX
items = lib.get_items(caml_query)
ctx.load(items)
ctx.execute_query()
for item in items:
    file = item.file
    ctx.load(file)
    ctx.execute_query()
    file_name = "{0}".format(file.properties["Name"])
    download_path = download_folder + '//' + file_name
    with open(download_path, "wb") as local_file:
        file.download(local_file)
        ctx.execute_query()
        print("[Ok] file has been downloaded: {0}".format(download_path))

@ pobs93 рдореИрдВ рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯ рд╕реВрдЪреА рд╕реЗ рдЕрдЯреИрдЪрдореЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдкрд░ рдпрд╣рд╛рдБ рдЯрд┐рдкреНрдкрдгреА рдХреА рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕ рдкрд░ рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:
caml_query.ViewXml = XXX
рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд▓рд╛рдЗрди ctx.execute_query() рдкрд░ рдиреАрдЪреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ
рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ CamlQuery JSON рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рд╣реИ

рдореИрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЯреА.рдХреЗ.рдПрд╕

@ pobs93 рдмрд╕ рдЙрд╕ рд╕реВрдЪреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЕрдЯреИрдЪрдореЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рд╕реВрдЪреА рд╣реИ рдЙрд╕рдореЗрдВ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рдпрд╣рд╛рдБ рдЕрдиреБрд▓рдЧреНрдирдХ рдХрд╛ URL рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╡рд╣рд╛рдБ рд╣реИрдВ (рдЪрд┐рддреНрд░ рд╕рдВрд▓рдЧреНрди рджреЗрдЦреЗрдВ)ред
{'рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдордСрдмреНрдЬреЗрдХреНрдЯ рдЯрд╛рдЗрдк':-,
'рдкрд╣рдЪрд╛рди': -,
'ServerRedirectedEmbedUri': рдХреЛрдИ рдирд╣реАрдВ,
'ServerRedirectedEmbedUrl': '',
'ContentTypeId': -,
'рд╢реАрд░реНрд╖рдХ': -,
'ComplianceAssetId': рдХреЛрдИ рдирд╣реАрдВ,
'рдкрд╣рдЪрд╛рди': -,
'рд╕рдВрд╢реЛрдзрд┐рдд':-,
'рдмрдирд╛рдпрд╛ рдерд╛': -,
'рд▓реЗрдЦрдХ рдЖрдИрдбреА': 12,
'рд╕рдВрдкрд╛рджрдХ рдЖрдИрдбреА': 12,
'OData__UIVersionString': '1.0',
'рдЕрдиреБрд▓рдЧреНрдирдХ': рд╕рдЪ рд╣реИ,
'рдЧрд╛рдЗрдб': -}

sp_attachment

рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП _file name_ рдФрд░ _file url_ рдХреИрд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:


ctx = ClientContext(settings['url']).with_credentials(client_creds)

lib = ctx.web.lists.get_by_title("Documents")
items = lib.items
ctx.load(items, ["ID", "FileLeafRef", "FileRef"])

ctx.execute_query()
for item in items:
    print(f"FileRef: {item.properties['FileRef']}") 

рдХрд╣рд╛рдВ

  • FileLeafRef - рдЙрд╕ рдлрд╝реАрд▓реНрдб рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ ListItem рд╕реЗ рд╕рдВрдмрджреНрдз рдлрд╝рд╛рдЗрд▓ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░-рд╕рдВрдмрдВрдзреА URL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ

  • FileRef - рдЙрд╕ рдлрд╝реАрд▓реНрдб рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ ListItem . рдХреЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдкреЗрдХреНрд╖ URL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ

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

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

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

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

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

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

bobbydurrett picture bobbydurrett  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ