繁体   English   中英

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

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

我在这里创建了Service Account Credentials并获得了 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 Drive 的特定文件夹中创建新的电子表格。
  • 您想使用 googleapis 和 python 来实现这一点。
  • 您已经可以使用 Drive API。

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

修改点:

  • 我认为在您的脚本中,需要修改范围才能使用 Drive API 创建文件。 在这种情况下,如何使用https://www.googleapis.com/auth/drive
  • 为了将新的电子表格创建到您 Google 帐户的 Google Drive 的特定文件夹中,首先需要将您的 Google Drive 中的文件夹与服务帐户的电子邮件共享。 这样,新的电子表格将使用服务帐户创建到您的 Google Drive 的特定文件夹中。 请注意这一点。

修改后的脚本:

当您的脚本被修改时,请按如下方式进行修改。

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。

笔记:

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

参考:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM