【问题标题】:Issues using OAuth2 to authorize in gspread using python使用 OAuth2 在 gspread 中使用 python 进行授权的问题
【发布时间】:2015-07-03 06:35:44
【问题描述】:

我对python很陌生,所以请原谅我的无知。

我正在尝试将数据发送到 Google 电子表格并决定使用 gspread.

但是 gspread 要求我使用 OAuth-2.0 来授权访问电子表格。我在他们的文档页面上使用了tutorial 来执行此操作。但是,当我执行我的代码时:

import json
import gspread
from oauth2client.client import SignedJwtAssertionCredentials

json_key = json.load(open('test IGS-1859066a1c38.json'))
scope = ['https://spreadsheets.google.com/feeds']

credentials = SignedJwtAssertionCredentials(json_key['760 ... 6r9@developer.gserviceaccount.com'], json_key['-----BEGIN PRIVATE KEY-----\nMI ... 003d\n-----END PRIVATE KEY-----\n'], scope)
gc = gspread.authorize(credentials)

wks = gc.open("ITGS_TEST").sheet1

我收到以下错误:

KeyError: '760 ... 6r9@developer.gserviceaccount.com'

我不知道如何解决这个问题,也看不出我缺少什么。如果有人能提供意见,我将不胜感激。

提前致谢

编辑: 我按照 Sandeep107 的建议将代码改回:

SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)

我不再收到旧的错误代码,而是收到以下错误:

    credentials = SignedJwtAssertionCredentials(json_key['client_email'],  json_key['private_key'], scope)
  File "F:\Python33\lib\site-packages\oauth2client-1.4.7-py3.3.egg\oauth2client\util.py", line 137, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "F:\Python33\lib\site-packages\oauth2client-1.4.7-py3.3.egg\oauth2client\client.py", line 1487, in __init__
    self.private_key = base64.b64encode(private_key)
  File "F:\Python33\lib\base64.py", line 58, in b64encode
    raise TypeError("expected bytes, not %s" % s.__class__.__name__)
TypeError: expected bytes, not str

再次感谢任何帮助。

【问题讨论】:

    标签: python authentication oauth-2.0 google-oauth gspread


    【解决方案1】:

    查看链接:http://gspread.readthedocs.org/en/latest/oauth2.html

    我认为您需要“client_email”。看起来你可能有两次“client_key”。

    让我知道你是怎么做到的。我正在尝试自己解决整个 oauth2 问题,但进展并不顺利。

    【讨论】:

    • 只链接没有任何进一步信息的答案是有问题的。如果链接的目标发生变化,您的答案将变得毫无用处。使用编辑按钮改进您的答案,并在其中包含相关信息。
    • 感谢您的建议,但我检查了,我正在挑衅地使用客户电子邮件
    【解决方案2】:

    您应该按原样使用 json_key['client_email'], json_key['private_key']

    无需替换为实际值。

    【讨论】:

    • 非常感谢您的帮助!我试着听从你的建议,不幸的是它给了我另一个错误。有关详细信息,请参阅编辑。
    • @user3120921 你解决了这个问题吗?如果没有,请提供更多细节。您是否更改了 .json 文件?
    【解决方案3】:

    Python 3 需要将字符串转换为字节,Python 2.x 使用字符串,您使用的是哪个 Python 版本?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 2017-11-09
      • 2019-03-26
      • 1970-01-01
      相关资源
      最近更新 更多