nakaoka3の技術ブログ

2023年中に52本なにか書きます

Google Sheets APIを使ってデータを取得する

プライベートで、Google スプレッドシートにまとめたデータを APIを使って取得したいという事があった。

以下の手順でやることができる。

サービスアカウントを作って、鍵ファイルを取得する

  • GCPでSheets APIを有効にする
  • GCPでサービスアカウントを作る
  • GCPでサービスアカウントの鍵ファイルを作成してダウンロードする

次にスプレッドシート側で、サービスアカウントに権限を与える必要がある

スプレッドシートの右上の「共有」ボタン

APIを使ってデータを取得する

作成してダウンロードしておいた鍵ファイルを使って、以下のようにデータが取得できる。

from google.oauth2 import service_account
from googleapiclient.discovery import build
credentials = service_account.Credentials.from_service_account_file('./path/to/credential.json')
scoped_credentials = credentials.with_scopes(
    ['https://www.googleapis.com/auth/spreadsheets.readonly']
)
service = build('sheets', 'v4', credentials=credentials)


spreadsheet_id = 'sheet-id'
range_name = 'Sheet1!A1:B100'
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=spreadsheet_id, range=range_name).execute()
values = result.get('values', [])

まとめ

便利だけど、サービスアカウント作るのが面倒に感じた。

共有ボタンでサービスアカウントに共有できるというのに最初気が付かなくて、どうやって権限与えるのか迷った。 共有ボタンからサービスアカウントにも共有できるのが面白い。

Notionのデータベースで同様のことをしようとするとAPIキーを作って取得できるので、Notionのほうが敷居が低いと感じた。