読者です 読者をやめる 読者になる 読者になる

栗’s diary

Python勉強中。トレードに役立つようなTwitter bot開発中。

ツイッターbot作成の道(その6): GoogleSpreadSheet

ツイッターbotを作る技術として、最後に残るは更新されるや否や呟く。

そのためには、更新されたかどうかを判定するために過去の情報をストックしとかないといけないわけです。

第4回ではjsonファイルに保存しようとして見事に失敗したわけですが(ツイッターbot作成の道(その4) - 栗’s diary)、アプリ外に保存場所を確保しないといけません。

 GAE経由でデータを残す方法としてちょっとググった所、GQLデータストアってのがありました。

GAEのデータストアを使ってみました - 主にプログラムを勉強するブログ

DataStore « python練習帳

これら記事によると、GQLってのはSQLを使い慣れた人用、じゃない人はデータストアらしいです。

これらの技術は、後々使うかもしれません。ただ、使い慣れたもので容易にデータを確認したいと思った栗氏。またYahoo! Financeから金融関係の情報を引っ張ってこられるので使いこなしておきたいとも思った栗氏。

データの保存場所にGoogleSpreadSheetを使ってみる事にしました。

初期設定方法はPython3でGoogle SpreadsheetをDBのように利用するを参考に。思った以上に面倒。

Google側のAPIを有効にしたりKeyを取得したり。

スプレッドシート側で共有設定したり。

正直、何やってるかよくわからないまま言われるがままに設定したらとりあえず初期設定完了。(説明がなかった部分として、サービスアカウントは「App Engine default service account」で。メールアドレスもなかったのでJSONファイルをテキストエディタで開いてゲット。)

ソースコードはこんな感じに。

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name('[ダウンロードしたJSONへのパス]', scope)
gc = gspread.authorize(credentials)
doc_id = '[スプレッドシートのURLからコピーした文字列]'
gfile   = gc.open_by_key(doc_id)
wsheet  = gfile.worksheet(シート名)
records = wsheet.get_all_records()

指定シートのデータを無事に取得できました。
credentialsを取得する方法はUsing OAuth2 for Authorization — gspread 0.3.0 documentationを参考にして、.from_json_keyfile_nameを利用。
両サイトにある「from oauth2client.client import SignedJwtAssertionCredentials」は古いようで、python - ImportError: cannot import name SignedJwtAssertionCredentials - Stack Overflowの回答欄を参考に「from oauth2client.service_account import ServiceAccountCredentials」を使用。

具体的にデータをやり取りする方法は以下のサイトが参考になりました。

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

gspread API Reference — gspread 0.3.0 documentation

 

GAE上でやる場合には、ImportError: No module named gspread から始まって色々なmoduleがないって言われるので都度追加してあげる。ラスボスとして前回記事のようなエラーに遭うかもしれないのでご注意を。