Office365-rest-python-client: 无法访问有关我的 SharePoint 列表的任何信息,列表资源 URL 看起来不正确

创建于 2020-08-28  ·  5评论  ·  资料来源: vgrem/Office365-REST-Python-Client

这是我正在使用的。

site_url = "https://mycompany.sharepoint.com/sites/mysite/"
clientid = "12345"
clientsecret = "67890"
clientcredentials = ClientCredential(clientid, clientsecret)
ctx = ClientContext(site_url).with_credentials(clientcredentials)
target_list = "ListIWant"
list_object = ctx.web.lists.get_by_title(target_list)
items = list_object.get_items()
ctx.load(items)
ctx.execute_query()

一切运行都没有错误,但最终我的 list_object 没有任何项目或字段......当我查看 list_object 中的 resource_url 时,它不是正确的 URL。 列表名称前后都有额外的反斜杠。 删除斜杠并复制到 Edge 地址栏会下载一个包含有关列表信息的 XML 文件,但按原样,它不起作用......所以我假设这就是导致错误的原因......但我没有'如何修复它。

我觉得我很亲近……有人可以帮忙吗?
example

question

所有5条评论

您快到了。
您的items对象的类型ListItemCollection
如果您尝试len(items) ,它应该返回集合中的项目数量
您现在可以枚举这些项目:

for item in items:
    print(item.properties)

每个项目现在都是您可以操作的ListItem类型

此外,额外的反斜杠用于转义 python 字符串中的' ,这些是完全正常的

您快到了。
您的items对象的类型ListItemCollection
如果您尝试len(item) ,它应该返回集合中的项目数量
您现在可以枚举这些项目:

for item in items:
    print(item.properties)

每个项目现在都是您可以操作的ListItem类型

谢谢你的帮助,但 print(len(items)) 返回 0

如果不是resource_url 的问题。 我为 SharePoint 网站设置的应用程序权限可能有问题吗? 我按照https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs (包括设置权限请求 XML)中的说明进行操作,但是当我返回 _layouts/15 /appinv.aspx 页面并查看我的客户端 ID,权限请求 XML 字段始终为空...这是我第一次这样做,所以我不确定它是否应该这样工作。

我一直在为 xml 使用这些设置(我显然选择信任该应用程序)。

   <AppPermissionRequests AllowAppOnlyPolicy="true">
   <AppPermissionRequest Scope="http://mycompany.sharepoint.com/sites/mysite" Right="FullControl" />
   </AppPermissionRequests>

这与我在 docs.microsoft.com 上找到的说明中的内容略有不同,但我只能授予对我的站点的访问权限,而不能授予对租户的访问权限。 该应用程序随后列在“网站集应用程序权限”中,因此我认为它可以正常工作......但是当我返回 appinv.aspx 时我没有看到任何 xml 权限。

好问题,在我的记忆中,当我处理权限问题时,很清楚。
您实际批准的应用程序的价格为_layouts/15/AppPrincipals.aspx
并且在appinv 上看不到xml 是正常的。

如果我没记错的话,我使用的范围是http://sharepoint/site/sitecollection
(编辑:)这是一个备忘单: https :

您是否尝试过通过邮递员连接到 api?

这是我通过当前连接从口译员那里得到的信息。

>>> items = ctx.web.lists.get_by_title('Events').items
>>> items
<office365.sharepoint.listitems.listItem_collection.ListItemCollection object at 0x10d064af0>
>>> len(items)
0
>>> ctx.load(items)
>>> ctx.execute_query()
>>> len(items)
2

问候,

您快到了。
您的items对象的类型ListItemCollection
如果您尝试len(items) ,它应该返回集合中的项目数量
您现在可以枚举这些项目:

for item in items:
    print(item.properties)

每个项目现在都是您可以操作的ListItem类型

此外,额外的反斜杠用于转义 python 字符串中的' ,这些是完全正常的

同意并且确实需要额外的反斜杠来转义撇号字符以使OData URL 有效

这条评论似乎揭示了根本原因:

我一直在为 xml 使用这些设置(我显然选择信任该应用程序)。

   <AppPermissionRequests AllowAppOnlyPolicy="true">
   <AppPermissionRequest Scope="http://mycompany.sharepoint.com/sites/mysite" Right="FullControl" />
   </AppPermissionRequests>

这与我在 docs.microsoft.com 上找到的说明中的内容略有不同,但我只能授予对我的站点的访问权限,而不能授予对租户的访问权限。 该应用程序随后列在“网站集应用程序权限”中,因此我认为它可以正常工作......但是当我返回 appinv.aspx 时我没有看到任何 xml 权限。

提供的范围看起来 _invalid_ : http://mycompany.sharepoint.com/sites/mysite

  • mycompany :需要改为sharepoint预定义占位符
  • sites/mysite相同,需要是一个_valid_占位符,例如content/sitecollectioncontent/sitecollection/web

因此,解决方案是通过提供 _valid_ 权限请求来授予应用权限,例如:

每个网站集

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />
</AppPermissionRequests>

每个网络

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
</AppPermissionRequests>

_permission scopes_ 列表可以在 SharePoint页面的

最后但并非最不重要的是,有一个wiki 页面,其中还提供了如何设置应用程序主体和授予权限的分步说明。

谢谢! 是的。 XML 权限范围似乎是问题的根本原因!
从我最初的测试来看,它现在似乎可以正常工作。

这很棒。 过去一年我一直在 MS Access 中使用 VBA 脚本来更新我的 SharePoint 列表。 弄清楚这部分让我更接近将所有内容移植到 Python 中。

此页面是否有帮助?
0 / 5 - 0 等级