Python - 使 gspread.service_account 使用 python 字典或字符串而不是文件名

Python - Make gspread.service_account take a python dictionary or string instead of file name

我目前正在使用 google 工作表,并且正在使用 python 库 gspread 使其自动化。我的代码的第一行是导入 gspread 库并使用 service-account.json 文件登录服务帐户 google 控制台给我们。

import gspread
account = gspread.service_account(filename='service-account.json')

但我希望它使用 python 字典而不是文件,所以我想要这样的东西

import gspread

creds = {'type': 'service_account', 'project_id': 'hidden', 'private_key_id': 'hidden', 'private_key': 'hidden', 'client_email': 'hidden', 'client_id': 'hidden', 'auth_uri': 'hidden', 'token_uri': 'hidden', 'auth_provider_x509_cert_url': 'hidden', 'client_x509_cert_url': 'hidden'}
#login to service account using these creditionals

我似乎找不到任何可以做到这一点的东西,可能是因为我缺乏搜索技巧。 谢谢

看到gspread的官方文档,发现了下面的示例脚本。 Ref

示例脚本:

import gspread

credentials = {
    "type": "service_account",
    "project_id": "api-project-XXX",
    "private_key_id": "2cd … ba4",
    "private_key": "-----BEGIN PRIVATE KEY-----\nNrDyLw … jINQh/9\n-----END PRIVATE KEY-----\n",
    "client_email": "473000000000-yoursisdifferent@developer.gserviceaccount.com",
    "client_id": "473 … hd.apps.googleusercontent.com",
    ...
}

gc = gspread.service_account_from_dict(credentials)

sh = gc.open("Example spreadsheet")

print(sh.sheet1.get('A1'))
  • 我测试这个脚本的时候要求包含token_uri如下。并且,在我的情况下需要使用 private_keyclient_emailtoken_uri 的值。但是,我不确定我的情况是否与您的情况相同。所以,请根据您的情况测试上述脚本。

      credentials = {
          "private_key": "-----BEGIN PRIVATE KEY-----\nNrDyLw … jINQh/9\n-----END PRIVATE KEY-----\n",
          "client_email": "473000000000-yoursisdifferent@developer.gserviceaccount.com",
          "token_uri": "https://oauth2.googleapis.com/token",
      }
    

参考: