如何使用 Google Drive API 通过服务帐户访问域中的共享文件?

Pau*_*aul 2 python google-drive-api google-cloud-platform

我一直在尝试从 Python 3.7 脚本访问有关 Google Shared Drive 文件的一些简单信息:

上次修改共享云端硬盘上的 Google 表格文件的时间。

我已经在 GCP Drive API 菜单中创建了一个服务帐户,它可以通过 Sheets API 访问/编辑/等 Google Sheets,没有任何问题。

但是,当我对 Drive API 使用相同的服务帐户时,它不会返回其自己的文件夹(仅包含一个文件:“入门”)之外的文件的任何信息。该帐户可以访问所有云 API,具有域范围委派,其所有范围都与 GSuite 中 API 控制菜单中包含的 Drive API 相关。

服务帐户的电子邮件地址已正确添加到共享云端硬盘中的所有文件夹中。

任何想法?基本上,我需要知道任何给定用户最后一次修改工作表的时间是什么时候。

secret_cred_file = ...
SCOPES = ['https://www.googleapis.com/auth/drive']
credentials = service_account.Credentials.from_service_account_file(secret_cred_file, scopes=SCOPES)
service = discovery.build('drive', 'v3', credentials=credentials)
results = service.files().list(pageSize=10, fields="nextPageToken, files(id, name,modifiedTime)").execute()
items = results.get('files', [])
Run Code Online (Sandbox Code Playgroud)

PS:我见过这个:从共享文件夹获取文件,但这没有帮助

小智 5

我能够通过向列表方法添加一些参数来列出共享驱动器文件,而无需冒充用户,如谷歌文档中所述:

\n
\n

实施共享驱动器支持

\n

共享云端硬盘遵循与“我的云端硬盘”不同的组织、共享和所有权模型。如果您的应用要在共享驱动器上创建和管理文件,则必须在应用中实现共享驱动器支持。首先,当您的应用执行以下操作时,您需要在请求中包含supportsAllDrives=true查询参数:

\n

files.get、files.list、files.create、files.update、files.copy、files.delete、changes.list、changes.getStartPageToken、permissions.list、permissions.get、permissions.create、permissions.update、权限。删除

\n
\n
\n

搜索共享云端硬盘上的内容

\n

使用 files.list 方法搜索共享驱动器。本节介绍 files.list 方法中共享驱动器特定的字段。要搜索共享驱动器,请参阅搜索文件和文件夹。

\n

files.list 方法包含以下共享驱动器特定字段和查询模式:

\n

driveId \xe2\x80\x94 要搜索的共享驱动器的 ID。

\n

includeItemsFromAllDrives \xe2\x80\x94 共享云端硬盘项目是否应包含在结果中。如果不存在或设置为 false,则不会返回共享云端硬盘项目。

\n

corpora \xe2\x80\x94 查询适用的项目主体(文件/文档)。支持的主体包括用户、域、驱动器和所有驱动器。为了提高效率,优先选择用户或驱动器而不是所有驱动器。

\n

supportsAllDrives \xe2\x80\x94 请求的应用程序是否支持“我的驱动器”和共享驱动器。如果为 false,则共享云端硬盘项目不会包含在响应中。

\n
\n

例子

\n
service.files().list(includeItemsFromAllDrives=True, supportsAllDrives=True, pageSize=10, fields="nextPageToken, files(id, name,modifiedTime)").execute()\n
Run Code Online (Sandbox Code Playgroud)\n

最好记住文件夹或文件需要与服务帐户共享。

\n