スクリプトでGoogleドライブからファイルをダウンロードしようとしていますが、少し問題があります。ダウンロードしようとしているファイルは here です。
私は広範囲にオンラインで見ました、そして、私はついにそれらのうちの1つをダウンロードさせることに成功しました。私はファイルのUIDを取得し、小さい方のファイル(1.6MB)は問題なくダウンロードできますが、大きい方のファイル(3.7GB)は常にウイルススキャンなしでダウンロードを続行するかどうかを尋ねるページにリダイレクトされます。誰かが私がそのスクリーンを乗り越えるのを手伝ってくれる?
これが私が最初のファイルを動かした方法です -
curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYeDU0VDRFWG9IVUE" > phlat-1.0.tar.gz
他のファイルでも同じように実行すると、
curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM" > index4phlat.tar.gz
リンクの最後から3行目に、ランダムな4文字の文字列である&confirm=JwkK
がありますが、私のURLに確認を追加する方法があることを示唆しています。私が訪れたリンクの1つが&confirm=no_antivirus
を提案しましたが、それはうまくいきません。
私はここの誰かがこれを手伝ってくれることを願っています!
前もって感謝します。
この質問を見てください: Google Drive APIを使用してGoogle Driveから直接ダウンロード
基本的には、パブリックディレクトリを作成し、次のようなものを使って相対参照によってファイルにアクセスする必要があります。
wget https://googledrive.com/Host/LARGEPUBLICFOLDERID/index4phlat.tar.gz
警告:この機能は廃止予定です。下記の警告を参照してください。
あるいは、このスクリプトを使用することができます: https://github.com/circulosmeos/gdown.pl
共有リンク を与えて、GoogleドライブからファイルをダウンロードするPythonスニペットを書きました。動作します、 2017年8月現在 。
切り取られた人はgdriveもGoogle Drive APIも使用していません。 要求 モジュールを使用します。
Googleドライブから大きなファイルをダウンロードするときは、1回のGETリクエストでは不十分です。 2番目のものが必要です、そしてこれはconfirmと呼ばれる特別なURLパラメータを持っています。そして、その値はあるクッキーの値と等しいはずです。
import requests
def download_file_from_google_drive(id, destination):
def get_confirm_token(response):
for key, value in response.cookies.items():
if key.startswith('download_warning'):
return value
return None
def save_response_content(response, destination):
CHUNK_SIZE = 32768
with open(destination, "wb") as f:
for chunk in response.iter_content(CHUNK_SIZE):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
URL = "https://docs.google.com/uc?export=download"
session = requests.Session()
response = session.get(URL, params = { 'id' : id }, stream = True)
token = get_confirm_token(response)
if token:
params = { 'id' : id, 'confirm' : token }
response = session.get(URL, params = params, stream = True)
save_response_content(response, destination)
if __== "__main__":
import sys
if len(sys.argv) is not 3:
print("Usage: python google_drive.py drive_file_id destination_file_path")
else:
# TAKE ID FROM SHAREABLE LINK
file_id = sys.argv[1]
# DESTINATION FILE ON YOUR DISK
destination = sys.argv[2]
download_file_from_google_drive(file_id, destination)
オープンソースのLinux/Unixコマンドラインツール gdrive
を使用できます。
インストールするには:
ダウンロード /バイナリ。 あなたのアーキテクチャに合うもの、例えばgdrive-linux-x64
を選んでください。
パスにコピーしてください。
Sudo cp gdrive-linux-x64 /usr/local/bin/gdrive;
Sudo chmod a+x /usr/local/bin/gdrive;
使用するには:
GoogleドライブのファイルIDを確認します。 そのためには、GoogleドライブのWebサイトで目的のファイルを右クリックし、[リンクを取得]をクリックします。 https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H
のようなものを返します。 ?id=
の後ろの文字列を取得してクリップボードにコピーします。それがファイルのIDです。
ファイルをダウンロードしてください。 もちろん、次のコマンドでは代わりにファイルのIDを使用してください。
gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
最初の使用時に、ツールはGoogle Drive APIへのアクセス許可を取得する必要があります。そのためには、ブラウザでアクセスしなければならないリンクが表示され、それからツールにコピー&ペーストするための確認コードが表示されます。ダウンロードが自動的に始まります。進行状況インジケータはありませんが、ファイルマネージャまたは2台目の端末で進行状況を確認できます。
出典: Tobiによるコメント 別の回答はこちら。
追加のトリック:レート制限。 限られた最大速度でgdrive
を使ってダウンロードするには(ネットワークを圧倒しないようにするには)、このようなコマンドを使用できます(pv
は PipeViewer )
gdrive download --stdout 0B7_OwkDsUIgFWXA1B2FPQfV5S8H | \
pv -br -L 90k | \
cat > file.ext
これは、ダウンロードされたデータ量(-b
)とダウンロード速度(-r
)を表示し、その速度を90 kiB/s(-L 90k
)に制限します。
2019年5月
pip install gdown
file_id
は、0Bz8a_Dbh9QhbNU3SGlFaDgのようになります。
ファイルを右クリックして 共有可能リンクを取得 をクリックすると表示されます。オープンアクセスファイルでテスト済み。私はそれがディレクトリに対して機能するかどうかわからない。 Google Colabでテスト済み。
ggID='put_googleID_here'
ggURL='https://drive.google.com/uc?export=download'
filename="$(curl -sc /tmp/gcokie "${ggURL}&id=${ggID}" | grep -o '="uc-name.*</span>' | sed 's/.*">//;s/<.a> .*//')"
getcode="$(awk '/_warning_/ {print $NF}' /tmp/gcokie)"
curl -Lb /tmp/gcokie "${ggURL}&confirm=${getcode}&id=${ggID}" -o "${filename}"
それはどのように機能しますか?
curlを使ってクッキーファイルとHTMLコードを取得します。
htmlをgrepとsedにパイプしてファイル名を検索します。
awkを使ってクッキーファイルから確認コードを取得します。
最後にcookieを有効にしてファイルをダウンロードし、コードとファイル名を確認します。
curl -Lb /tmp/gcokie "https://drive.google.com/uc?export=download&confirm=Uq6r&id=0B5IRsLTwEO6CVXFURmpQZ1Jxc0U" -o "SomeBigFile.Zip"
あなたがファイル名変数curlを必要としない場合はそれを推測することができます
- Lリダイレクトに従う
- Oリモート名
- Jリモートヘッダ名
curl -sc /tmp/gcokie "${ggURL}&id=${ggID}" >/dev/null
getcode="$(awk '/_warning_/ {print $NF}' /tmp/gcokie)"
curl -LOJb /tmp/gcokie "${ggURL}&confirm=${getcode}&id=${ggID}"
URLからGoogleファイルIDを抽出するには、次のものを使用できます。
echo "gURL" | egrep -o '(\w|-){26,}'
# match more than 26 Word characters
OR
echo "gURL" | sed 's/[^A-Za-z0-9_-]/\n/g' | sed -rn '/.{26}/p'
# replace non-Word characters with new line,
# print only line with more than 26 Word characters
2018年3月現在で更新。
私は自分のファイル(6 GB)をGoogleドライブから私のAWS ec2インスタンスに直接ダウンロードするために他の答えで与えられたさまざまなテクニックを試しましたが、どれもうまくいきません(それらは古いためかもしれません)。
だから、他の人の情報のために、ここで私はそれがうまくやった方法です:
https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing
下記のスクリプトをファイルにコピーしてください。これはcurlを使用してCookieを処理し、ファイルのダウンロードを自動化します。
#!/bin/bash
fileid="FILEIDENTIFIER"
filename="FILENAME"
curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/null
curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${fileid}" -o ${filename}
上記のように、FILEIDENTIFIERをスクリプトに貼り付けます。二重引用符を忘れないでください。
myfile.Zip
)。Sudo chmod +x download-gdrive.sh
でこのコマンドを実行してファイルを実行可能にします。シモンズ:これは上記のスクリプトのGithubの要旨です: https://Gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424
Googleドライブのデフォルトの動作では、ファイルのサイズが大きすぎるとファイルのウイルススキャンが行われ、ユーザーにメッセージが表示され、ファイルをスキャンできなかったことが通知されます。
現時点で私が見つけた唯一の回避策はWebとファイルを共有してWebリソースを作成することです。
Googleドライブのヘルプページから引用します。
Driveを使用すると、HTML、CSS、JavascriptファイルなどのWebリソースをWebサイトとして表示できます。
DriveでWebページをホストするには:
- Drive.google.comでドライブを開き、ファイルを選択します。
- ページ上部の 共有 ボタンをクリックします。
- 共有ボックスの右下隅にある 詳細設定 をクリックします。
- クリック 変更...
- オン - Web上で公開 を選択し、 保存 をクリックします。
- 共有ボックスを閉じる前に、[共有へのリンク]の下のフィールドにあるURLからドキュメントIDをコピーします。文書IDは、URL内のスラッシュ間の大文字と小文字、および数字のストリングです。
- "www.googledrive.com/Host/[doc id]のようなURLを共有します。ここで、[doc id]はステップ6でコピーした文書IDに置き換えられます。
誰でもあなたのウェブページを閲覧することができます。
ここにあります: https://support.google.com/drive/answer/2881970?hl=ja
たとえば、Googleドライブでファイルを一般公開している場合、共有リンクは次のようになります。
https://drive.google.com/file/d/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U/view?usp=sharing
次に、ファイルIDをコピーして、次のようなgoogledrive.comリンクを作成します。
https://www.googledrive.com/Host/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U
これを簡単に行う方法は次のとおりです。
リンクが共有されていることを確認してください。そうすれば次のようになります。
https://drive.google.com/open?id=FILEID&authuser=0
それから、そのFILEIDをコピーして次のように使用します。
wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O FILENAME
(あなたが一回限りのダウンロードのためにそれを必要とするだけなら)
あなたは次のようなものになってしまうはずです。
curl 'https://doc-0s-80-docs.googleusercontent.com/docs/securesc/aa51s66fhf9273i....................blah blah blah...............gEIqZ3KAQ==' --compressed
それをあなたのコンソールに貼り付け、最後に> my-file-name.extension
を追加し(そうでなければファイルをあなたのコンソールに書き込みます)、それからenter:を押してください:)
Roshan Sethiaからの回答に基づく
2018年5月
_ wget _ :を使う
以下のようにwgetgdrive.shというシェルスクリプトを作成します。
#!/bin/bash
# Get files from Google Drive
# $1 = file ID
# $2 = file name
URL="https://docs.google.com/uc?export=download&id=$1"
wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate $URL -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=$1" -O $2 && rm -rf /tmp/cookies.txt
スクリプトを実行するための適切な権限を与えます。
ターミナルで、以下を実行します。
./wgetgdrive.sh <file ID> <filename>
例えば:
./wgetgdrive.sh 1lsDPURlTNzS62xEOAIG98gsaW6x2PYd2 images.Zip
2016年12月( source )の時点で私には何が有効なのかという答えはありません。
curl -L https://drive.google.com/uc?id={FileID}
googleドライブファイルがリンクを持つファイルと共有されており、{FileID}
が共有URLの?id=
の後ろの文字列である場合。
私は大きなファイルを調べませんでしたが、知っておくと便利かもしれません。
Googleドライブでも同じ問題がありました。
これがLinks 2を使って問題を解決する方法です。
PC上でブラウザを開き、Googleドライブのファイルに移動します。ファイルに公開リンクを付けます。
パブリックリンクをクリップボードにコピーします(右クリック、リンクアドレスのコピーなど)。
ターミナルを開きます。別のPC /サーバー/マシンにダウンロードしている場合は、この時点でSSHで接続する必要があります。
Links 2をインストールします(debian/ubuntuメソッド、あなたのディストリビューションまたはOSと同等のものを使います)
Sudo apt-get install links2
端末にリンクを貼り付けて、「リンク」で次のように開きます。
links2 "paste url here"
矢印キーを使用してリンク内のダウンロードリンクに移動し、を押します。 Enter
ファイル名を選択するとファイルがダウンロードされます
--UPDATED--
ファイルをダウンロードするには、まずここからyoutube-dl
パッケージを入手してください。
youtube-dl: https://rg3.github.io/youtube-dl/download.html
またはpip
を付けてインストールします。
Sudo python2.7 -m pip install --upgrade youtube_dl /// Sudo python3.6 -m pip install --upgrade youtube_dl
更新:
私はちょうどこれを見つけました:
Drive.google.comからダウンロードしたいファイルを右クリックします。
Get Sharable link
をクリック
Link sharing on
をオンにする
Sharing settings
をクリック
オプションの一番上のドロップダウンをクリックしてください
詳細をクリック
[x] On - Anyone with a link
を選択
リンクをコピーする
https://drive.google.com/file/d/3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR/view?usp=sharing
(This is not a real file address)
https://drive.google.com/file/d/
の後にIDをコピーします。
3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
これをコマンドラインに貼り付けます。
youtube-dl https://drive.google.com/open?id=
Idをopen?id=
の後ろに貼り付けます
youtube-dl https://drive.google.com/open?id=3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
[GoogleDrive] 3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR: Downloading webpage
[GoogleDrive] 3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR: Requesting source file
[download] Destination: your_requested_filename_here-3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR
[download] 240.37MiB at 2321.53MiB/s (00:01)
それが役に立てば幸い
Go: drive で書かれた、オープンソースのマルチプラットフォームクライアントがあります。それは非常に素晴らしいとフル機能であり、そしてまた活発に開発中です。
$ drive help pull
Name
pull - pulls remote changes from Google Drive
Description
Downloads content from the remote drive or modifies
local content to match that on your Google Drive
Note: You can skip checksum verification by passing in flag `-ignore-checksum`
* For usage flags: `drive pull -h`
youtube-dl を使用してください。
youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890
直接ダウンロードURLを取得するために--get-url
を渡すこともできます。
最も簡単な方法は次のとおりです。
wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=FILEID" -O FILENAME && rm -rf /tmp/cookies.txt
これが私が書いた小さなbashスクリプトです。それは大きなファイルで動作し、部分的にフェッチされたファイルも再開することができます。 2つの引数を取ります。最初の引数はfile_idで、2番目の引数は出力ファイルの名前です。ここでの以前の回答に対する主な改善点は、大きなファイルで動作し、一般的に利用可能なツール(bash、curl、tr、grep、du、cut、およびmv)のみを必要とすることです。
#!/usr/bin/env bash
fileid="$1"
destination="$2"
# try to download the file
curl -c /tmp/cookie -L -o /tmp/probe.bin "https://drive.google.com/uc?export=download&id=${fileid}"
probeSize=`du -b /tmp/probe.bin | cut -f1`
# did we get a virus message?
# this will be the first line we get when trying to retrive a large file
bigFileSig='<!DOCTYPE html><html><head><title>Google Drive - Virus scan warning</title><meta http-equiv="content-type" content="text/html; charset=utf-8"/>'
sigSize=${#bigFileSig}
if (( probeSize <= sigSize )); then
virusMessage=false
else
firstBytes=$(head -c $sigSize /tmp/probe.bin)
if [ "$firstBytes" = "$bigFileSig" ]; then
virusMessage=true
else
virusMessage=false
fi
fi
if [ "$virusMessage" = true ] ; then
confirm=$(tr ';' '\n' </tmp/probe.bin | grep confirm)
confirm=${confirm:8:4}
curl -C - -b /tmp/cookie -L -o "$destination" "https://drive.google.com/uc?export=download&id=${fileid}&confirm=${confirm}"
else
mv /tmp/probe.bin "$destination"
fi
これは2017年11月の時点で動作します https://Gist.github.com/ppetraki/258ea8240041e19ab258a736781f06db
#!/bin/bash
SOURCE="$1"
if [ "${SOURCE}" == "" ]; then
echo "Must specify a source url"
exit 1
fi
DEST="$2"
if [ "${DEST}" == "" ]; then
echo "Must specify a destination filename"
exit 1
fi
FILEID=$(echo $SOURCE | rev | cut -d= -f1 | rev)
COOKIES=$(mktemp)
CODE=$(wget --save-cookies $COOKIES --keep-session-cookies --no-check-certificate "https://docs.google.com/uc?export=download&id=${FILEID}" -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/Code: \1\n/p')
# cleanup the code, format is 'Code: XXXX'
CODE=$(echo $CODE | rev | cut -d: -f1 | rev | xargs)
wget --load-cookies $COOKIES "https://docs.google.com/uc?export=download&confirm=${CODE}&id=${FILEID}" -O $DEST
rm -f $COOKIES
GoogleドライブからGoogle Cloud Linuxシェルにダウンロードファイルを作成した回避策は次のとおりです。
googledrive.com/Host/ [ID]
wget https://googledrive.com/Host/[ID]
mv [ID] 1.Zip
解凍する
ファイルを入手します。
このゴミをいじった後。私はchrome - developer toolsを使って私の甘いファイルをダウンロードする方法を見つけました。
右クリック - >コピー - >カールとしてコピー
-o
を追加してください。 curl 'https://docs.google.com/spreadsheets/d/1Cjsryejgn29BDiInOrGZWvg/export?format=xlsx&id=1Cjsryejgn29BDiInOrGZWvg' -H 'authority: docs.google.com' -H 'upgrade-insecure-requests: 1' -H 'user-agent: Mozilla/5.0 (X..... -o server.xlsx
解決しました!
あなただけのwgetを使用する必要があります。
https://drive.google.com/uc?authuser=0&id=[your ID without brackets]&export=download
PDファイルは公開されている必要があります。
2018年5月WORKING
こんにちはこのコメントに基づいて...私はファイルからURLのリストをエクスポートするためのbashを作成します URLS.txt URLS_DECODED.txt flashgetのようなアクセラレータで使用される(私は使用します) cygwinはwindowsとlinuxを組み合わせる
ダウンロードを避け、最終リンクを(直接)取得するためにコマンドスパイダーが導入されました
コマンドGREP HEADとカット、最終リンクの処理と取得、スペイン語を基にした、多分あなたは英語への移植かもしれません
echo -e "$URL_TO_DOWNLOAD\r"
はおそらく\ rがcywinのみであり、\ nに置き換えなければなりません(改行)
**********user***********
はユーザーフォルダです
*******Localización***********
はスペイン語で書かれています。アスタリスクを取り除き、Wordを英語の場所にし、THE HEADとCUT番号を適切なアプローチに適応させます。
rm -rf /home/**********user***********/URLS_DECODED.txt
COUNTER=0
while read p; do
string=$p
hash="${string#*id=}"
hash="${hash%&*}"
hash="${hash#*file/d/}"
hash="${hash%/*}"
let COUNTER=COUNTER+1
echo "Enlace "$COUNTER" id="$hash
URL_TO_DOWNLOAD=$(wget --spider --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id='$hash -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id="$hash 2>&1 | grep *******Localización***********: | head -c-13 | cut -c16-)
rm -rf /tmp/cookies.txt
echo -e "$URL_TO_DOWNLOAD\r" >> /home/**********user***********/URLS_DECODED.txt
echo "Enlace "$COUNTER" URL="$URL_TO_DOWNLOAD
done < /home/**********user***********/URLS.txt
私はこれに対する実用的な解決策を見つけました...単に以下を使ってください
wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1HlzTR1-YVoBPlXo0gMFJ_xY4ogMnfzDi' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1HlzTR1-YVoBPlXo0gMFJ_xY4ogMnfzDi" -O besteyewear.Zip && rm -rf /tmp/cookies.txt
もっと簡単な方法があります。
Firefox/chromeエクステンションからcliget/CURLWGETをインストールしてください。
ブラウザからファイルをダウンロードしてください。これは、ファイルのダウンロード中に使用されたクッキーとヘッダを記憶するcurl/wgetリンクを作成します。ダウンロードするには、任意のシェルからこのコマンドを使用します。
共有リンクを取得し、シークレットで開きます(非常に重要です)。スキャンできないと言うでしょう。
インスペクタを開き、ネットワークトラフィックを追跡します。 「とにかくダウンロード」ボタンをクリックしてください。
最後のリクエストのURLをコピーします。これはあなたのリンクです。 wgetでそれを使ってください。
skicka は、Googleドライブからアクセスファイルをアップロード、ダウンロードするためのcliツールです。
例 -
skicka download /Pictures/2014 ~/Pictures.copy/2014
10 / 10 [=====================================================] 100.00 %
skicka: preparation time 1s, sync time 6s
skicka: updated 0 Drive files, 10 local files
skicka: 0 B read from disk, 16.18 MiB written to disk
skicka: 0 B uploaded (0 B/s), 16.18 MiB downloaded (2.33 MiB/s)
skicka: 50.23 MiB peak memory used
2018年5月
Google Driveからファイルをダウンロードするためにcurl
を使用する場合は、ドライブ内のファイルIDに加えて、Google Drive API用のOAuth2 access_token
も必要です。トークンを取得するには、Google APIフレームワークに関するいくつかの手順が必要です。 Googleとの申し込み手順は(現在)無料です。
OAuth2のaccess_tokenはあらゆる種類のアクティビティを許可する可能性があるので、注意してください。また、トークンはしばらく(1時間?)経過するとタイムアウトしますが、誰かがそれを捉えた場合に悪用を防ぐのに十分なほど短くはありません。
Access_tokenとファイルIDを取得したら、これでうまくいきます。
AUTH="Authorization: Bearer the_access_token_goes_here"
FILEID="fileid_goes_here"
URL=https://www.googleapis.com/drive/v3/files/$FILEID?alt=media
curl --header "$AUTH" $URL >myfile.ext
pythonスクリプトとGoogleドライブAPIを使用してこれを行いました。このスニペットを試すことができます。
//using chunk download
file_id = 'someid'
request = drive_service.files().get_media(fileId=file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print "Download %d%%." % int(status.progress() * 100)