如何正确使用范围https://www.googleapis.com/auth/drive.file

时间:2018-07-28 12:38:17

标签: python google-sheets-api service-accounts gspread

我尝试使用以下代码访问Google云端硬盘中的Google表格文件:

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)

gc = gspread.authorize(credentials)

wks = gc.open('my_test').sheet1

print(wks.get_all_records())

然后我在驱动器中创建了一个名为 my_test 的电子表格,并将其与 credentials.json 中的电子邮件共享。然后它起作用了。但是,范围太广了,我想使用

scope = ['https://www.googleapis.com/auth/drive.file']

相反。但是,如果我更改范围,它将找不到工作表:

File "/home/my_username/.local/lib/python3.6/site-packages/gspread/client.py", line 130, in open
    raise SpreadsheetNotFound
gspread.exceptions.SpreadsheetNotFound

那是为什么?我该如何更改?我在Google上搜索了很多,对于大多数人来说,共享或重新共享电子表格是可行的。就我而言,问题仍然存在。

我还尝试了这种Error 500 when performing a query with drive.file scope解决方案,该方法为云端硬盘元数据添加了一个范围,但这会导致此权限错误,可以将其视为进度(因为它找到了文件):

gspread.exceptions.APIError: {
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

但是,即使我将电子表格访问权限设置为“公开”,该错误仍然存​​在。

任何提示都非常感谢!

哦,还有一个更笼统的问题:服务帐户是否可以访问我的整个驱动器?还是仅对与服务帐户共享的所有内容?因为我只共享了一个电子表格,所以我对权限在这里的工作方式有点困惑。

0 个答案:

没有答案