以编程方式获取 sharepoint 文件(我知道来自 Web 浏览器的 url)

get sharepoint file programatically (I know the url from a web browser)

提问人:gelonida 提问时间:11/17/2023 更新时间:11/17/2023 访问量:47

问:

我从 Web 浏览器使用 sharepoint。

我可视化一个具有以下 url 的文件(xls 文件)

https://mysite.sharepoint.com/:x:/r/_layouts/15/Doc.aspx?sourcedoc=%7Bxxxxxx-xxxxx-xxxx%7D&file=filename.xlsx&action=default&mobileredirect=true

如果我右键单击文档,然后单击“复制 URL”,我会得到一个类型的 URL:

https://mysite.sharepoint.com/:x:/g/XXXXXXXXX-sXXXXXXXX?e=yyyyy

我的问题是我怎样才能以编程方式获取此文档:

我尝试使用 Office365-REST-Python-Client(版本 2.5.2)

并设法获取客户端上下文(使用与我的浏览器上使用的相同用户名和密码进行身份验证)

包含以下代码片段:

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

我设法列出了所有现有的document_libraries和其中的每个项目

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

我得到了几千个项目,这些项目对于这个 sharepoint url 来说可能是现实的,但大多数项目都没有标题,我不知道如何找出其中是否有任何项目引用了我有 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

我认为 Web 浏览器给出的 url 不是我应该在 API 中使用的 url。

但是我不知道如何确定正确的 url 或如何获取文档的 uid 之类的东西,我可以用它来获取它。

我查看的文件不是我拥有的文件。 它已被其他人共享,但我对它有读写权限(在我的浏览器中)

Python SharePoint Microsoft365

评论

0赞 Tấn Nguyên 11/17/2023
最好使用 Power Automate 获取文件。因为您很难克服这些登录凭据以及您的组织策略配置。使用 PA,您可以轻松地将文件作为 REST 处理和发送。此链接可能对您有所帮助: learn.microsoft.com/en-us/connectors/sharepointonline
0赞 gelonida 11/17/2023
这在理论上是如何运作的?在设置了一些 power automate magic 之后,我可以指定一个文档,每当文档发生变化时,它就会被复制到某个目的地?
0赞 Tấn Nguyên 11/17/2023
是的,它可以,PA Sharepoint 的 Trigger 将监听文档和操作的更改,以发送到您想要的特定位置、通过电子邮件发送给您或做任何您想做的事情
0赞 gelonida 11/17/2023
好的,必须看看文档对我来说是否是可以理解的,以及 PA sharepoint 是我们拥有的东西还是我们必须付费的东西。
0赞 Tấn Nguyên 11/17/2023
它与您的组织订阅(包括 Sharepoint online、outlook)一起位于 M365 中,...大多数由 MSFT 开发的触发器和操作都是免费的。

答: 暂无答案