因此,我有以下代码可以通过 id 获取特定的 Google 共享云端硬盘:
import os.path
from google.oauth2 import service_account # see: https://stackoverflow.com/a/64509140/497745 and https://developers.google.com/identity/protocols/oauth2/service-account#authorizingrequests
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaFileUpload
SCOPES = ["https://www.googleapis.com/auth/drive"]
SERVICE_ACCOUNT_FILE = "credentials.json"
def main():
creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
try:
drive_api_service = build("drive", "v3", credentials=creds)
# see: https://googleapis.github.io/google-api-python-client/docs/dyn/drive_v3.drives.html#get
folder = (drive_api_service.drives()
.get(driveId="1AEZqVMFTv9qTVp7QVA", useDomainAdminAccess=True)
.execute())
except Exception as error:
print(f'An error occurred: {error}')
if __name__ == "__main__":
main()
注意:出于安全原因,我手动更改了驱动器ID。但我知道 ID 是有效的,因为我是从使用相同服务帐户成功调用
drive_api_service.drives().list().execute()
的结果中获取的。
我的服务帐号与包含共享云端硬盘的 Google Workspace 帐号位于不同的 Google Cloud 帐号中。
但是,我:
Content Manager
添加到共享云端硬盘。共享云端硬盘没有文件夹。
我的服务帐户能够毫无问题地
list
共享云端硬盘。
{'kind': 'drive#driveList', 'drives': [{'id': '1AEZqVMFTv9qTVp7QVA', 'name': 'dcf_results', 'kind': 'drive#drive'}]}
但是,当我尝试使用上述代码
get
驱动器时,我得到了 404。
An error occurred: <HttpError 404 when requesting https://www.googleapis.com/drive/v3/drives/0ADQqULDEv5pYUk9PVA?useDomainAdminAccess=true&alt=json returned "Shared drive not found: 0ADQqULDEv5pYUk9PVA". Details: "[{'message': 'Shared drive not found: 1AEZqVMFTv9qTVp7QVA', 'domain': 'global', 'reason': 'notFound', 'location': 'driveId', 'locationType': 'parameter'}]">
我注意到我必须跳过大量晦涩的环节才能确保服务帐户已勾选所有设置,并且添加访问权限甚至可以通过我的服务帐户在其中列出共享驱动器外部 Google Workspace 帐户。
所以,我的猜测是:
get
电话。也许我无法直接通过 ID 获取共享驱动器,只能获取该共享驱动器下的文件夹。有什么想法吗?
根据您的情况,从
useDomainAdminAccess=True
中删除 folder = (drive_api_service.drives().get(driveId="1AEZqVMFTv9qTVp7QVA", useDomainAdminAccess=True).execute())
怎么样?
当我看到“方法:drives.get”
useDomainAdminAccess
的官方文档时,是这样说的。
以域管理员身份发出请求;如果设置为 true,则如果请求者是共享云端硬盘所属域的管理员,则将被授予访问权限。
我猜这可能是您当前问题的原因。那么,按如下方式删除怎么样?
folder = (drive_api_service.drives()
.get(driveId="1AEZqVMFTv9qTVp7QVA", useDomainAdminAccess=True)
.execute())
folder = (drive_api_service.drives()
.get(driveId="1AEZqVMFTv9qTVp7QVA")
.execute())