gspread で Python から Google スプレッドシートを扱えるようにするまで
記事概要
Python から Google スプレッドシートを操作するアプリケーションを作成する機会があったので、必要な設定などを備忘のため記事化したものです。
本記事では、以下のようなスプレッドシートを用意して、対象シートのすべての値を取得する所まで実施します。
print(spreadsheet.sheet1.get_all_values())
# [['Hello, gspread!']]
Google Cloud Platform 側の設定
プロジェクトの作成
任意の名称でプロジェクトを作成します。(本記事では DEMO-gspread
としています)
API の有効化
gspread を利用するには、以下の API を有効にします。
① コンソール画面のサイドバーから、[API とサービス] - [有効な API サービス] を押下します。
② [API とサービスの有効化] を押下します。
③ 検索窓から API をキーワード検索します。
④ [有効にする] を押下し、API を有効にします。
Google Drive API
Google Sheets API
認証情報の発行
gspread を利用するには Google サービスへの認証・認可が必要になりますが、その方法として以下の2つが提供されています。
本記事では「サービスアカウント」を利用します。サービスアカウント [3] とは、特殊なタイプの Google アカウントのことで、いわゆる Bot です。認証情報は Bot (アプリケーション 等) に対して Google サービスへの認証・認可を提供します。
サービスアカウントは分離された異なるアカウントであるため、デフォルトではスプレッドシートに対するアクセス権限を持っていません。今回はスプレッドシートにアクセスさせたいため、ユーザーはこのサービスアカウントと対象のスプレッドシートを共有することになります。
① コンソール画面のサイドバーから、[API とサービス] - [認証情報] を押下します。
② [認証情報] - [サービスアカウント] を押下します。
③ 任意のサービスアカウント名を入力し、[完了] を押下します。
④ [キー] タブを開き、[鍵を追加] - [新しい鍵を作成] を押下します。
⑤ 「キーのタイプ」を json のまま、[作成] を押下します。(※注意にもある通り、ダウンロードされる認証情報は厳重に管理します)
以上で Google Cloud Platform 側の設定は完了です。
Google スプレッドシートの作成と共有
① 適当な Google スプレッドシートを作成し、[共有] を押下します。
② 作成したサービスアカウントのメールアドレスを入力し、適切な権限を選択した上で [送信] を押下します。
Python アプリケーションからの操作
ライブラリインストール
gspread および google をインストールしておきます。
$ pip install --upgrade pip
$ pip install google
$ pip install gspread
認証
認証のサンプルコードを以下に示します。
from google.oauth2.service_account import Credentials
import gspread
scopes = [
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive'
]
credentials = Credentials.from_service_account_file(
YOUR_CREDENTIAL_FILEPATH,
scopes=scopes
)
gc = gspread.authorize(credentials)
スプレッドシート操作
動作確認として、"シート1" に含まれるすべての値を取得・表示してみます。
spreadsheet_url = "https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxx"
spreadsheet = gc.open_by_url(spreadsheet_url)
print(spreadsheet.sheet1.get_all_values())
[['Hello, gspread!']]
ということで、無事 gspread を使用して Python アプリケーションから Google スプレッドシートへのアクセス・操作ができました!
-
For Bots: Using Service Accoun - gspread ↩︎
-
For End Users: Using OAuth Client ID - gspread ↩︎
-
Service accounts - Google Cloud ↩︎
-
oauth2client - oauth2clinet ↩︎
-
google-auth - Google Auth Library for Python - google-auth ↩︎
Discussion