I'm trying to connect to my google sheets with gspread. Here is the code:
#IMPORT STANDARD LIBRARIES
import json
import os
#IMPORT THIRD PARTY LIBRARIES
import gspread
from oauth2client.client import SignedJwtAssertionCredentials
key_location = '/home/selecaotwo/Dropbox/Public/my.ENV/' + os.sep + 'sys.CREDENTIALS'
key_file_h = 'test-project-auth-a4f3c4bd20c4.json'
print key_location + os.sep + key_file_h
json_key = json.load(open(key_location + os.sep + key_file_h))
scope = ['https://spreadsheets.google.com/feeds']
credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)
gc = gspread.authorize(credentials)
Running this code gives me the following error:
/home/selecaotwo/Dropbox/Public/my.ENV//sys.CREDENTIALS/test-project-auth-a4f3c4bd20c4.json
Traceback (most recent call last):
File "/home/selecaotwo/Desktop/gspread-test/gspread-test-001-codeRegist-0001.py", line 17, in <module>
gc = gspread.authorize(credentials)
File "/usr/local/lib/python2.7/site-packages/gspread/client.py", line 335, in authorize
client.login()
File "/usr/local/lib/python2.7/site-packages/gspread/client.py", line 98, in login
self.auth.refresh(http)
File "build/bdist.linux-x86_64/egg/oauth2client/client.py", line 598, in refresh
File "build/bdist.linux-x86_64/egg/oauth2client/client.py", line 769, in _refresh
File "build/bdist.linux-x86_64/egg/oauth2client/client.py", line 795, in _do_refresh_request
File "build/bdist.linux-x86_64/egg/oauth2client/client.py", line 1425, in _generate_refresh_request_body
File "build/bdist.linux-x86_64/egg/oauth2client/client.py", line 1554, in _generate_assertion
File "build/bdist.linux-x86_64/egg/oauth2client/crypt.py", line 162, in from_string
File "/usr/local/lib/python2.7/site-packages/OpenSSL/__init__.py", line 36, in <module>
from OpenSSL import crypto
ImportError: /usr/local/lib/python2.7/site-packages/OpenSSL/crypto.so: undefined symbol: PyUnicodeUCS2_Decode
[Finished in 0.1s with exit code 1]
[shell_cmd: python -u "/home/selecaotwo/Desktop/gspread-test/gspread-test-001-codeRegist-0001.py"]
[dir: /home/selecaotwo/Desktop/gspread-test]
[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]
I read on the forums that this is likely an issue between my Ubuntu system (14.04 LTS) and Python (2.7.9) but the weird thing was when I recompiled python with --enable-encoding=usc2, I got the same error on the same line but instead of saying "undefined symbol: PyUnicodeUCS2_Decode" it simply said "undefined symbol: PyUnicodeUCS4_Decode". This leads me to believe the problem may be something else and I'm not sure how to proceed.
I'm not sure if this will solve the problem. Instead of putting in the json file itself, can you try entering the client_email and private key like this. The client_email can be copied as such. For the private key, do this instead:
key = u"-----BEGIN PRIVATE KEY-----\nBLABLA_\n-----END PRIVATE KEY-----\n".encode("utf-8")
credentials = SignedJwtAssertionCredentials(client_email,key,scope)