PythonでSheets APIを使ってGoogle spreadsheetのレコードを取得する方法(OAuth2.0対応バージョン)
Sheets APIはこれまで OAuth 1.0対応していて Google spreadsheetからワークシート全件のリストを取得するための認証は
client = gdata.spreadsheet.service.SpreadsheetsServie(email, password)
のように非常に簡単でした。延々アナウンスされていたことではありますが、 つい先日 Sheet APIのOAuth 1.0のサポートがついに完全に停止してしまったようで 上のような簡単なクライアントの認証はもうできません。
ここは素直にAuth 2.0対応するしかないのですが、Sheets APIは なぜかPython用の公式ドキュメントが無く自分にとっては認証部分を実装するのはかなり苦行。
ということでOAuth 2.0対応した gspreadというSpreadsheetsのwrapperが公開されていたのでこれを利用し、これまでの認証部分をアップデートすることにしました。
はじめに Google Developers Consoleでプロジェクトを作成しJSONキーをダウンロードする必用があります。
「APIと認証」画面では使用するAPIを選択するのですがSheets APIはDrive APIに含まれるようなのでDrive APIを有効にします。
このJSONキーにはclient_emailが含まれますがこれをSpreadsheetの共有作業者として「share」に登録しておきます。
JSONキーの情報でcredentialクライアントを作成します。
json_key = json.load(open(json_key_name.json'))
scope = ['https://spreadsheets.google.com/feeds/']
credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)
client = gspread.authorize(credentials)
これまでgdata.spreadsheet.text_dbを使いワークシート全件を取得していたクラスの アップデートを行いたいので、gspreadでもの全件取得のメソッドを探してみます。 get_all_records()が使えそうなのでこれを試してみます。
gc = gspread.authorize(credentials)
worksheet = gc.open(title).sheet1
# 上記は最初のシートを直接取得しているが、worksheetの名前を指定することも可能
# doc = gc.open(title)
# worksheet = doc.worksheet("Sheet1")
list = worksheet.get_all_records(empty2zero=False, head=1)
とすると辞書型のリストを得ることができました。