LoginSignup
3

More than 5 years have passed since last update.

posted at

updated at

GoogleスプレッドシートAPI(v4)のクイックスタートのサンプルプログラムを削れるだけ削ってみる

※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)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3