python - 在 Python 中解析 Office365 使用报告的 OData 返回的问题

标签 python office365 odata office365api

我正在尝试将 Office 365 使用情况分析作为 Python 中的 Odata 对象进行下拉,以便我可以设置一个自动化任务来存储数据。此处描述了该过程 https://learn.microsoft.com/en-US/microsoft-365/admin/usage-analytics/enable-usage-analytics?view=o365-worldwide 用于在 Power BI 中查看此内容。但是提供的数据只是上个月的数据,我们想看的是最近两年的累计数据。我已经编写了一些可以下拉 Odata 对象的 Python 代码,但是我在确定数据是否因身份验证错误而为空时遇到了一些问题,或者我只是不知道去哪里找。我找不到太多关于此的信息,我们将不胜感激。特别是如果我有办法将这个对象保存为文件并在我不知道的一些外部程序中查看它。这是我的代码,如果您转到 365 管理门户并插入您的租户 ID、用户名和密码,您可以自己尝试。

import requests
import pyodata
import json
import settings

SERVICE_URL = 'https://reports.office.com/pbi/v1.0/' + settings.TennantID

# Create instance of OData client
session = requests.Session()
session.auth = (settings.username, settings.password)
client = pyodata.Client(SERVICE_URL, session)

EntitySets = client.entity_sets._entity_sets['TenantClientUsage']
data = EntitySets.get_entities()
print('debug here')

最佳答案

从简短的角度看,脚本看起来不错,但可能存在网络问题,您需要调查由 requests 库处理的 HTTP 请求和响应。

如果存在身份验证错误,您会在 client = pyodata.Client(SERVICE_URL, session) 行之后的控制台中看到它 - 这里已经对服务的 $metadata 进行了初始请求构建 pyodata 对象模型。

这些链接应该可以帮助您查看 pyodata 引擎盖下的实际 HTTP 流量:

但问题的主要原因似乎是:您正在尝试使用 Odata V4 服务,而 pyodata 目前仅支持 V2(对 V4 的支持已作为增强功能填充)。如果您可以使用 nodejs 而不是 python,您现在可以使用我们的姊妹客户端库,它同时支持 odata V2 和 V4 - https://github.com/SAP/odata-library/

https://reports.office.com/pbi/v1.0/%20odata/$metadata

<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">

关于python - 在 Python 中解析 Office365 使用报告的 OData 返回的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63307577/

相关文章:

api - 使用 Microsoft Graph REST API 访问 Word(.docx) 文件的内容?

odata - Jaydata 与 .net Odata 服务器

asp.net-web-api - 使用 WebApi 2 和 Entity Framework (代码优先)在 OData 中是否有自动 ETag 处理?

python - 计算使用 pandas 的百分位数

python - 在 python 中初始化类但具有不同的父类

python - 使静态方法显式引用该类

odata - OData v4 不支持 Nullable<DateTime> 吗?

Python 从 git 进行 self 更新

c# - SharePoint 联机 : can a Windows Client application use OAuth for authentication?

office365 - 如何在从 Microsoft Graph 返回的用户列表中检测 session 室?