はじめに
-
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 とかで読み込み放題