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

时间:2019-02-07 00:49:13

标签: python google-drive-api gspread

我正在尝试找出如何在Python中以编程方式实现here所述的解决方案,以防止他人共享您的共享文件(使用Google Drive 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进行操作的方法,如下所示:Use Google Drive API to change link sharing permissions,但我看不到如何在Python中进行操作。我尝试将烫发字典更改为

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​​以编程方式阻止编辑者共享?

1 个答案:

答案 0 :(得分:1)

  • 您要使用Python将writersCanShare的属性修改为False
  • 您可以使用Drive API。
  • 您要修改属性的文件的所有者是您。

如果我的理解是正确的,那么如何使用Drive API中的files.update方法?

示例脚本:

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

参考:

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