【python】スプレッドシートに権限を付与する流れ|Google Sheets API

Google Cloud Platform スプレッドシート 手順

先日、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を選択して、作成をします。

ダウンロードされるファイルはのちほど、次のユーザーの追加で必要になります。

注意
こちらの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

参考にしていただけたら嬉しいです。

>>>【Python】スプレッドシートの文字列を検索して、別シートに転記(コピー)する方法①はこちら!

>>>【Python】スプレッドシートの文字列を検索して、(行ごと)別シートに転記(コピー)する方法②はこちら!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA