LoginSignup
1
3

More than 3 years have passed since last update.

Python で Google Spreadsheets (など)の無人操作

Last updated at Posted at 2020-03-28

TL; DR

  • Google Spreadsheets の表を Python プログラムを使って無人操作する方法を書きました。
  • 公式 Quick Start は人間が介在する OAuth2 のやり方だけど、ようはこれの無人版です。
  • サービスアカウントというものを作って、それに必要な権限を与え、そのアカウントの秘密鍵を使ってアクセスします。

スプレッドシートの準備

これは何も特別なことはありません。Google Drive に適当なシートを作成して、ファイルの ID だけ控えておいてください。

プロジェクトとサービスアカウント

各種ドキュメントを操作するには当然権限が必要です。プログラムから操作する場合は、大雑把に行って2とおりの権限獲得の手法があります。

  • 一時的に人間の許可を得て、その人間のアカウントで操作
  • 権限を与えられた 機械ようのアカウント で操作

ざっくり言うと前者はインタラクティヴなソフトで使う方法で、後者は自動化システムで使う方法です。今回は後者の方法を使います。ここで「機械ようのアカウント」を サービスアカウントと言います。つまり、まずはサービスアカウントを作り、必要な権限を与える必要がります。だいたい以下の手順です。

  1. GCPのコンソール に行って、プロジェクトを作ります。
  2. GCPの左上のハンバーガーメニュー > IAMと管理 > サービスアカウント > サービスアカウントを作成
  3. 入力は必須項目だけで良いと思います。name@project.iam.gserviceaccount.com というアカウントができます。
  4. アカウントを作ると秘密鍵 (private key) をダウンロードできると思います。JSON形式でダウンロードしてください。
  5. このアカウントに対して、操作したいファイル(スプレッドシート)の操作権限を与えてください(=共有してください)。与え方は通常の人間向けの権限操作といっしょです。
  6. ハンバーガーメニュー > APIとサービス > ダッシュボード > +APIとサービスを有効化 と進み、Google Sheets API を有効化してください。

パッケージのインストール

たぶんこれだけでいいはず。

$ pip3 install google-api-python-client google-auth-oauthlib oauth2client

コード

シートの A1 セルに test と書き込むコードです。たったこれだけ!

from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

PRIVKEY_FILE = "projectname-*********.json"  # ダウンロードした秘密鍵
SPREADSHEET_ID = "********"                  # シートのファイルのID
SCOPE = ["https://www.googleapis.com/auth/spreadsheets"]

creds = ServiceAccountCredentials.from_json_keyfile_name(PRIVKEY_FILE, SCOPE)
service = build("sheets", "v4", credentials=creds)
sheet = service.spreadsheets()

result = sheet.values().update(
    spreadsheetId=SPREADSHEET_ID,
    range="a1",
    valueInputOption="RAW", # USER_ENTERED とすると式を式として入力できる(例: "=sum(a1:a100)")
    body={"values": [["test"]]}).execute()

おわりに

Ruby でも同じくらい簡単にできました。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3