先日、pythonでGmailとの連携をお伝えしましたが、
さらにGoogleスプレッドシートとの連携が必要になったので、
その手順を紹介していきます。
今回は、すでにGoogle API Platformでプロジェクトが立ち上がっている前提で、
お伝えしていきます。
Google APIの連携の流れは以下にまとめていますので、まだ設定が住んでいない方は、
こちらの記事を確認してください。
スプレッドシートの連携
うまく連携ができていないと、以下のようなエラーが返ってきます。
gspread.exceptions.APIError: {'code': 404, 'message': 'Requested entity was not found.', 'status': 'NOT_FOUND'}
では、順番に解説をしていきます。
APIの有効化
API Platformのライブラリから、
Google Sheets APIを有効にします。
(これは、Gmailでやった手順と同じです。)

秘密鍵の発行
APIの認証のページから、キーを選択して、
次に、鍵を追加を選択します。

ここでは、JSONを選択して、作成をします。

ダウンロードされるファイルはのちほど、次のユーザーの追加で必要になります。
ユーザーの追加
Pythonで扱いたいスプレッドシートの共有をしていきます。
同じく認証のページから、

2には、pythonでログインしたいユーザーのアドレスを記入します。

さきほどの秘密鍵のjsonファイルに記載されているclient_emailの部分のアドレスを入力してください。
続いて、3は編集者を選択しました。
オーナーの下に、編集者として、新しいメンバーが加わっていたら、
これでGoogle API Platformでの設定は完了です。

Pythonのスクリプト
さきほど、秘密鍵の発行でダウンロードしたjsonファイルを、
今回は、client_secret.jsonというファイル名に変更しました。
{
"type": "service_account",
"project_id": "xxxxxxxxx-xxxxxxxx",
"private_key_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"private_key": "-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxxxxx\nxxxxxxxxxxxxxx\nxxxxxxxxxxxxxx\n-----END PRIVATE KEY-----\n",
"client_email": "xxxxxxxxxxxxxxxx@txxxxxxxxxxxxxxxxx.iam.gserviceaccount.com",
"client_id": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/xxxxxxxxxxxxxxxxxxxxxxxxxxx.iam.gserviceaccount.com"
}
poetryの環境設定
僕はpoetryを使っているので、poetryの設定をします。
※使ってない方は飛ばしてください。
poetry add gspread
poetry add oauth2client
上記ふたつでひとまず完了です。
pythonのスクリプト
今回は、こんな内容のスプレッドシートのA1のセルを取得したいと思います。

記述は以下を書いています。
#spreadsheet2.py
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
scope = ["https://spreadsheets.google.com/feeds","https://www.googleapis.com/auth/spreadsheets","https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json',scope)
client = gspread.authorize(creds)
sheet = client.open_by_key('xxxxxxxxxxxxxxxxxxxxxxxx').sheet1
result = sheet.cell(1,1).value
print(result)
部分的な説明
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json',scope)
client = gspread.authorize(creds)
client_secret.jsonの部分は、先ほどダウンロードしたjsonファイルを指定しています。
sheet = client.open_by_key('xxxxxxxxxxxxxxxxxxxxxxxx').sheet1
ここでは、keyをスプレッドシートのopenに使っています。
keyはスプレッドシートから得ることができます。
(以下URLの、xxxxxxxxxxxxxxxxの部分です)
https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit#gid=0

result = sheet.cell(1,1).value
A1のセルは、(1,1)で選択しています。
poetry run python spreadsheet2.py
123
はい、無事に、A1セルの、123を取得することができました。
まとめ
pythonでスプレッドシートを扱えるようになれば、
いろいろな業務を自動化できる可能性が広がります。
僕自身も退屈な仕事をpythonで対応できるように一つずつ、
覚えていこうと考えています。
最後に、gspread usageのページを記載しておきます。
参考 Examples of gspread Usagegspread参考にしていただけたら嬉しいです。