如何通过 Python API 使用 Google Drive v3 API 来限制编辑者共享电子表格?

How to use Google Drive v3 API via Python API to restrict editors from sharing a spreadsheet?

我正在尝试弄清楚如何在 Python 中以编程方式实现描述 here 的解决方案 防止其他人共享您的共享文件(使用Google 驱动 API v3).

我以编程方式创建了一个 Google 电子表格,如下所示:

from oauth2client.service_account import ServiceAccountCredentials
from googleapiclient import discovery

get_credentials = ServiceAccountCredentials.from_json_keyfile_dict
credentials = get_creds(keyfile_dict=keyfile_dict, scopes=scopes)

service_sheets = discovery.build('sheets', 'v4', credentials=credentials)
service_drive = discovery.build('drive', 'v3', credentials=credentials)

# create sheet
body = {'properties': {'title': 'this is my spreadsheet title'}}
response_create = service_sheets.spreadsheets().create(body=body).execute()

但此电子表格归我的开发者帐户所有,我无法编辑甚至查看它。然后我想给自己写权限,我这样做如下:

# change permission
new_permission_w = {
    'value': 'MY_GMAIL_NAME@gmail.com',
    'emailAddress': 'MY_GMAIL_NAME@gmail.com',
    'type': 'user',
    'role': 'writer'
}
perms = service_drive.permissions()
response_perm = (perms
                 .create(fileId=response_create['spreadsheetId'],
                         body=new_permission_w,
                         sendNotificationEmail=False,
                         useDomainAdminAccess=False,
                         transferOwnership=False)
                 .execute())

我想阻止与我共享它的人与其他人共享它。看起来有一种方法可以通过 API 执行此操作,如下所示: 但我在 Python 中看不到如何执行此操作。我尝试将 perms dict 更改为

new_permission_w = {
    'value': 'MY_GMAIL_NAME@gmail.com',
    'emailAddress': 'MY_GMAIL_NAME@gmail.com',
    'type': 'user',
    'role': 'writer',
    'setWritersCanShare': False
}

(即向字典添加 'setWritersCanShare': False)但 API 调用似乎忽略了 'setWritersCanShare' 键。我还尝试将 API 调用更改为

response_perm = (perms
                 .create(fileId=response_create['spreadsheetId'],
                         body=new_permission_w,
                         sendNotificationEmail=False,
                         useDomainAdminAccess=False,
                         setWritersCanShare=False,
                         transferOwnership=False)
                 .execute())

但我得到 TypeError: Got an unexpected keyword argument "setWritersCanShare".

我也查看是否有 gpsread 解决方案,但找不到。

我很茫然。如何通过 python 使用 API 以编程方式阻止编辑者共享?

  • 您想使用 Python 将 writersCanShare 的 属性 修改为 False
  • 您可以使用云端硬盘 API。
  • 你要修改的文件的所有者属性是你

如果我的理解是正确的,在DriveAPI中使用files.update的方法怎么样?

示例脚本:

body = {'writersCanShare': False}
res = service_drive.files().update(fileId=response_create['spreadsheetId'], body=body).execute()

参考:

如果我误解了你的问题,我深表歉意。