使用OAuth2使用python在gspread中进行授权的问题

时间:2015-04-24 15:12:25

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

我对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

再次感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

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

无需替换为实际值。

答案 1 :(得分:0)

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

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

让我知道你是怎么做出来的。我正在尝试自己完成整个oauth2事情并且进展不顺利。

答案 2 :(得分:0)

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