我正在将服务帐户用于同时启用了GoogleDrive和Google Sheets API的项目。我正在尝试向已存在的Google表格添加权限(由同一服务帐户创建)。 API会像成功一样返回,但是权限保持不变。
客户端配置:
from googleapiclient.discovery import build
from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
GOOGLE_CLIENT = build('sheets', 'v4', credentials=creds)
GOOGLE_DRIVE_CLIENT = build('drive', 'v3', credentials=creds)
使用Google Drive V3 API:
new_permission = {
'type': "user",
'emailAddress': '[email protected]',
'role': "writer"
}
response = GOOGLE_DRIVE_CLIENT.permissions().create(
fileId=GOOGLE_SHEETS_ID, fields='*', body=new_permission).execute()
我得到的答复是:
{'kind': 'drive#permission', 'id': '1X2680991XXX793XX1308', 'type': 'user', 'emailAddress': '[email protected]', 'role': 'writer', 'displayName': 'Jeff Bezos', 'deleted': False}
然后我运行列表权限,但返回空:
permissions = GOOGLE_DRIVE_CLIENT.permissions().list(fileId=GOOGLE_SHEETS_ID).execute()
print(permissions.get('items', []))
如果我的理解是正确的,那么这个答案怎么样?在您的脚本中,使用了Drive API v3。但是从permissions.get('items', [])
起,您似乎正在尝试使用Drive API v2。这样,将返回空数组。那么下面的修改如何?
permissions = GOOGLE_DRIVE_CLIENT.permissions().list(fileId=GOOGLE_SHEETS_ID).execute()
print(permissions.get('items', []))
permissions = service.permissions().list(fileId=fileId, fields='*').execute()
print(permissions.get('permissions', []))
如果我误解了你的问题,而这不是你想要的方向,我深表歉意。