WICの中から

機構設計者が株式投資や育児に奮闘するblog

Pythonを使ってGoogleスプレッドシートを自動で読み書きする

我が家では家計管理や投資用データはSpreadSheetにまとめています。

手打ちでポチポチやっているわけですが、自動化できるところは自動にしたいなーと思い、最初の一歩としてPythonから読み書きさせてみようということです。

参考リンクの内容の継ぎ接ぎですが、Google Cloud PlatformのUIが微妙に変わってたり、つまづいた所もあるので、備忘録がてら記事にしておきます。

Pythonのインストール(Mac向け)

今回はラズパイじゃなくてMacで試そうと思います。MacだとPythonはプリインストールされているみたいですが、僕の環境だとpipでモジュールを引っ張ってこれませんでした。バージョンの問題ですかね?というわけでMacにPythonを入れる所から始めます。

Homebrewを使用して新たにPythonをインストールしました。下記ページのスクリプトをターミナルに実行すればHomebrewのインストールは終了です。

Homebrew — macOS 用パッケージマネージャー

Homebrewがインストールできたら、下記コマンドを実行してpythonのインストールが完了です。

$ brew install python

スプレッドシートへのアクセス

本番です。調べていると同じ事をやろうとした方が結構見つかりました。下記の要領でやればいいみたいです。

基本的な流れ

・Google Cloud Platformにてプロジェクト作成

・Google Drive APIを有効にする

・OAuth用クライアントIDの作成

・スプレッドシートにユーザーを登録

・コーディング

Google Cloud Platformにてプロジェクト作成

Google Cloud Platformにアクセスしてプロジェクトを作成します。プロジェクト名は適当でOKです。

f:id:temcee:20170708182425p:plain

Google Drive APIを有効にする

プロジェクト作成に続き、下記手順を踏むことでGoogle Drive APIを有効にすることができます。

f:id:temcee:20170708210809p:plain

f:id:temcee:20170708210936p:plain

f:id:temcee:20170708211328p:plain

OAuth用クライアントIDの作成

 サービスアカウントを生成します。

f:id:temcee:20170708215150p:plain

ここでダウンロードされるJSONキーは後々使うので、分かりやすい場所に保存しておきましょう。

スプレッドシートにユーザーを登録

今度はGoogle スプレッドシートにアクセスして、Pythonで読み書きしたいシートに共有設定をします。

先ほど自動で取得したサービスアカウントIDを使います。

f:id:temcee:20170708215842p:plain

これで前準備は完了です。

コーディング

スプレッドシートの操作に使うgspread、認証に使うoauth2clientのライブラリをそれぞれインストールします。ターミナルに下記コマンドを打ち込みます。

$ pip install gspread
$ pip install oauth2client

次にコーディングです。ダウンロードしたJSONキーを使うので、同じ階層にプログラムを作成してやりましょう。

#!/usr/bin/env python
# -*- coding: utf-8 -*- import gspread
from oauth2client.service_account import ServiceAccountCredentials scope = ['https://spreadsheets.google.com/feeds'] #ダウンロードしたjsonファイルを同じフォルダに格納して指定する
credentials = ServiceAccountCredentials.from_json_keyfile_name('XXXXXXXXX.json', scope)
gc = gspread.authorize(credentials)
# 共有設定したスプレッドシートの名前を指定する
worksheet = gc.open("YYYYYYYYY").sheet1 #以下、動作テスト
# A1セルの値を取得
print worksheet.cell(1,1)
# A1セルを更新
worksheet.update_cell(1,1, u'Hello, gspread.')

jsonファイル名「XXXXXXXXX」とスプレッドシート名「YYYYYYYYY」はそれぞれご自身の環境に合わせて変更してください。

これを実行すると、無事ターミナルにセルの値が表示され、スプレッドシートには書き込みがなされてました。

gspreadのリファレンスを読むと、他にも色々操作が出来そうな感じです。

gspread API Reference — gspread 0.6.2 documentation

一先ず、スプレッドシートをPythonから書き込めるようになりました。次はスクレイピングできるようにして、Webから拾ったデータをスプレッドシートにまとめてごにょごにょ出来るようにしたいです。

Importエラーに悩んだ時

インストールしたパッケージが何故か見つからずハマりました。

原因は標準のライブラリを見に行ってしまっていたことで、パスをpipでインストールした方に変えてやることで解決できました。

pip install したパッケージをimport できないときの対応 - Qiita

importについて不勉強なので、きちんと読んでおきたいです。

Pythonのimportについてまとめる - Qiita

参考にした記事

Pythonインストール

Pythonインストール(Mac編) - Qiita

スプレッドシート関係

PythonからOAuth2.0を利用してスプレッドシートにアクセスする - Qiita

[Python] Google SpreadSheetをAPI経由で読み書きする - YoheiM .NET

gspreadを使ってpythonからGoogle Spreadsheetsを編集する - SCUEL開発者ブログ

こんな記事も書いています。

temcee.hatenablog.com

Python、ライブラリが豊富でいいですね。弄ってて楽しいです。

temcee.hatenablog.com

目指しているのは投資用データの自動収集です。