Google SpreadsheetにPythonから書き込んでみる

この記事はまたまた!ぴょこりんクラスタAdvent Calendarのために書いたものです。

はじめに

家計簿にZaimを使っているんだけど、いろいろ数字をこねたくなったので、Google Spreadsheetにデータを放り込みたい。 csvで落としてきて、それをGoogle SpreadsheetへAPIを使って書き込むようにしたときの話。

手順1: APIキーの発行

まずはAPIキーを発行しなければならない。意外に古い情報しかなくて、 このへんのを複数見ながらえいやでやった。大きな差分はないけど、 Google Drive APIではなくSpread sheet APIがあるのでそちらを選ぶようにする。 参考にしたのは以下の3つで、いちばん上のものが最も参考になった。

手順2:サンプルコードを動作させる

だいたいの野良サンプルにおいて、gspreadというPythonのライブラリを使っているけど、 更新が止まっていていまいちなので、本家のサンプルをまずは動かす。 Python2.6 or greaterとなっているので、何も考えずに従えばよい。

https://developers.google.com/sheets/quickstart/python

サンプルを何回か読むと意味がわかってくると思う。 何か指示するときはjsonを作ってPOST(多分)し、結果をjsonで得る、とそんな感じだ。

手順3:薄いラッパーをかぶせる

いくつかGoogle spreadsheet用Pythonライブラリがあるみたいだけど、 意味がわかってしまえばそんなに難しくはないので、自分でラッパーを作る。 直接APIを触ろうとすると、全体の流れがわかりにくくなるし、何より似たような定形文で 画面が埋まるのはよろしくない。

ラッパーと言っても大層なものではなく、渡したパラメタをjsonに埋めていく、とそんな程度のものである。 ラッパーは以下参照。サンプルコードをほとんど流用していることがわかると思う。 おそらくいちばん面倒であろう認証のところを隠してくれているので、そもそもやることがあまりないというのが 実情である。自分で作ったのはcreate_new_sheetメソッドとappend_dataだけ。 あまり隠せてないけれど、目的達成には十分。

gist.github.com

手順4:動かしてみる

動かしてみるとめちゃめちゃ遅い。数分くらい待たされるんだけど、これはいったい・・・?という感じで、 リアルタイムに使うのは厳しいかもしれない。APIキー登録のときに、どういうアプリケーションで使うのかと聞かれて、 daemon or cronみたいな項目をえらんだせいで後回しになっているのかもしれない。Web appを選んだらよかったかもね。

おわりに

google spreadsheetには書き込めるようになったけど、Zaimからのダウンロードが自動化できていないのでまだ微妙な感じ。 ただ、コピペよりはいくぶんましになったと思う。