Google Sheet APIのはじめかた(Python)
Python経由でGoogleスプレッドシートを触る方法を紹介します。
目次
環境
手順
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']
が出力されていれば成功です。