Google Sheet APIのはじめかた(Python)

Python経由でGoogleスプレッドシートを触る方法を紹介します。

f:id:xterm256color:20180728084141j:plain

目次

環境

手順

GoogleアカウントでGCPを有効化。

初心者のためのGCPプロジェクト始め方入門 | apps-gcp.com を参考にプロジェクト作成の前まで実行してください。

スプレッドシートの作成

https://docs.google.com/spreadsheets/u/0/ をブラウザで開いて、適当なスプレッドシートを作成します。

スプレッドシート編集画面のURLがhttps://docs.google.com/spreadsheets/d/<spreadsheetId>/edit#gid=<sheetId>となっているので、spreadsheetIdをメモしておきましょう。

ついでにA1セルに「Test」を入力します。

Google Cloud SDKのインストール

https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu に従ってCloud SDKをインストールします。

export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install google-cloud-sdk
# 言語に応じて追加コンポーネントをインストール。今回はPythonコンポーネントをインストールしておく。
sudo apt-get install google-cloud-sdk-app-engine-python

公式チュートリアルで動作確認

https://developers.google.com/sheets/api/quickstart/python にしたがって以下を実行します。

  • 「Enable the Google Sheets API」から新しいプロジェクトを作る。プロジェクト名は任意(API-TEST)などでOK。
  • 「DOWNLOAD CLIENT CONFIGURATION」からファイル credentials.json をダウンロードして、作業ディレクトリに配置する
  • Pythonパッケージのインストール pip install --upgrade google-api-python-client oauth2client

スクリプトの作成

credentials.jsonをダンロードした場所にquickstart.pyを作成します。 以下は日本環境に合わせて https://github.com/gsuitedevs/python-samples/blob/master/sheets/quickstart/quickstart.py を多少書き換えました。

なお、SPREADSHEET_IDはユーザー環境に合わせて書き換えてください。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools

# Sheets APIのセットアップ
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
    creds = tools.run_flow(flow, store)
service = build('sheets', 'v4', http=creds.authorize(Http()))

# Sheets APIの呼び出し
SPREADSHEET_ID = '<spreadsheetId>'
RANGE_NAME = 'TGS-Salt!A1:C2'
result = service.spreadsheets().values().get(spreadsheetId=SPREADSHEET_ID,
                                             range=RANGE_NAME).execute()
values = result.get('values', [])
if not values:
    print('No data found.')
else:
    print('Name, Major:')
    for row in values:
        print(row)

ターミナルにA1セルの内容である['Test']が出力されていれば成功です。