🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

2回答

1059閲覧

ラズパイ スプレッドシートへの書き込み

raspypy

総合スコア247

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/10/18 01:17

編集2019/10/18 08:01

##やりたいこと
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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/10/18 03:16

まずは、出ているメッセージでググってみるとよろしいかと思います。 「SSLHandshakeError certificate verify failed」とか 以下は参考になりませんか?利用しているライブラリのバージョンが合っていないとか。 https://github.com/googleapis/google-api-python-client/issues/453
raspypy

2019/10/18 07:01

コメントありがとうございます。 $pip listで確認すると、 gspread (3.1.0) pyOpenSSL (16.2.0) となっています。 google-api-python-clientは、pip listの中には入っていませんでした。
raspypy

2019/10/18 07:40

pyOpenSSLをアップグレードして⇒pyOpenSSL (19.0.0) 試してみましたが、結果は変わらずでした。 教えていただきたいのですが、 gspreadは、pip3コマンドでインストールしました。 $ pip3 install gspread oauth2clientは、pipコマンドでインストールしました。 $ pip install oauth2client pip3(またはpip)でインストールしていますが、統一しないとだめなのでしょうか? 素人質問ですみません。。。
t_obara

2019/10/18 07:54

ご提示いただいたエラーからPythonのバージョンは2.7をご利用なのですよね?であれば、2.7で動作する環境を整備する必要があるのではないでしょうか。あるいは、Pythonのバージョン自体を3にしてすべて3で動作するようにするとか。バージョンによりライブラリや使い方が変わったりするので注意が必要です。
raspypy

2019/10/18 07:59

pi@raspberrypi:~/dev $ python -V Python 2.7.13 を使用しております。 gspreadもpipコマンドでインストールしましたが、結果は変わりませんでした。 1つ気になることがあります。 jsonファイルを開くと(WINSCPで開きました)、Shift-JISとなっていました。 UTF-8に変更して、実行したところ、別のエラー内容となりました。(質問に追加します。) jsonファイルの形式に何か間違いがあるのでしょうか。 現在リモート環境でラズパイを扱っているため、 win10 PCでダウンロードしたjsonファイルを、winSCPでドラッグアンドドロップして、ラズパイのフォルダにコピーしました。 この方法が間違えているのでしょうか。
guest

回答2

0

自己解決

httplib2.SSLHandshakeErrorの原因について、httplib2ライブラリにてネットワーク環境の設定を行うことで解決できました。

投稿2019/10/23 02:39

raspypy

総合スコア247

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

httplib2.SSLHandshakeError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)

SSLの認証に失敗してるようですんで、そこらへん見直してみては。

投稿2019/10/18 02:54

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2019/10/18 03:00

いつもありがとうございます。 素人質問ですみませんが、"そこらへん"というのが、ちょっと分かりません。 自分で確認した内容として、 ・jsonファイルのファイル名(.pyファイルと同じフォルダに保存)⇒プログラムに正しく記載されているか ・スプレッドシートの共有設定⇒スプレッドシートキーの設定確認 をしてみました。
y_waiwai

2019/10/18 03:03

まずはそのエラーが出てる行とその手前2,3行ぐらいをみて、そこらへんに認証を行うようなところを探しましょう。そこらへんがなにかおかしいということなんで、おかしいところをまず探してみよう
raspypy

2019/10/18 03:22

エラーが発生している行(18行)の手前に、次のコードがあります。 credentials = ServiceAccountCredentials.from_json_keyfile_name('My Project xxx.json', scope) jsonファイルは、.pyファイルと同じフォルダに保存していますが、 pi@raspberrypi:~/dev $ ls -al My Project xxx.json で確認すると、 ls: 'My' にアクセスできません: そのようなファイルやディレクトリはありません ls: 'Project' にアクセスできません: そのようなファイルやディレクトリはありません ls: 'xxx.json' にアクセスできません: そのようなファイルやディレクトリはありません となってしまいます。 これはおかしいのでしょうか。それとも、jsonファイル名にスペースがあるので、こうなってしまうのでしょうか。
raspypy

2019/10/18 05:53

必要なライブラリが不足しているのでしょうか。 今回試すにあたり、追加したライブラリは次の2つです。(インストールされていることも確認できています。) pi@raspberrypi:~ $ pip list gspread (3.1.0) oauth2client (4.1.3)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問