##やりたいこと
Raspberry piを使用して、Google Drive スプレッドシートへの書きこみテストを行いたいです。
##困っていること
↓のプログラムコードを実行すると、次のエラーがでてしまいます。
エラー①
jsonファイルの文字コードがShift-JISの時に発生していたエラー
html
1Traceback (most recent call last): 2 File "./GDVTest.py", line 18, in <module> 3 gc = gspread.authorize(credentials) 4 File "/home/pi/.local/lib/python2.7/site-packages/gspread/__init__.py", line 38, in authorize 5 client.login() 6 File "/home/pi/.local/lib/python2.7/site-packages/gspread/client.py", line 51, in login 7 self.auth.refresh(http) 8 File "/home/pi/.local/lib/python2.7/site-packages/oauth2client/client.py", line 545, in refresh 9 self._refresh(http) 10 File "/home/pi/.local/lib/python2.7/site-packages/oauth2client/client.py", line 749, in _refresh 11 self._do_refresh_request(http) 12 File "/home/pi/.local/lib/python2.7/site-packages/oauth2client/client.py", line 780, in _do_refresh_request 13 body=body, headers=headers) 14 File "/home/pi/.local/lib/python2.7/site-packages/oauth2client/transport.py", line 282, in request 15 connection_type=connection_type) 16 File "/home/pi/.local/lib/python2.7/site-packages/httplib2/__init__.py", line 2135, in request 17 cachekey, 18 File "/home/pi/.local/lib/python2.7/site-packages/httplib2/__init__.py", line 1796, in _request 19 conn, request_uri, method, body, headers 20 File "/home/pi/.local/lib/python2.7/site-packages/httplib2/__init__.py", line 1701, in _conn_request 21 conn.connect() 22 File "/home/pi/.local/lib/python2.7/site-packages/httplib2/__init__.py", line 1411, in connect 23 raise SSLHandshakeError(e) 24httplib2.SSLHandshakeError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)
エラー②
jsonファイルの文字コードがUTF-8の時に発生していたエラー
html
1Traceback (most recent call last): 2 File "./GDVTest.py", line 16, in <module> 3 credentials = ServiceAccountCredentials.from_json_keyfile_name('My Project BME280-3702d030ad2e.json', scope) 4 File "/home/pi/.local/lib/python2.7/site-packages/oauth2client/service_account.py", line 220, in from_json_keyfile_name 5 client_credentials = json.load(file_obj) 6 File "/usr/lib/python2.7/json/__init__.py", line 291, in load 7 **kw) 8 File "/usr/lib/python2.7/json/__init__.py", line 339, in loads 9 return _default_decoder.decode(s) 10 File "/usr/lib/python2.7/json/decoder.py", line 364, in decode 11 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 12 File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode 13 raise ValueError("No JSON object could be decoded") 14ValueError: No JSON object could be decoded
##プログラムコード
html
1import gspread 2import json 3 4#ServiceAccountCredentials:Googleの各サービスへアクセスできるservice変数を生成します。 5from oauth2client.service_account import ServiceAccountCredentials 6 7#2つのAPIを記述しないとリフレッシュトークンを3600秒毎に発行し続けなければならない 8scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] 9 10#認証情報設定 11#ダウンロードしたjsonファイル名をクレデンシャル変数に設定(秘密鍵、Pythonファイルから読み込みしやすい位置に置く) 12credentials = ServiceAccountCredentials.from_json_keyfile_name('xxx.json', scope) 13 14#OAuth2の資格情報を使用してGoogle APIにログインします。 15gc = gspread.authorize(credentials) 16 17#共有設定したスプレッドシートキーを変数[SPREADSHEET_KEY]に格納する。 18SPREADSHEET_KEY = 'yyy' 19 20#共有設定したスプレッドシートのシート1を開く 21worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1 22 23#A1セルの値を受け取る 24import_value = int(worksheet.acell('A1').value) 25 26#A1セルの値に100加算した値をB1セルに表示させる 27export_value = import_value+100 28worksheet.update_cell(1,2, export_value)
まずは、出ているメッセージでググってみるとよろしいかと思います。
「SSLHandshakeError certificate verify failed」とか
以下は参考になりませんか?利用しているライブラリのバージョンが合っていないとか。
https://github.com/googleapis/google-api-python-client/issues/453
コメントありがとうございます。
$pip listで確認すると、
gspread (3.1.0)
pyOpenSSL (16.2.0) となっています。
google-api-python-clientは、pip listの中には入っていませんでした。
pyOpenSSLをアップグレードして⇒pyOpenSSL (19.0.0)
試してみましたが、結果は変わらずでした。
教えていただきたいのですが、
gspreadは、pip3コマンドでインストールしました。
$ pip3 install gspread
oauth2clientは、pipコマンドでインストールしました。
$ pip install oauth2client
pip3(またはpip)でインストールしていますが、統一しないとだめなのでしょうか?
素人質問ですみません。。。
ご提示いただいたエラーからPythonのバージョンは2.7をご利用なのですよね?であれば、2.7で動作する環境を整備する必要があるのではないでしょうか。あるいは、Pythonのバージョン自体を3にしてすべて3で動作するようにするとか。バージョンによりライブラリや使い方が変わったりするので注意が必要です。
pi@raspberrypi:~/dev $ python -V
Python 2.7.13
を使用しております。
gspreadもpipコマンドでインストールしましたが、結果は変わりませんでした。
1つ気になることがあります。
jsonファイルを開くと(WINSCPで開きました)、Shift-JISとなっていました。
UTF-8に変更して、実行したところ、別のエラー内容となりました。(質問に追加します。)
jsonファイルの形式に何か間違いがあるのでしょうか。
現在リモート環境でラズパイを扱っているため、
win10 PCでダウンロードしたjsonファイルを、winSCPでドラッグアンドドロップして、ラズパイのフォルダにコピーしました。
この方法が間違えているのでしょうか。
回答2件
あなたの回答
tips
プレビュー