LoginSignup
3

More than 3 years have passed since last update.

Google spreadsheet を wget でダウンロードしたい

Last updated at Posted at 2020-04-06

はじめに

  • 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(ランダムな数字)となっている

ダウンロード用のスクリプトを書いた

  • Python3subprocessモジュールを使ってみた
  • 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)

まとめ

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
What you can do with signing up
3