php - 如何使用 Google 服务帐户通过 Activity API 检索 Google Drive 活动?
问题描述
我的个人 Google 帐户下有一个 Google Drive。我还在我的个人 Google 帐户下设置了一个带有服务帐户的 Google App。该服务帐户具有所有者角色。
我正在尝试使用服务帐户来获取我的 Google Drive 中某个文件夹上的最近活动列表。我将服务帐户电子邮件添加为具有编辑权限的文件夹的共享用户。但是,每当我运行 Google Activity API 时,我都没有得到任何活动结果,即使我在共享文件夹中执行各种操作,例如添加文件。
我在 PHP 中通过
$client = new Google_Client();
$client->setApplicationName('Some App');
$client->setAuthConfig( __DIR__ . '/service_account.json');
$client->setScopes(Google_Service_DriveActivity::DRIVE_ACTIVITY_READONLY);
$client->fetchAccessTokenWithAssertion();
$service = new Google_Service_DriveActivity($client);
// Print the recent activity in your Google Drive.
$request = new Google_Service_DriveActivity_QueryDriveActivityRequest();
$request->setPageSize(10);
$results = $service->activity->query($request);
if (count($results->getActivities()) == 0) {
print "No activity.\n";
else // do something
它总是触发“无活动”。我单步执行代码,没有错误。服务帐户附加到的项目启用了 Google Activity API。
也许这不起作用,因为服务帐户不是执行活动的帐户?尽管我认为服务帐户的全部意义在于代表某人(在这种情况下是我自己)获取数据访问权限。
我刚刚进行了测试 - 我为我的应用程序使用了 Oauth2 凭据,而不是服务帐户凭据,它可以工作。但这就是问题 - 我真的需要为服务帐户工作。
解决方案
如果您检查 Drive 活动 api 文档的Auth部分。您会注意到它并没有说支持服务帐户。
它实际上不能正常工作的原因是这个。
Activity API 由 DriveActivity 资源(表示对用户Google Drive 中的对象所做的更改)和查询方法(允许您检索有关这些更改的信息)组成。
它正在为该用户寻找更改。不适用于您与服务帐户共享的驱动器上的文件夹或目录
服务帐户是用户,如果该用户没有更改任何内容,那么您将看到“无活动”
尽管我认为服务帐户的全部意义在于代表某人(在这种情况下是我自己)获取数据访问权限。
在某种程度上,但您目前正在代表服务帐户执行此操作。您尚未将权限委派给其他用户。需要明确的是,与服务帐户共享文件夹并不构成设置委托,以便它可以代表您行事。所以 ...
为此,您需要从工作区帐户启用域范围的委派。这可能值得一试。
推荐阅读
- angular - 确保在继续之前完成服务
- python - Django objects.create 产生的输出超出预期
- angular - ng2-charts - 条形图,只显示一种颜色
- c# - 如何以编程方式从 Google 云端硬盘中的“与我共享”中删除文件
- python - Python3:无法获取 Gtk.SpinButton 值
- symfony - Symfony 4.3 Multiple ChoiceType 使用 PATCH 时只能添加值不能删除
- php - Codeigniter 查询错误:未定义偏移量 1
- ms-access - IsNotNull 访问函数
- react-native - 服务器响应后如何执行操作?
- php - 在foreach中定位PHP数组中的最后一个孩子