import json
import gspread
from oauth2client.client import SignedJwtAssertionCredentials
json_key = json.load(open('Crowds-9569176f5988.json'))
scope = ['https://spreadsheets.google.com/feeds']
credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)
#gc = gspread.authorize(credentials)
Error:
Traceback (most recent call last): File "C:\Users\sony\Desktop\Python\new.py", line 8, in <module>
credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope) File "C:\Python34\lib\site-packages\oauth2client\util.py", line 137, in positional_wrapper
return wrapped(*args, **kwargs) File "C:\Python34\lib\site-packages\oauth2client\client.py", line 1469, in
__init__
self.private_key = base64.b64encode(private_key) File "C:\Python34\lib\base64.py", line 62, in b64encode
encoded = binascii.b2a_base64(s)[:-1] TypeError: 'str' does not support the buffer interface
I tried encode the string using .encode()
but gspread.authorize()
doesn't support such a type. This is [documentation][1] which is apparently not of much help.
I am using Python 3.4. I think the documentation code works only for version before 3.
EDIT:
credentials = SignedJwtAssertionCredentials.from_json(json_key['client_email'], json_key['private_key'], scope)
Traceback (most recent call last): File "C:\Users\sony\Desktop\Python\new.py", line 9, in credentials = SignedJwtAssertionCredentials.from_json(json_key['client_email'], json_key['private_key'], scope) TypeError: from_json() takes 2 positional arguments but 4 were given [Finished in 1.0s with exit code 1]
[1]: http://gspread.readthedocs.org/en/latest/oauth2.html
credentials = SignedJwtAssertionCredentials.from_json(json_key)
Traceback (most recent call last): File "C:\Users\sony\Desktop\Python\new.py", line 8, in credentials = SignedJwtAssertionCredentials.from_json(json_key) File "C:\Python34\lib\site-packages\oauth2client\client.py", line 1479, in from_json data = json.loads(s) File "C:\Python34\lib\json__init__.py", line 312, in loads s.class.name)) TypeError: the JSON object must be str, not 'dict'
You are using Python3.x, where string
is not the same type as for Python 2.x. You need to cast it to bytes (encode it).
Here is simple solution that works well for me:
credentials = SignedJwtAssertionCredentials(
json_key['client_email']
, bytes(json_key['private_key'], 'UTF-8')
, scope)
There is a solution in this bug report but I have not tried it myself. https://github.com/burnash/gspread/issues/224
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With