2024年1月21日更新
2024年1月の段階で仕様が変更されたとのご連絡をいただきましたのでこちらも更新させていただきます。元ネタはこちらです。
現在は、下記のURLからGoogle Drive上のパブリックで共有されたファイルをダウンロードできます。この場合、一度のリクエストで大きなサイズのファイルもダウンロードが可能のようです。
https://drive.usercontent.google.com/download?id={fileId}&confirm=xxx
今のところconfirm=xxx
のxxx
は、x
でもy
でもz
でも動作するようです。
curlコマンドは下記のとおりです。
curl "https://drive.usercontent.google.com/download?id={fileId}&confirm=xxx" -o filename
または
curl -L "https://drive.usercontent.google.com/download?id={fileId}&confirm=xxx" -o filename
今回は、昨年末から年始にかけて2度の変更がありましたので、また変更がありましたら更新させていただきます。
概要
この投稿では、Google Drive上の公開されたファイルをダウンロードする方法について紹介させていただきます。
内容
最近、Google Drive上の公開されたファイルをダウンロードする仕様が変更されまして、それに関する問い合わせが届いていますのでので、こちらでも仕様変更後のダウンロード方法について紹介させていただきます。
Google Drive上で公開されたファイルをダウンロードする際、ファイルサイズが小さい場合(40MB以下程度と思われます)は、これまで通り、下記のようなwebContentLink
を使ってダウンロードすることができます。ここではサンプルとしてcurlコマンドを使用します。
$ curl -L "https://drive.google.com/uc?export=download&id=### fileId ###" -o sampleFilename
ところが、ファイルサイズが大きくなると、ファイルのウィルススキャン不可を承認するプロセスを通過する必要があるためにダウンロードを開始するまでに2段階のプロセスが必要になり、上記のコマンドだけではダウンロードすることができません。これまでは、ダウンロードするためのIDを最初にwebContentLink
へリクエストした際に得られるCookieから取得していました。最近この部分が変更され、下記のようにダウンロードするためのIDが返されるHTMLデータに含まれるようになっています。
<form id="downloadForm" action="https://drive.google.com/uc?export=download&id={fileId}&confirm={value for downloading}" method="post">
これをcurlを使ったbashスクリプトで表現すると次のようになります。
fileid="### file id ###"
filename="sampleFilename"
html=`curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}"`
curl -Lb ./cookie "https://drive.google.com/uc?export=download&`echo ${html}|grep -Po '(confirm=[a-zA-Z0-9\-_]+)'`&id=${fileid}" -o ${filename}
2回目のcurlコマンドではCookieを使用しなくてもダウンロードできますが、テストを行っていたところ、Cookieを使用する方がダウンロード速度が速いとの報告を受け、このようにしました。今の時点では上記の方法でGoogle Drive上で公開されたサイズの大きなファイルをダウンロードすることができます。これもまた今後の仕様変更でアップデートする必要があるかもしれません。