对API身份验证不太熟悉,但我无法弄清楚如何通过Python阅读Google Sheet共享。
我试过了:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('/Users/alexiseggermont/Downloads/Accountable-7b29dac08324.json', scope)
gc = gspread.authorize(credentials)
wks = gc.open("mysheet").sheet1
这会在第2行给我ImportError: cannot import name 'opentype'
。
然后我尝试了:
import oauth2client.client, oauth2client.file, oauth2client.tools
import gspread
flow = oauth2client.client.OAuth2WebServerFlow(client_id, client_secret, 'https://spreadsheets.google.com/feeds')
storage = oauth2client.file.Storage('credentials.dat')
credentials = storage.get()
if credentials is None or credentials.invalid:
import argparse
flags = argparse.ArgumentParser(parents=[oauth2client.tools.argparser]).parse_args([])
credentials = oauth2client.tools.run_flow(flow, storage, flags)
gc = gspread.authorize(credentials)
# when this cell is run, your browser will take you to a Google authorization page.
# this authorization is complete, the credentials will be cached in a file named credentials.dat
这会打开一个窗口,询问我是否要让我的应用程序访问我的工作表,然后单击是。但后来sheet = gc.open("mysheet").sheet1
给了我一个权限错误:
APIError: {
"error": {
"errors": [
{
"domain": "global",
"reason": "insufficientPermissions",
"message": "Insufficient Permission"
}
],
"code": 403,
"message": "Insufficient Permission"
}
}
我发现解决此错误的唯一建议是更改范围'变量,但该代码中没有使用范围变量,所以我很困惑。
答案 0 :(得分:1)
您可以使用空格添加多个范围。你可以尝试以下修改吗?
lower()
flow = oauth2client.client.OAuth2WebServerFlow(client_id, client_secret, 'https://spreadsheets.google.com/feeds')
flow = oauth2client.client.OAuth2WebServerFlow(client_id, client_secret, 'https://spreadsheets.google.com/feeds https://www.googleapis.com/auth/drive')
。这样,credentials.dat
就是使用新范围创建的。credentials.dat
时,会发生同样的错误。当范围为https://spreadsheets.google.com/feeds
时,不会发生错误。如果这对你的情况没用,我很抱歉。
答案 1 :(得分:0)
还有Gspread-Pandas库本身,其中的文档以简单的方式对Oauth部分进行了简单介绍: https://github.com/aiguofer/gspread-pandas
使用前,您需要为您的应用下载Google客户端凭据。
客户端凭据要允许脚本使用Google Drive API,我们需要 对Google进行自我认证。为此,我们需要创建一个 项目,描述工具并生成凭据。请使用 网络浏览器,然后转到Google控制台,然后:
在顶部的弹出菜单中选择“创建项目”。出现一个对话框, 因此,为您的项目命名,然后单击“创建”按钮。在 在左侧菜单上,单击API Manager。可用的API的表格是 如图所示。切换Drive API,然后单击Enable API按钮。照着做 用于表格API。为了我们的目的,可能会关闭其他API。上 在左侧菜单上,单击“凭据”。在OAuth同意部分 屏幕上,选择您的电子邮件地址并为您的产品命名。然后 单击保存按钮。在“凭据”部分中,单击“添加凭据” 并切换OAuth 2.0客户端ID。出现对话框创建客户ID。 选择应用程序类型项作为其他。单击创建按钮。请点击 在创建的OAuth 2.0客户端右侧的Download JSON图标上 标识并将下载的文件存储在文件系统上。请成为 请注意,该文件包含您的私人凭据,因此请注意 以与您的私密SSH密钥相同的方式进行归档;即搬家 将JSON下载到〜/ .config / gspread_pandas / google_secret.json(或者您 可以通过直接调用来配置目录和文件名 gspread_pandas.conf.get_config多亏了类似的项目df2gspread 关于如何获取客户端凭据的详细说明。
用户凭证一旦拥有了客户端凭证,就可以拥有 多个用户凭据存储在同一台计算机上。这可以是 拥有共享服务器(例如使用Jupyter)时非常有用 笔记本服务器),其中有多个人可能想要使用 图书馆。 Spread的第一个参数必须是标识 用户的凭证。首次要求使用特定密钥时, 您将必须通过基于文本的OAuth提示进行身份验证;这个 使得可以通过ssh或通过 Jupyter笔记本。此后,该用户的凭据将为 存储(默认情况下存储在〜/ .config / gspread_pandas / creds中,也可以 在GSPREAD_PANDAS_CONFIG_DIR env var中手动设置它和令牌 使用该工具时,它将自动刷新。
用户将只能与他们拥有的电子表格进行交互 访问。
处理身份验证在后端,库正在利用
Google's oauth2client <http://oauth2client.readthedocs.io/en/latest/
__处理 身份验证。如上所述,它可以方便地存储所有内容 这样您就不必担心要处理的样板代码 授权但是,如果您需要自定义身份验证的方式 您可以通过几种不同的方式进行操作。您可以更改目录 使用GSPREAD_PANDAS_CONFIG_DIR env存储所有内容的位置 变种您也可以生成自己的 oauth2client.client.OAuth2Credentials并将它们传递给 实例化Client或Spread对象。其他自定义方式 身份验证,请参见gspread_pandas.conf.get_config和 gspread_pandas.conf.get_creds