はじめに
-
Google Spreadsheet
はとても便利 - ただし、データ分析に使う時にブラウザからダウンロードするのがめんどくさい
- コマンドラインでダウンロードできれば、ますます便利なのではないか
検索 & 要約
-
google spreadsheet wget
でぐぐったら、以下の Stack Overflow がヒットした - 上記の回答を読んで、最終的に以下のコマンドでよいことが分かった
wget -O {FILENAME} 'https://docs.google.com/spreadsheets/d/{KEY}/export?gid={GID}&format={FORMAT}'
-
--no-check-certificate
オプションはつけなくてもOK -
-O {FILENAME}
でファイル名を指定- 拡張子はダウンロード形式に合わせる
-
{KEY}
はスプレッドシートのID- シートのURLを上記のフォーマットと見比べる(見ればわかるはず)
-
{GID}
はスプレッドシート内のシートID- 一番最初に作ったシートは
gid=0
- 別のシートを指定する場合は、そのシートのURLを確認すると
gid=NNN
(ランダムな数字)となっている
- 一番最初に作ったシートは
ダウンロード用のスクリプトを書いた
-
Python3
のsubprocess
モジュールを使ってみた -
wget
したファイルはdownloads/snapshot.xlsx
といった名前で保存することにした- エラーがでないように
downloads
のディレクトリを作っておく($ mkdir downloads
)
- エラーがでないように
import subprocess
def gsheet_url(key, fmt, gid):
'''
key : スプレッドシートのID
fmt : ダウンロード形式
gid : シートのID
'''
path = f'https://docs.google.com/spreadsheets/d/{key}/export'
query = f'format={fmt}'
if not gid is None:
query += f'&gid={gid}'
url = f'{path}?{query}'
return url
def gsheet_wget(key, fmt, gid=None):
'''
snapshot.{fmt} というファイル名で、downloads/ に保存する
'''
ofn = f'snapshot.{fmt}'
url = gsheet_url(key, fmt, gid)
cmd = ['wget', '-O', fname, url]
subprocess.run(cmd, cwd='downloads')
return cmd
テストしてみた
- テスト用のスプレッドシートを用意した
全部の形式でダウンロードしてみた
formats = ['xlsx', 'ods', 'pdf', 'zip', 'csv', 'tsv']
key = '1NbSH0rSCLkElG4UcNVuIhmg5EfjAk3t8TxiBERf6kBM' # テスト用の公開シート
for fmt in formats:
print(f'ダウンロード形式 : {fmt}')
cmd = gsheet_wget(key, fmt)
-
zip
:中身はシート別のhtml
ファイルとレイアウト用のCSS
ファイル -
csv
:シート1
(=gid=0
)だけになる -
tsv
:シート1
(=gid=0
)だけになる
シート2
だけを指定してダウンロードしてみた
-
gid
を指定する
formats = ['xlsx', 'ods', 'pdf', 'zip', 'csv', 'tsv']
key = '1NbSH0rSCLkElG4UcNVuIhmg5EfjAk3t8TxiBERf6kBM' # テスト用に作った公開シート
gid = 1772074296 # シート2のID
for fmt in formats:
print(f'ダウンロード形式 : {fmt}')
cmd = gsheet_wget(key, fmt, gid)
まとめ
-
Google spreadsheet
をwget
できるようになった - これで pandas.read_csv とか pandas.read_excel とかで読み込み放題