在 Google Colab 中,使用下面的示例时,我现在收到错误。这工作了很多年,今天对我来说不再工作了。
使用示例时:
单元1
from google.colab import auth
auth.authenticate_user()
细胞2
import gspread
from oauth2client.client import GoogleCredentials
gc = gspread.authorize(GoogleCredentials.get_application_default())`
错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-ac9436b5eeee> in <module>()
2 from oauth2client.client import GoogleCredentials
3
----> 4 gc = gspread.authorize(GoogleCredentials.get_application_default())
/usr/local/lib/python3.7/dist-packages/gspread/__init__.py in authorize(credentials, client_class)
38 """
39
---> 40 client = client_class(auth=credentials)
41 return client
/usr/local/lib/python3.7/dist-packages/gspread/client.py in __init__(self, auth, session)
38 def __init__(self, auth, session=None):
39 if auth is not None:
---> 40 self.auth = convert_credentials(auth)
41 self.session = session or AuthorizedSession(self.auth)
42 else:
/usr/local/lib/python3.7/dist-packages/gspread/utils.py in convert_credentials(credentials)
57
58 raise TypeError(
---> 59 "Credentials need to be from either oauth2client or from google-auth."
60 )
61
TypeError: Credentials need to be from either oauth2client or from google-auth.
我不知道从这里该去哪里。我联系了 Google Cloud 支持人员,但意识到这超出了他们的范围。从 Google 的角度来看,身份验证流程是有效的。
Google colab 最近更改了他们的 API。旧 API 已被弃用,新 API 可用。
这是 Google 提供的新代码片段,可以与
gspread
正常工作
from google.colab import auth
auth.authenticate_user()
import gspread
from google.auth import default
creds, _ = default()
gc = gspread.authorize(creds)
sh = gc.create('A new spreadsheet')
您应该按照本指南
更改身份验证方法在标有“搜索 API 和服务”的框中,搜索“Google Drive API”和“Google Sheets”并启用它
转到“API 和服务 > 凭据”并选择“创建凭据 > 服务帐户密钥”。
填写表格
单击“创建”和“完成”。
按服务帐户上方的“管理服务帐户”。
在最近创建的服务帐户附近按 ⋮ 并选择“管理密钥”,然后单击“添加密钥 > 创建新密钥”。
选择 JSON 密钥类型并按“创建”。
你将得到一个像这样的json:
{
"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": "[email protected]",
"client_id": "473 … hd.apps.googleusercontent.com",
...
}
转到您的电子表格并与上述步骤中的
client_email
共享。就像您使用任何其他 Google 帐户一样。
将 json 文件放入驱动器中的文件夹中
将您的单元格更改为:
import gspread
json_dir = 'drive/MyDrive/credentials/credentials.json'
gc = gspread.service_account(filename=json_dir)
其中
json_dir
是第 8 步中创建的 json 文件的路径
希望有帮助
我必须重新启动运行时并遵循新协议。我认为我们之前使用的现在已被弃用......
https://colab.research.google.com/notebooks/snippets/sheets.ipynb#scrollTo=6d0xJz3VzLOo
(根据评论,复制相关片段以供将来使用)
from google.colab import auth
auth.authenticate_user()
import gspread
from google.auth import default
creds, _ = default()
gc = gspread.authorize(creds)