【发布时间】:2018-11-02 18:45:03
【问题描述】:
我正在尝试使用云函数和 python 中的工作表 API 访问 Google 工作表,但出现 403 权限错误。我创建了一个服务帐户,导出了密钥(包含在我正在上传的云功能 zip 中),并为该服务帐户提供了访问工作表所需的 API 范围(我尝试了 https://www.googleapis.com/auth/spreadsheets 和 https://www.googleapis.com/auth/drive)。代码如下:
import httplib2
from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
def main(request):
scope = ['https://www.googleapis.com/auth/spreadsheets','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('client_secrets.json', scope)
service = build('sheets', 'v4', http=credentials.authorize(httplib2.Http()))
spreadsheet_id = 'id-of-the-google-sheet'
range = 'Sheet1!A:D'
response = service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=range).execute()
cols = response.get('values', [])[0]
return cols[0]
requirements.txt:
google-api-python-client
oauth2client
google-auth-httplib2
google-auth
如果我与服务帐户明确共享 Google 表格,则身份验证确实有效,并且我可以访问表格数据。问题是为什么这不能通过作为 Google 帐户管理员应用适当的 API 范围来工作?
【问题讨论】:
-
client_secrets.json来自哪里?此处使用的凭据应源自您在为项目启用 Google Sheets API 时获得的credentials.json文件。有关示例,请参见 developers.google.com/sheets/api/quickstart/python。
标签: python google-cloud-functions google-sheets-api google-oauth google-api-python-client