调用 MS Graph API 收集在线 MS 表单响应

问题描述

是否有通过 MS Graph API 从共享的在线 MS 表单收集响应的解决方案?

我将 MS Graph API 用于其他目的,即访问 OneDrive 中的个人/共享文件
我找不到访问在线表单的直接解决方案。微软提出了一些要求,他们回应了该选项在积压中。我想知道是否有其他解决方案可以通过 API 访问共享的在线 MS 表单?

解决方法

不幸的是,没有 graph api 来做同样的事情。

我能想到两种选择:

选项 1:

您可以通过使用 LogicAPP 或使用 Power Automate(以前称为 MS Flow)来维护自己的表单响应数据源

enter image description here

只要为表单记录了新的响应以及响应中已填写的数据,就会调用此触发器。

这样您就可以将此响应导出为存储在 OneDrive、Sharepoint、Azure 存储等中的 CSV 文件(附加到现有响应)。以便您在需要时通过 Graph API 使用此 CSV。

或将响应添加到 Sharepoint 在线列表作为列表项。您可以通过 Graph API 获取列表项。

https://docs.microsoft.com/en-us/graph/api/resources/listitem?view=graph-rest-1.0

选项 2:

注意:如果您在非 Web 应用程序中执行操作,则此方法可能适用。

因为您正在尝试通过 Python 实现您的目标。我以为您可以将 Selenium 用于 WebBrowser。

获取应答响应的 API 如下:

GET https://forms.office.com/formapi/api/<tenantid>/users/<userid>/light/forms('<formid>')/responses?$expand=comments&$top=7&$skip=0 

上述请求的示例响应:

enter image description here

这里的问题是,此时无法获取上述 API 的访问令牌。 (据我研究)

所以我所做的解决方法是使用 Selenium。

例如 - 使用 ChromeDriver 和 Selenium 库来自动化以下过程:

您可以参考这篇文章 https://www.browserstack.com/guide/python-selenium-to-run-web-automation-test 以了解我们如何使用 python-chrome 进行浏览器自动化。

第 1 步: 自动登录到 https://forms.office.com。 此步骤将为会话创建必要的 cookie 以访问表单 api

第 2 步: 现在在同一个会话中点击 api

GET https://forms.office.com/formapi/api/<tenantid>/users/<userid>/light/forms('<formid>')/responses?$expand=comments&$top=7&$skip=0 

您将获得输出作为响应: enter image description here

可以评估并随后用于处理。