如何通过Office365-REST-Python-Client获取指定SharePoint文件
背景信息
- 浏览器打开目标Excel文件的URL:
https://mysite.sharepoint.com/:x:/r/_layouts/15/Doc.aspx?sourcedoc=%7Bxxxxxx-xxxxx-xxxx%7D&file=filename.xlsx&action=default&mobileredirect=true - 右键文档复制的URL:
https://mysite.sharepoint.com/:x:/g/XXXXXXXXX-sXXXXXXXX?e=yyyyy - 已通过Office365-REST-Python-Client(2.5.2版本)完成用户名密码认证,可正常获取客户端上下文,也能列出所有文档库及其中项目,但多数项目无标题,无法定位目标文件。
尝试过的代码
1. 获取客户端上下文
import os from office365.runtime.auth.authentication_context import AuthenticationContext from office365.sharepoint.client_context import ClientContext def get_ctx(): sharepoint_url = os.environ["SP_URL"] username = os.environ["SP_USER"] password = os.environ["SP_PASSWORD"] auth_ctx = AuthenticationContext(url=sharepoint_url) auth_ctx.acquire_token_for_user(username, password) ctx = ClientContext(sharepoint_url, auth_ctx) return ctx
2. 列出文档库及项目
def get_doc_libraries(ctx): web = ctx.web ctx.load(web) ctx.execute_query() lists = web.lists ctx.load(lists) ctx.execute_query() for sp_list in lists: props = sp_list.properties if props['BaseTemplate'] == 101: # Document libraries library_name = props["Title"] doc_library = ctx.web.lists.get_by_title(library_name) ctx.load(doc_library) ctx.execute_query() items = doc_library.get_items() ctx.load(items) ctx.execute_query() paged_items = doc_library.items.paged(500, page_loaded=print_progress).get().execute_query() for item in paged_items: # do_something_with_item
3. 通过复制的URL获取文件(执行失败)
def get_file_with_rel_url(ctx, url, sharepoint_url): sharepoint_url = sharepoint_url.rstrip("/") rel_url = url.replace(sharepoint_url, "") response = File.open_binary(ctx, rel_url) with open("bla.xls", 'wb') as output_file: output_file.write(response.content)
报错信息
{"error":{"code":"-2130575338, Microsoft.SharePoint.SPException","message":{"lang":"fr-FR","value":"Le fichier /:x:/g/XXXXXX-XXXXXX n'existe pas."}}}
英文含义:The file /:x:/g/XXXXXX-XXXXXX doesn't exist
核心需求
浏览器复制的URL无法直接用于API调用,需找到正确的方式获取该共享文件的唯一标识或API可用路径,完成文件的获取操作。
内容的提问来源于stack exchange,提问作者gelonida
相关产品推荐
相关产品推荐

