※Windowsのpython3.6.0で動作確認
GoogleDriveのスプレッドシートのファイルをpythonで読み出したいけど、Googleのサンプルなにやってるのかわかんねーよ、とりあえず読みたいんだよ、という人向け。
元ネタ
https://developers.google.com/sheets/api/quickstart/python
まずはSTEP2まで頑張ってください。
それではSTEP3のプログラムの部分です
# coding:utf-8
import httplib2
import apiclient
import oauth2client
# 設定
# -----------------------------------------------------------------------------
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly' # 読み込み許可を求める
APPLICATION_NAME = 'read sample' # 日本語通らないので英文字のみで
SHEET_ID = 'スプレッドシートのファイルID。ファイル編集時のURLから拾える'
SHEET_TAB = 'スプレッドシート内のシート名'
RANGE = 'A1:Z1000' # 読み込む範囲
# -----------------------------------------------------------------------------
# 認証ファイルの読み込み
store = oauth2client.file.Storage("./credential.json") # 認証ファイルある?
credentials = store.get()
# 未認証だった場合は許可を求める(ブラウザ認証)
if not credentials or credentials.invalid:
flow = oauth2client.client.flow_from_clientsecrets('client_secret.json', SCOPES)
flow.user_agent = APPLICATION_NAME
# 初回認証
import argparse
args = '--auth_host_name localhost --logging_level INFO --noauth_local_webserver'
flags = argparse.ArgumentParser(parents=[oauth2client.tools.argparser]).parse_args(args.split())
credentials = oauth2client.tools.run_flow(flow, store, flags) # ブラウザ認証で許可すると認証ファイルが作成される
# 認証ファイルを使って接続
http = credentials.authorize(httplib2.Http())
# シートの読み込み
service = apiclient.discovery.build('sheets', 'v4', http=http, discoveryServiceUrl='https://sheets.googleapis.com/$discovery/rest?version=v4')
values = service.spreadsheets().values().get(spreadsheetId=SHEET_ID, range=SHEET_TAB+'!'+RANGE).execute().get('values', [])
# valuesを使って色々やれるよ
print(values)
エラー処理とかは各自追記してくだせぇ_(:3」∠)_
#おまけ
スプレッドシートの中のシートを全部読みたいときは、SHEET_TABを固定値じゃなくメタデータのシートのリストから取得すると便利です。
# シートの読み込み
# サービスの取得は一緒
service = apiclient.discovery.build('sheets', 'v4', http=http, discoveryServiceUrl='https://sheets.googleapis.com/$discovery/rest?version=v4')
# valuesを読み込む前に、シートの名前を取得する
sheet_meta = service.spreadsheets().get(spreadsheetId=SHEET_ID).execute()
for sheet in sheet_meta.get('sheets', ''):
# sheet名取得
SHEET_TAB = sheet.get("properties", {}).get("title", 0)
# ここも一緒(直前でSHEET_TAB上書きしてる)
values = service.spreadsheets().values().get(spreadsheetId=SHEET_ID, range=SHEET_TAB+'!'+RANGE).execute().get('values', [])
# valuesを使って色々やれるよ
print(values)