グーグルスプレッドシートをPythonからから操作する準備

前回、仮想通貨Symbolのアグリゲートトランザクションを発生させるみーちさんスクリプトの改良版について書きました。

前回の記事では、スクリプトの中にアドレスやXYM数などのデータを直接書き込みましたが、最終的にはこれをグーグルスプレッドシートから読み込みたいと考えています。そこで、今回はその前段の準備をしたいと思います。
と言っても、「たぬハック」さんのページが凄く分かり易くまとまっているので、私が紹介する必要もありません。

https://tanuhack.com/operate-spreadsheet/

もう、このページを見れば全てが書いてあるので、私が説明する必要がないのですが、幾つか補足をしておきます。

「1-3Google Sheets APIを有効にする」の「STEP3:2つのAPIが有効になっているか確認」の項目ですが、私の環境では他の沢山のAPIが表示されていて、イマイチ確認が上手く出来ませんでした。でも、ちゃんと動いていたので、ここでつまずいた方は気にせず進んで良いかもしれません。

次に「1-4認証情報を設定する」の「STEP2:認証情報を作成」の部分ですが、ここが説明と少し違っていました。この記事を書いている令和3年7月4日現在ですと、以下の通りとなります。
1、中央上の方にある「+認証情報を作成」をクリック
2、「サービスアカウント」を選択
3、「サービスアカウント」「サービスアカウントの説明」を入力する。1つ目のサービスアカウントを入力すると、2つ目のメールアドレスのような部分は自動で入力されます。3つ目の説明は「pythonからsheetを操作」などアカウントの目的を入れておくと良いと思います。
4.「作成して続行」をクリック
5.「ロールを選択」の部分で、「基本」⇒「編集者」選択し、最後に「完了」をクリックする。
6、上記で作成したメールアドレスが「サービスアカウント」の一覧に表示されていると思うので、それをクリックする。
7、中央上の方にある「キー」という項目をクリック
8、「鍵を追加」ボタンをクリックし、「新しい鍵を作成」を選択。
9、「キーのタイプ」は「JSON」を選択し、「作成」を押すと、「秘密鍵がパソコンに保存されました」と表示され、「○○○○~.json」というファイルを保存するウィンドウが開くと思いますので、pythonファイルを保存している場所(例、D:\work、等)に保存してください。

この部分が、たぬハックさんのページとやり方が変わっていると思います。

それから、前回も書いたのですが、「3-1環境構築」の部分で
ライブラリをインストール
$ pip install gspread
$ pip install oauth2client
とありますが、上手くインストール出来ない場合はWindowsの場合はコマンドプロンプトを開く時に右クリックして「管理者として実行」にてインストールします。

私がつまづいた部分は以上のなります。これでたぬハックさんのページのスクリプトを試してみて動けばバッチリです。ダメならば、もう一度一からチェックしてみるしかありません、、、。頑張って下さい。

テスト用スクリプト

ここまで設定出来たら、Pythonからグーグルスプレッドシートを操作することが出来るようになっていると思います。
次回、本番のスクリプトに行く前に、テスト用のスクリプトを動かしておきましょう。
まずは、私の使っているシートをご紹介します。

https://docs.google.com/spreadsheets/d/11vr8iHBn5wWvzjU3Qg13oSEICOiruhi_-MPZJtEvvBQ/edit?usp=sharing

上記のシートをコピーして、同じ物をご自分のスプレッドシートに貼り付けてください。
アドレス等は、私がテストネットで実際に使っているものです。最終的にはご自分のお好きなようカスタマイズしてもらえればと思いますが、とりあえずはこのままにしておいてください。

次に、こちらもテスト用のスクリプトです。先程、ダウンロードしたJSONファイルと同じ場所に作成してください。
そして、下記のスクリプト中にある「ダウンロードしたjsonファイル名」と「スプレッドシートキー」を上記の設定と同じように設定してみてください。

import gspread
import json
import os

#ServiceAccountCredentials:Googleの各サービスへアクセスできるservice変数を生成します。
from oauth2client.service_account import ServiceAccountCredentials 

#2つのAPIを記述しないとリフレッシュトークンを3600秒毎に発行し続けなければならない
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

#認証情報設定
#ダウンロードしたjsonファイル名をクレデンシャル変数に設定(秘密鍵、Pythonファイルから読み込みしやすい位置に置く)
json_file = 'ダウンロードしたjsonファイル名'

json_file = os.path.dirname(__file__) + "\\" + json_file
credentials = ServiceAccountCredentials.from_json_keyfile_name(json_file, scope)

#OAuth2の資格情報を使用してGoogle APIにログインします。
gc = gspread.authorize(credentials)

#共有設定したスプレッドシートキーを変数[SPREADSHEET_KEY]に格納する。
SPREADSHEET_KEY = 'スプレッドシートキー'

#共有設定したスプレッドシートのシート1を開く
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1

#シートの全ての値を受け取る
import_value = worksheet.get_all_values()
for address in import_value:
	if address[5] == "1":
		print(address[1],address[2],address[3],address[4])

設定が終わりましたら、このスクリプトを実行してみてください。上手く行けば、スプレッドシートからデータを取得し、名前、アドレス、XYM数、メッセージが取得できると思います。
スプレッドシート中の一番右側の「チェック」の項目に「1」が入っている行を取得します。
送信したいアドレスに「1」を付けるイメージです。

さて、ここまで上手く動きましたでしょうか?ここまで動けば、次回はいよいよスプレッドシートからデータを読み込み、それに基づいてアグリゲートトランザクションを作成します。

もう少し簡単に出来ると思っていたのですが、結構手間がかかりますね、、。こんなの使う人がいるか分かりませんが、一応次回まで続きます。

ありがとうございました。

Special Thanks

https://tanuhack.com/


この記事が気に入ったらサポートをしてみませんか?