如何在 Python 中使用服务帐户凭据创建 Google 工作表?

How to create Google Sheets using Service Account Credential in Python?

我创建了 Service Account Credentials here 并获得了 json 密钥 service.json

然后我尝试了:

from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
credentials = service_account.Credentials.from_service_account_file(
        'service.json', scopes=SCOPES)

drive = build('drive', 'v3', credentials=credentials)
file_metadata = {
    'name': 'sampleName',
    'parents': ['#### folderId ###'],
    'mimeType': 'application/vnd.google-apps.spreadsheet',
}
res = drive.files().create(body=file_metadata).execute()
print(res)

出现错误:

<HttpError 403 when requesting https://www.googleapis.com/drive/v3/files?alt=json returned "Insufficient Permission: Request had insufficient authentication scopes.">

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
    "extendedHelp": "https://code.google.com/apis/console"
   }
  ],
  "code": 403,
  "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
 }
}

我发现没有Auth头,我是匿名的,匿名使用的配额是零。我该如何设置页眉或此错误的原因是其他原因?

我只想从任何计算机在我的 gdrive 文件夹中创建一个包含 python 的电子表格,而无需单击某处以授予访问权限。

  • 您想通过服务帐户使用 Drive API v3 创建新的电子表格。
  • 您想在您的 Google 帐户的 Google 驱动器的特定文件夹中创建新的电子表格。
  • 您想使用带有 python 的 googleapis 来实现此目的。
  • 您已经可以使用云端硬盘 API。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

修改点:

  • 我认为在您的脚本中,需要修改范围以使用 Drive API 创建文件。在这种情况下,使用 https://www.googleapis.com/auth/drive 怎么样?
  • 为了在您的 Google 帐户的 Google 驱动器的特定文件夹中创建新的电子表格,首先,需要在您的 Google 使用服务帐户的电子邮件驱动。通过这种方式,使用服务帐户创建新的电子表格到您的 Google 驱动器的特定文件夹。请注意这一点。

修改后的脚本:

当您的脚本修改时,请修改如下。

from googleapiclient.discovery import build  # Added
from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/drive']  # Modified
credentials = service_account.Credentials.from_service_account_file('service.json', scopes=SCOPES)

drive = build('drive', 'v3', credentials=credentials)
file_metadata = {
    'name': 'sampleName',
    'parents': ['#### folderId ###'],
    'mimeType': 'application/vnd.google-apps.spreadsheet',
}
res = drive.files().create(body=file_metadata).execute()
print(res)
  • 关于#### folderId ###,请设置与服务帐户的电子邮件共享的文件夹ID。

注:

  • 如果您想同时使用工作表 API 和驱动器 API,请使用 SCOPES = ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/spreadsheets"]
  • 在这种情况下,新电子表格会直接创建到 Google 驱动器中的文件夹中。所以你可以通过浏览器看到它。
    • 如果在服务帐户的 Drive 文件夹中创建新的电子表格,则需要为您的 Google 帐户创建权限。请注意这一点。在这种情况下,我认为 是有用的。

参考文献:

如果我误解了你的问题,这不是你想要的方向,我深表歉意。