ゲームのシナリオをスプシ管理したくなった。でも1個ずつダウンロードするのはめんどくさいので自動化してみた。
必要なもの
- python3
- gspread
- GCP の認証情報
- ダウンロード元の Google スプレッドシートの ID
認証情報はこちらの記事の手順で作成できる。
Google SpreadSheetのデータを Pythonで取得する #GoogleCloud - Qiita
スプレッドシートのIDはURLから持ってくる。
https://docs.google.com/spreadsheets/d/{ スプレッドシートのID }/edit
ダウンロードするシートをタイトルで絞り込める。例えば TARGET_SHEET_TO_DOWNLOAD = r"C[0-9]{3}_S[0-9]{3}"
設定することで画像の「シート2」を除外してダウンロードする。
ソースコード
$ pip install gspread
import gspread import re import csv from concurrent.futures import ThreadPoolExecutor import time CREDENTIALS_PATH = "GCP クレデンシャルの JSON ファイルのパス" SPREDSHEET_ID = "スプレッドシートURLから ID 部分を取ってくる" OUTPUT_PATH = "出力先のパス" TARGET_SHEET_TO_DOWNLOAD = r".*" gc = gspread.service_account(filename=CREDENTIALS_PATH) sh = gc.open_by_key(SPREDSHEET_ID) def download(sheet): print(f"Downloading {sheet.title}...") with open(f"{OUTPUT_PATH}\{sheet.title}.csv", "w", -1, "utf-8") as f: writer = csv.writer(f) writer.writerows(sheet.get_all_values()) time.sleep(1) # 1秒間に送信するリクエスト数は worker 数で制御する tpe = ThreadPoolExecutor(max_workers=10) for sheet in sh.worksheets(): if not re.match(TARGET_SHEET_TO_DOWNLOAD, sheet.title): continue tpe.submit(download, sheet) tpe.shutdown()