wget / curl ไฟล์ขนาดใหญ่จาก google ไดรฟ์


306

ฉันพยายามดาวน์โหลดไฟล์จาก google ไดรฟ์ในสคริปต์และฉันมีปัญหาเล็กน้อยในการทำเช่นนั้น ไฟล์ที่ฉันพยายามที่จะดาวน์โหลดได้ที่นี่

ฉันดูออนไลน์อย่างกว้างขวางและในที่สุดฉันก็สามารถดาวน์โหลดหนึ่งไฟล์ได้ ฉันได้รับ 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

ฉันได้รับผลลัพธ์ต่อไปนี้ - ป้อนคำอธิบายรูปภาพที่นี่

ฉันสังเกตเห็นว่าบรรทัดที่สามถึงสุดท้ายในลิงค์มี&confirm=JwkKสตริงตัวอักษร 4 ตัวแบบสุ่ม แต่แนะนำว่ามีวิธีเพิ่มการยืนยันใน URL ของฉัน ลิงก์ใดลิงก์หนึ่งที่ฉันเยี่ยมชมแนะนำ&confirm=no_antivirusแต่นั่นไม่ทำงาน

ฉันหวังว่าบางคนที่นี่สามารถช่วยได้!


คุณสามารถให้ข้อมูลที่curl scriptคุณเคยใช้ในการดาวน์โหลดไฟล์ได้google driveเนื่องจากฉันไม่สามารถดาวน์โหลดไฟล์ทำงาน (ภาพ) จากสคริปต์นี้curl -u username:pass https://drive.google.com/open?id=0B0QQY4sFRhIDRk1LN3g2TjBIRU0 >image.jpg
Kasun Siyambalapitiya

ดูคำตอบที่ยอมรับ ฉันใช้สคริปต์ gdown.plgdown.pl https://drive.google.com/uc?export=download&confirm=yAjx&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM index4phlat.tar.gz
Arjun

2
อย่ากลัวที่จะเลื่อน! คำตอบนี้ให้สคริปต์ python ที่ดีสำหรับการดาวน์โหลดในครั้งเดียว
Ciprian Tomoiagă

./gdrive download [FILEID] [- เรียกคืนหากโฟลเดอร์] มันจะขอให้คุณเข้าถึง URL ที่กำหนดและคัดลอกวางรหัสโทเค็น
roj4s

ตรวจสอบสรุปสาระ
Ankit Mundada

คำตอบ:


59

คำเตือน : ฟังก์ชันนี้เลิกใช้แล้ว ดูคำเตือนด้านล่างในความคิดเห็น


ดูคำถามนี้: ดาวน์โหลดโดยตรงจาก Google Drive โดยใช้ Google Drive API

โดยทั่วไปคุณต้องสร้างไดเรกทอรีสาธารณะและเข้าถึงไฟล์ของคุณโดยการอ้างอิงแบบสัมพันธ์กับสิ่งที่ต้องการ

wget https://googledrive.com/host/LARGEPUBLICFOLDERID/index4phlat.tar.gz

หรือคุณสามารถใช้สคริปต์นี้: https://github.com/circulosmeos/gdown.pl


5
วิธีที่ดีอีกประการหนึ่งคือการใช้คำสั่ง linux เครื่องมือบรรทัด "GDrive" github.com/prasmussen/gdrive
Tobi

1
ฉันสามารถใช้สคริปต์ perl ของ Nanolx ร่วมกับ Permalink ของไดรฟ์ google ที่สร้างขึ้นที่gdurl.com - ขอบคุณ!
jadik

14
คำเตือน: การสนับสนุนเว็บโฮสติ้งใน Google Drive เลิกใช้แล้ว "ตั้งแต่วันที่ 31 สิงหาคม 2558 เว็บโฮสติ้งใน Google ไดรฟ์สำหรับผู้ใช้และนักพัฒนาจะถูกเลิกใช้ลูกค้า Google Apps สามารถใช้คุณสมบัตินี้ต่อไปได้เป็นระยะเวลาหนึ่งปีจนถึง 31 สิงหาคม 2559 เมื่อแสดงเนื้อหาผ่าน googledrive.com/host / doc id จะถูกยกเลิก " googleappsupdates.blogspot.com/2015/08/…
chrish

9
น่าเสียดายที่มันใช้งานไม่ได้อีกต่อไปตั้งแต่ปี 2018
Calimo

2
gdown.pl ใช้งานได้ดีสำหรับฉันเช่นกัน การดูสคริปต์อย่างรวดเร็วแสดงให้เห็นว่าไม่ได้ใช้ API นั้นมันจะสร้าง URL ใหม่พร้อมพารามิเตอร์export=downloadดังนั้นจึงควรเป็นสิ่งที่ดีสำหรับอนาคตอันใกล้เว้นแต่ Google จะเปลี่ยนรูปแบบ URL นั้น
Ben Baron

232

มิถุนายน 2563

file_idควรมีลักษณะบางอย่างเช่น 0Bz8a_Dbh9QhbNU3SGlFaDg

คุณสามารถรับมันได้โดยคลิกขวาที่ไฟล์แล้วรับลิงค์ที่แชร์ได้ ใช้งานได้เฉพาะไฟล์ที่เปิด (ทุกคนที่มีลิงก์สามารถดูได้) ไม่ทำงานสำหรับไดเรกทอรี ผ่านการทดสอบบน Google Colab ทำงานได้ดีที่สุดในการดาวน์โหลดไฟล์ ใช้ tar / zip เพื่อทำให้เป็นไฟล์เดียว

ตัวอย่าง: เพื่อดาวน์โหลดไฟล์ readme จากไดเรกทอรีนี้

gdown https://drive.google.com/uc?id=0B7EVK8r0v71pOXBhSUdJWU1MYUk

9
เพียงแค่ลบออกexport=download&จากgdown https://drive.google.com/uc?export=download&id=your_file_idและมันก็ทำงานเหมือนมีเสน่ห์
Saravanabalagi Ramachandran

8
อันนี้ใช้ได้ในเดือนกรกฎาคม 2561! อย่าลืมแชร์ไฟล์และหากคุณมีลิงก์เป็นdrive.google.com/open?id=FILE_IDเพียงแทนที่ "open" ด้วย "uc" และเพียงแค่ลดระดับdrive.google.com/uc?id=FILE_ID
simo23

7
เราจะดาวน์โหลดโฟลเดอร์จาก Gdrive โดยใช้ gdown ได้อย่างไร
user1

7
ใช้งานไม่ได้ตั้งแต่เดือนสิงหาคม 2019 ข้อผิดพลาด: "การอนุญาตถูกปฏิเสธ: drive.google.com/uc?id=0B7EVK8r0v71pWEZsZE9oNnFzTm8คุณอาจต้องเปลี่ยนการอนุญาตผ่าน 'ใครก็ตามที่มีลิงก์'?" และเป็นชุดข้อมูล CelebA ที่สามารถดาวน์โหลดได้แบบสาธารณะดังนั้นจึงควรมีการตกลง ฉันได้รับลิงก์ดาวน์โหลดโดยคลิก 'รับลิงค์ที่แชร์ได้' จากนั้นจะบอกว่า 'แชร์ลิงค์ใน' และ 'ทุกคนที่มีลิงก์สามารถดูได้' ดังนั้นดูเหมือนว่าสิทธิ์จะได้รับแล้ว แต่ข้อผิดพลาดบอกว่าการอนุญาตถูกปฏิเสธ นี่คือไซต์โฮสต์หากคุณต้องการทดลองใช้: mmlab.ie.cuhk.edu.hk/projects/CelebA.html
Kristof

6
นี่เป็นทางออกเดียวจากครึ่งโหลที่ฉันลองใช้ จะต้องมีการ upvoted ไปก่อน ฉันต้องการเปลี่ยน 'ลิงก์ที่ใช้ร่วมกัน' จาก: drive.google.com/open?id=XXXX เป็น drive.google.com/uc?id=XXXX
deprekate

194

ผมเขียนหลาม snippet ดาวน์โหลดว่าไฟล์จาก Google ไดรฟ์ได้รับการเชื่อมโยงร่วมกันได้ มันทำงานณ สิงหาคม 2017

snipped ไม่ได้ใช้gdriveหรือ Google Drive API มันใช้โมดูลคำขอ

เมื่อดาวน์โหลดไฟล์ขนาดใหญ่จาก Google Drive คำขอ GET เดียวไม่เพียงพอ จำเป็นต้องมีอันที่สองและอันนี้มีพารามิเตอร์ 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 __name__ == "__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)

python snippet.py file_id destinationผมใช้ข้อมูลโค้ด นี่เป็นวิธีที่ถูกต้องในการใช้งานหรือไม่ สาเหตุถ้าปลายทางคือโฟลเดอร์ที่ฉันโยนข้อผิดพลาด ถ้าฉันใช้ไฟล์และใช้มันเป็นปลายทางข้อมูลโค้ดดูเหมือนว่าจะทำงานได้ดี แต่ก็ไม่ทำอะไรเลย
Manfredo

2
@Manfredo คุณต้องการชื่อไฟล์ที่คุณต้องการบันทึกไฟล์เช่น $ python snippet.py your_google_file_id /your/full/path/and/filename.xlsx ทำงานให้ฉัน ในกรณีที่ใช้งานไม่ได้คุณได้เตรียมการอะไรไว้บ้างหรือไม่? ไฟล์ใดถูกสร้างขึ้น?
Jeff

1
@CiprianTomoiaga ฉันมี 90% ของแถบความคืบหน้าในการทำงานโดยใช้โมดูล tqdm Python ฉันทำสรุปสาระสำคัญดังนี้gist.github.com/joshtch/8e51c6d40b1e3205d1bb2eea18fb57ae น่าเสียดายที่ฉันไม่พบวิธีที่เชื่อถือได้ในการรับขนาดไฟล์ทั้งหมดซึ่งคุณจะต้องใช้ในการคำนวณ% ความคืบหน้าและเวลาดำเนินการโดยประมาณ
joshtch

นอกจากนี้โมดูลการร้องขอจะใช้ในการเข้าถึง Google ไดรฟ์ OAuth ตัวอย่างเช่นการจัดการกับโค้ดข้างต้นของคุณอยู่ที่ไหน - requests-oauthlib.readthedocs.io/en/latest/ ...... ?
tauseef_CuriousGuy

7
นี่มันเจ๋งมาก! นี่คือเคล็ดลับสำหรับ drive_File_ID: https // drive.google.com / file / d / "drive_File_ID" / view - ระหว่าง https ~~ ไฟล์ / d / และ / ดูลิงค์ดาวน์โหลด
Jaeyoung Lee

70

คุณสามารถใช้โอเพนซอร์ส Linux / Unix gdriveเครื่องมือบรรทัดคำสั่ง

วิธีติดตั้ง:

  1. ดาวน์โหลดไบนารี่ gdrive-linux-x64เลือกหนึ่งที่เหมาะกับสถาปัตยกรรมของคุณตัวอย่างเช่น

  2. คัดลอกไปยังเส้นทางของคุณ

    sudo cp gdrive-linux-x64 /usr/local/bin/gdrive;
    sudo chmod a+x /usr/local/bin/gdrive;
    

วิธีใช้:

  1. กำหนดรหัสไฟล์ Google Drive เพื่อให้คลิกขวาไฟล์ที่ต้องการในเว็บไซต์ Google Drive และเลือก "รับลิงค์ ... " https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8Hมันจะกลับมาบางอย่างเช่น รับสตริงที่อยู่เบื้องหลัง?id=และคัดลอกไปยังคลิปบอร์ดของคุณ นั่นคือ ID ของไฟล์

  2. ดาวน์โหลดไฟล์ แน่นอนใช้ ID ไฟล์ของคุณแทนในคำสั่งต่อไปนี้

    gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
    

เมื่อใช้งานครั้งแรกเครื่องมือจะต้องได้รับสิทธิ์การเข้าถึง Google Drive API เพื่อที่จะแสดงลิงค์ที่คุณต้องเข้าชมในเบราว์เซอร์แล้วคุณจะได้รับรหัสยืนยันเพื่อคัดลอกและวางกลับไปที่เครื่องมือ การดาวน์โหลดจะเริ่มขึ้นโดยอัตโนมัติ ไม่มีตัวบ่งชี้ความคืบหน้า แต่คุณสามารถสังเกตเห็นความคืบหน้าในตัวจัดการไฟล์หรือเทอร์มินัลที่สอง

ที่มา: ความคิดเห็นโดย Tobiในคำตอบอื่นที่นี่

 

เคล็ดลับเพิ่มเติม: จำกัด อัตรา หากต้องการดาวน์โหลดด้วยgdriveอัตราสูงสุดที่ จำกัด (เพื่อไม่ให้ล้นเครือข่าย ... ) คุณสามารถใช้คำสั่งเช่นนี้ ( pvคือPipeViewer ):

gdrive download --stdout 0B7_OwkDsUIgFWXA1B2FPQfV5S8H | \
  pv -br -L 90k | \
  cat > file.ext

นี่จะแสดงจำนวนข้อมูลที่ดาวน์โหลด ( -b) และอัตราการดาวน์โหลด ( -r) และ จำกัด อัตรานั้นไว้ที่ 90 kiB / s ( -L 90k)


ข้อความแสดงข้อผิดพลาด: "ขีด จำกัด รายวันสำหรับการใช้ที่ไม่ผ่านการตรวจสอบความถูกต้องมากเกินไปการใช้ต่อเนื่องต้องมีการลงชื่อสมัครใช้" รหัส: 403
Nianliang

@Nianliang ยังไม่พบสิ่งนี้ แต่นี่เป็นสิ่งที่เดาได้: คุณใช้ gdrive เพื่อดาวน์โหลดไฟล์ที่สาธารณชนสามารถเข้าถึงได้ดังนั้นมันจะไม่ขอการรับรองความถูกต้องตั้งแต่การใช้ครั้งแรก ลองใช้ไฟล์ที่ไม่ใช่แบบสาธารณะก่อนตรวจสอบว่าการรับรองความถูกต้องสำเร็จ (ดังอธิบายในคำตอบ: "ในการใช้ครั้งแรก, ... ") มันช่วยได้ไหม
tanius

3
ไม่สามารถรับรหัสยืนยันได้ รับข้อผิดพลาด "ลงชื่อเข้าใช้ด้วย Google ปิดการใช้งานชั่วคราวสำหรับแอพนี้แอพนี้ยังไม่ได้รับการยืนยันโดย Google เพื่อใช้งาน Google Sign In"
useranon

1
ข้อความแสดงข้อผิดพลาดเดียวกันที่นี่: "แอปนี้ยังไม่ได้รับการยืนยันโดย Google เพื่อใช้ Google เข้าสู่ระบบ"
gebbissimo

1
@useranon: ลองใช้วิธีนี้: github.com/gdrive-org/gdrive/issues/533#issuecomment-596336395คุณต้องสร้างบัญชีบริการของ Google และแชร์ไฟล์ / โฟลเดอร์ด้วยที่อยู่บัญชีบริการนี้ ฉันทำมัน ทำงานตั้งแต่วันที่ 04/17/2020!
Whyisyoung

52
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}"  

มันทำงานยังไง?
รับไฟล์คุกกี้และรหัส html ด้วย curl
ไพพ์ html เป็น grep และ sed แล้วค้นหาชื่อไฟล์
รับรหัสยืนยันจากไฟล์คุกกี้ด้วย awk
สุดท้ายดาวน์โหลดไฟล์โดยเปิดใช้งานคุกกี้ยืนยันรหัสและชื่อไฟล์

curl -Lb /tmp/gcokie "https://drive.google.com/uc?export=download&confirm=Uq6r&id=0B5IRsLTwEO6CVXFURmpQZ1Jxc0U" -o "SomeBigFile.zip"

หากคุณไม่ต้องการตัวแปรชื่อไฟล์ม้วนงอสามารถเดาได้
-L ติดตามการเปลี่ยนเส้นทาง
-O Remote-name
-J Remote-header-name

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}" 

หากต้องการแยกรหัสไฟล์ google จาก URL คุณสามารถใช้:

echo "gURL" | egrep -o '(\w|-){26,}'  
# match more than 26 word characters  

หรือ

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 

ทำได้ดีมาก กำจัดคำเตือนไวรัสในไฟล์ 5GB + เมื่อคำตอบอื่น ๆ ล้มเหลว

1
มันยอดเยี่ยมมาก ฉันต้องเพิ่ม--insecureตัวเลือกให้กับคำขอ curl ทั้งสองเพื่อให้ใช้งานได้
Taylor R

@lapinpt ฉันจะเพิ่มฟังก์ชันการทำงาน RESUME ได้อย่างไร
steven7mwesigwa

เราสามารถกำจัด google id ได้ไหมถ้าเรามีลิงค์สาธารณะไปยังไฟล์?
45490 oarfish

42

อัปเดตข้อมูล ณ เดือนมีนาคม 2561

ฉันลองใช้เทคนิคต่าง ๆ ที่ให้ไว้ในคำตอบอื่น ๆ ในการดาวน์โหลดไฟล์ของฉัน (6 GB) โดยตรงจากไดรฟ์ของ Google ไปยังอินสแตนซ์ AWS ec2 ของฉัน แต่ไม่สามารถใช้งานได้ (อาจเป็นเพราะพวกเขาแก่)

ดังนั้นสำหรับข้อมูลของคนอื่น ๆ นี่คือวิธีที่ฉันทำมันสำเร็จ:

  1. คลิกขวาที่ไฟล์ที่คุณต้องการดาวน์โหลดคลิกแชร์ภายใต้ส่วนการแชร์ลิงก์เลือก "ใครก็ตามที่มีลิงค์นี้สามารถแก้ไขได้"
  2. คัดลอกลิงค์ ควรอยู่ในรูปแบบนี้:https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing
  3. คัดลอกส่วน FILEIDENTIFIER จากลิงก์
  4. คัดลอกสคริปต์ด้านล่างไปยังไฟล์ มันใช้ curl และประมวลผลคุกกี้เพื่อทำการดาวน์โหลดไฟล์โดยอัตโนมัติ

    #!/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}
    
  5. ดังที่แสดงด้านบนวาง FILEIDENTIFIER ในสคริปต์ อย่าลืมรักษาคำพูดคู่!

  6. ระบุชื่อไฟล์แทน FILENAME อย่าลืมเก็บเครื่องหมายคำพูดคู่ไว้และรวมส่วนขยายไว้ใน FILENAME (เช่นmyfile.zip)
  7. ตอนนี้ให้บันทึกไฟล์และทำให้ไฟล์นั้นทำงานได้โดยการรันคำสั่งนี้ในเทอร์มินัล sudo chmod +x download-gdrive.shterminal
  8. เรียกใช้สคริปต์โดยใช้ `./download-gdrive.sh"

PS: นี่คือส่วนสำคัญ Github สำหรับสคริปต์ที่ระบุด้านบน: https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424


สำหรับ wget แทนที่-cด้วย--save-cookiesและ-bด้วย--load-cookies
untore

3
ยืนยันว่าสิ่งนี้ใช้ได้ผลสำหรับฉัน👍แก้ไขเล็กน้อยเพื่อความชัดเจน
Jeff Atwood

1
ทำงานได้ในเดือนมกราคม 2019 ฉันต้องการเพิ่ม"เครื่องหมายคำพูด${filename}ในบรรทัดสุดท้าย
Jimbo

> เรียกใช้สคริปต์โดยใช้./download-gdrive.sh" Do not be like me and try to run the script by typing download-gdrive.sh , the . / `ดูเหมือนจะเป็นข้อบังคับ
Ambroise Rabier

ทำงานในเดือนพฤษภาคม 2019
Kshitij Bajracharya

29

นี่เป็นวิธีที่รวดเร็วในการทำเช่นนี้

ตรวจสอบให้แน่ใจว่ามีการแชร์ลิงก์และจะมีลักษณะดังนี้

https://drive.google.com/open?id=FILEID&authuser=0

จากนั้นคัดลอกไฟล์นั้นและใช้มันเช่นนี้

wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O FILENAME

2
สวัสดีขอบคุณสำหรับการตอบกลับ หากคุณดูไฟล์บนลิงค์ที่ฉันแชร์คุณจะเห็นว่าในขณะที่แชร์ไฟล์พวกเขาจะไม่มีแท็ก 'authuser = 0' ในลิงก์ วิธีการของคุณใช้ไม่ได้กับไฟล์ที่ให้! Arjun
Arjun

2
ไม่ได้ลองใช้การเข้าถึงสาธารณะไฟล์นี้ใช้ได้ดีสำหรับไฟล์ที่แชร์แบบลิงก์เท่านั้น ใช้มันแบบนี้:wget 'https://docs.google.com/uc?export=download&id=SECRET_ID' -O 'filename.pdf'
Sampo Sarrala - codidact.org

ใช้งานไม่ได้ในปี 2018 ฉันได้รับเว็บเพจสแกนไวรัสป้องกันไวรัสแทนไฟล์
Calimo

7
มันทะลุสแกนเนอร์ป้องกันไวรัสสำหรับผมในปี 2018 เมื่อใช้กับธงชาติ-r wgetดังนั้นจึงเป็นwget --no-check-certificate -r 'https://docs.google.com/uc?export=download&id=FILE_ID' -O 'filename'
Artem Pelenitsyn

1
ทำงานให้ฉันตั้งแต่วันที่ 10/2019 และเป็นโซลูชั่นที่สมบูรณ์แบบสำหรับฉันที่จะนำไฟล์ไปสู่คอนเทนเนอร์ Docker ที่ใช้งานอยู่ซึ่งแทบไม่มีแอพพลิเคชั่นยูทิลิตี้ทำงานอยู่เลย
ammills01

23

พฤติกรรมเริ่มต้นของ google ไดรฟ์คือการสแกนไฟล์เพื่อหาไวรัสหากไฟล์มีขนาดใหญ่จะเป็นการแจ้งให้ผู้ใช้ทราบและแจ้งให้เขาทราบว่าไฟล์นั้นไม่สามารถสแกนได้

ในขณะที่วิธีแก้ปัญหาเดียวที่ฉันพบคือการแบ่งปันไฟล์กับเว็บและสร้างทรัพยากรเว็บ

อ้างอิงจากหน้าความช่วยเหลือของ Google ไดรฟ์:

ด้วยไดรฟ์คุณสามารถสร้างแหล่งข้อมูลบนเว็บเช่นไฟล์ HTML, CSS และ Javascript ซึ่งสามารถดูได้ในเว็บไซต์

ในการโฮสต์เว็บเพจด้วยไดรฟ์:

  1. เปิด Drive ที่ drive.google.com แล้วเลือกไฟล์
  2. คลิกปุ่มแบ่งปันที่ด้านบนของหน้า
  3. คลิกขั้นสูงที่มุมล่างขวาของกล่องแชร์
  4. คลิกเปลี่ยน ....
  5. เลือกเปิด - สาธารณะบนเว็บและคลิกบันทึก
  6. ก่อนปิดกล่องแชร์ให้คัดลอก ID เอกสารจาก URL ในฟิลด์ด้านล่าง "ลิงก์เพื่อแชร์" ID เอกสารคือสตริงของตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กและตัวเลขระหว่างเครื่องหมายทับใน URL
  7. แบ่งปัน URL ที่ดูเหมือน "www.googledrive.com/host/ [รหัส id] ที่ซึ่ง [doc id] ถูกแทนที่ด้วย ID เอกสารที่คุณคัดลอกในขั้นตอนที่ 6
    ตอนนี้ทุกคนสามารถดูหน้าเว็บของคุณได้

พบได้ที่นี่: https://support.google.com/drive/answer/2881970?hl=th

ตัวอย่างเช่นเมื่อคุณแชร์ไฟล์บน google ไดรฟ์ต่อสาธารณชน sharelink จะมีลักษณะเช่นนี้:

https://drive.google.com/file/d/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U/view?usp=sharing

จากนั้นคุณคัดลอกรหัสไฟล์และสร้างลิงค์ googledrive.com ที่มีลักษณะดังนี้:

https://www.googledrive.com/host/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U

1
@ FıratKÜÇÜKคุณแน่ใจหรือไม่ว่าคุณมีรูปแบบ URL ที่ถูกต้อง (จดบันทึก www.googledrive.com และไม่ใช่ drive.google.com) ฉันลองแล้วใช้งานได้
Charles Forest

ไฟล์ของฉันมีขนาดเกิน 50 MB มันขอให้ยืนยันการสแกนไวรัส ดังนั้นการแก้ปัญหาไม่เหมาะสำหรับกรณีของฉัน ฉันใช้โซลูชันแอปพลิเคชันคอนโซล "gdrive" แทน
FıratKÜÇÜK

@ FıratKÜÇÜKฉันเพิ่งจะดาวน์โหลดไฟล์ 200+ Mb ด้วยวิธีการนี้ซึ่งปกติแล้วจะทำการตรวจสอบไวรัส ฉันได้รับ ID จากการคลิกขวา> "รับลิงค์ที่แชร์ได้"
Ciro Santilli 法轮功冠状病六四事件法轮功

1
@Alex http 502 สำหรับหนึ่งgoogledrive.com/host/0BwPIpgeJ2AdnUGUzVGJuak5abDg
user2284570

11
คุณลักษณะนี้เลิกใช้แล้วและไม่รองรับอีกต่อไป
Daniel G

19

วิธีง่าย ๆ :

(ถ้าคุณต้องการเพียงแค่การดาวน์โหลดครั้งเดียว)

  1. ไปที่หน้าเว็บ Google ไดรฟ์ที่มีลิงค์ดาวน์โหลด
  2. เปิดคอนโซลเบราว์เซอร์ของคุณแล้วไปที่แท็บ "เครือข่าย"
  3. คลิกที่ลิงค์ดาวน์โหลด
  4. รอให้ไฟล์เริ่มการดาวน์โหลดและค้นหาคำขอที่เกี่ยวข้อง (ควรเป็นไฟล์สุดท้ายในรายการ) จากนั้นคุณสามารถยกเลิกการดาวน์โหลด
  5. คลิกขวาที่คำขอและคลิก "คัดลอกเป็น cURL" (หรือคล้ายกัน)

คุณควรจะจบลงด้วยสิ่งที่ชอบ:

curl 'https://doc-0s-80-docs.googleusercontent.com/docs/securesc/aa51s66fhf9273i....................blah blah blah...............gEIqZ3KAQ==' --compressed

วางไว้ในคอนโซลของคุณเพิ่ม> my-file-name.extensionไปยังจุดสิ้นสุด (มิฉะนั้นจะเขียนไฟล์ลงในคอนโซลของคุณ) จากนั้นกด Enter :)


ทำงานเมื่อมิถุนายน 2019
techkuz

ทำงานตั้งแต่
Jivan

12

ขึ้นอยู่กับคำตอบจาก Roshan Sethia

พฤษภาคม 2018

ใช้WGET :

  1. สร้างเชลล์สคริปต์ชื่อ 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
    
  2. ให้สิทธิ์ที่ถูกต้องในการรันสคริปต์

  3. ในเทอร์มินัลให้เรียกใช้:

    ./wgetgdrive.sh <file ID> <filename>
    

    ตัวอย่างเช่น:

    ./wgetgdrive.sh 1lsDPURlTNzS62xEOAIG98gsaW6x2PYd2 images.zip
    

1
ผลงานเช่นนี้ขอบคุณ CHARM และสิ่งความสะดวก:chmod 770 wgetgdrive.sh
โมฮาเหม็ Kawsara

8

--UPDATED--

ในการดาวน์โหลดไฟล์ก่อนรับ youtube-dl python จากที่นี่:

youtube-dl: https://rg3.github.io/youtube-dl/download.html

หรือติดตั้งด้วยpip:

sudo python2.7 -m pip install --upgrade youtube_dl 
# or 
# sudo python3.6 -m pip install --upgrade youtube_dl

UPDATE:

ฉันเพิ่งพบสิ่งนี้:

  1. คลิกขวาที่ไฟล์ที่คุณต้องการดาวน์โหลดจาก drive.google.com

  2. คลิก Get Sharable link

  3. เปิดสวิตช์ Link sharing on

  4. คลิกที่ Sharing settings

  5. คลิกที่ตัวเลือกแบบเลื่อนลงด้านบน

  6. คลิกที่เพิ่มเติม

  7. เลือก [x] On - Anyone with a link

  8. คัดลอกลิงค์

https://drive.google.com/file/d/3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR/view?usp=sharing       
(This is not a real file address)

คัดลอก ID หลังจากhttps://drive.google.com/file/d/:

3PIY9dCoWRs-930HHvY-3-FOOPrIVoBAR

วางสิ่งนี้ลงในบรรทัดคำสั่ง:

youtube-dl https://drive.google.com/open?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)

หวังว่ามันจะช่วย


1
สวัสดีขอบคุณฉันลองมันและมันกำลังดาวน์โหลดเมื่อฉันเรียกใช้จากพรอมต์คำสั่ง แต่มีวิธีที่จะได้รับ "การเชื่อมโยงโดยตรง" ที่แท้จริงเช่นการเข้าถึงบนเซิร์ฟเวอร์หรือไม่? ฉันพยายามที่จะเรียกใช้มันด้วยโหนด {วางไข่} แต่จากนั้นจะต้องดาวน์โหลดไปยังเซิร์ฟเวอร์โหนดและจากนั้นดาวน์โหลดอีกครั้งมีวิธีที่จะได้รับลิงค์ดาวน์โหลดโดยตรงจากไดรฟ์ของ Google หรือไม่ พวกเขาใช้ลิงค์อะไร
bluejayke

ฉันต้องใช้วิธีนี้เป็นอย่างมากในตอนนี้ดังนั้นฉันจะพยายามทำให้เป็นไปโดยอัตโนมัติ เพิ่งได้รับลิงค์ google และสคริปต์ Python จะจัดการให้เสร็จ ฉันคิดว่าฉันจะใช้ซีลีเนียมเพื่อทำสิ่งนี้ จะอัปเดตโซลูชันของฉันเมื่อใช้งานได้
jturi

อัปเดตคำตอบของฉัน นี่เป็นเพียงแค่ 2 คลิกเพื่อดาวน์โหลดไฟล์ใด ๆ ด้วย youtube-dl
jturi

7

ไม่มีคำตอบเสนอสิ่งที่เหมาะกับฉัน ณธันวาคม 2016 ( แหล่งที่มา )

curl -L https://drive.google.com/uc?id={FileID}

หากมีการแชร์ไฟล์ Google Drive กับผู้ที่มีลิงก์และ{FileID}เป็นสตริงที่อยู่ด้านหลัง?id=ใน URL ที่แชร์

แม้ว่าฉันจะไม่ได้ตรวจสอบกับไฟล์ขนาดใหญ่ แต่ฉันเชื่อว่ามันอาจมีประโยชน์ที่จะรู้


อืม ... ไม่ได้ผลสำหรับฉัน :( เพียงแค่ดาวน์โหลดเนื้อหาเว็บ - ไม่ใช่ไฟล์
kgingeri

1
curl -L -o {filename} https://drive.google.com/uc?id={FileID}ทำงานให้ฉันขอบคุณ!
Dário

มันไม่ได้ผลสำหรับฉัน ลิงก์ของฉันอยู่ด้านล่าง (ทุกคนที่มีลิงก์สามารถดูได้): drive.google.com/file/d/0B7Jh6M91b83bdFlWX2RIU2hYSWM/… . ฉันพยายาม: <code> curl -O -J -L drive.google.com/uc?id=0B7Jh6M91b83bdFlWX2RIU2hYSWM </code> และฉันได้รับผลลัพธ์นี้: curl: (56) รหัส HTTP ที่ได้รับ 403 จากพร็อกซีหลังจากเชื่อมต่อ
Steve

7
ทำงานเฉพาะสำหรับไฟล์สูงสุดถึง 25MB, ไฟล์ขนาดใหญ่ให้ไวรัสสแกนหน้าคำเตือน
CEN

6

วิธีที่ง่ายที่สุดคือ:

  1. สร้างลิงค์ดาวน์โหลดและคัดลอกไฟล์ ID
  2. ดาวน์โหลดด้วย WGET: 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

1
ขอบคุณมาก! มีประโยชน์อย่างไม่น่าเชื่อ
Nicholas Pipitone

6

คำตอบข้างต้นล้าสมัยในเดือนเมษายน 2020 เนื่องจาก google ไดรฟ์ใช้การเปลี่ยนเส้นทางไปยังตำแหน่งที่แท้จริงของไฟล์

ทำงานตั้งแต่เมษายน 2563 บน macOS 10.15.4 สำหรับเอกสารสาธารณะ:

# this is used for drive directly downloads
function download-google(){
  echo "https://drive.google.com/uc?export=download&id=$1"
  mkdir -p .tmp
  curl -c .tmp/$1cookies "https://drive.google.com/uc?export=download&id=$1" > .tmp/$1intermezzo.html;
  curl -L -b .tmp/$1cookies "$(egrep -o "https.+download" .tmp/$1intermezzo.html)" > $2;
}

# some files are shared using an indirect download
function download-google-2(){
  echo "https://drive.google.com/uc?export=download&id=$1"
  mkdir -p .tmp
  curl -c .tmp/$1cookies "https://drive.google.com/uc?export=download&id=$1" > .tmp/$1intermezzo.html;
  code=$(egrep -o "confirm=(.+)&amp;id=" .tmp/$1intermezzo.html | cut -d"=" -f2 | cut -d"&" -f1)
  curl -L -b .tmp/$1cookies "https://drive.google.com/uc?export=download&confirm=$code&id=$1" > $2;
}

# used like this
download-google <id> <name of item.extension>

1
download-google-2ทำงานได้สำหรับฉัน ไฟล์ของฉันมีขนาด 3G ขอบคุณ @ danieltan95
Saurabh Kumar

ฉันได้อัปเดตdownload-google-2curl ครั้งล่าสุดเป็นสิ่งนี้curl -L -b .tmp/$1cookies -C - "https://drive.google.com/uc?export=download&confirm=$code&id=$1" -o $2;และสามารถดาวน์โหลดต่อ
ssi-anik

ดูเหมือนว่ามีบางอย่างผิดปกติเมื่อดาวน์โหลดด้วยความเร็วต่ำ อีกวิธีที่ฉันพบ qr.ae/pNrPaJ
ssi-anik

5

ฉันมีปัญหาเดียวกันกับ Google Drive

นี่คือวิธีที่ฉันจะแก้ไขปัญหาโดยใช้ลิงก์ 2

  1. เปิดเบราว์เซอร์บนพีซีของคุณนำทางไปยังไฟล์ของคุณใน Google Drive ให้ไฟล์ของคุณเป็นลิงก์สาธารณะ

  2. คัดลอกลิงก์สาธารณะไปยังคลิปบอร์ดของคุณ (เช่นคลิกขวาคัดลอกที่อยู่ลิงก์)

  3. เปิด Terminal หากคุณกำลังดาวน์โหลดไปยังพีซี / เซิร์ฟเวอร์ / เครื่องอื่นคุณควรใช้ SSH เป็นจุดนี้

  4. ติดตั้งลิงค์ 2 (วิธีเดเบียน / อูบุนตูใช้ distro หรือระบบปฏิบัติการเทียบเท่า)

    sudo apt-get install links2

  5. วางลิงก์ในเทอร์มินัลของคุณและเปิดด้วยลิงค์ดังนี้:

    links2 "paste url here"

  6. นำทางไปยังลิงค์ดาวน์โหลดภายในลิงค์โดยใช้ปุ่มลูกศรและกด Enter

  7. เลือกชื่อไฟล์และมันจะดาวน์โหลดไฟล์ของคุณ


Linksได้หลอกลวงโดยสิ้นเชิง! และมันดีกว่าw3m
alvas

1
นี่เป็นสิ่งเดียวที่ใช้ได้สำหรับฉัน! กุมภาพันธ์ 2019 แอป gdown ในความคิดเห็นก่อนหน้านี้โฮสต์โดยไม่มีใครอื่นนอกจาก Google เอกสารดังนั้นจึงไม่สามารถดาวน์โหลดได้เช่นกัน
สตีเวน

5

ใช้youtube-dl !

youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890

คุณสามารถส่ง--get-urlต่อเพื่อรับ URL ดาวน์โหลดโดยตรง


1
@Ender youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [GoogleDrive] ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Downloading webpageก็ยังคงทำงานสำหรับฉัน บางทีคุณอาจมีรุ่นที่ล้าสมัยyoutube-dlหรือรูปแบบลิงก์ไม่ได้รับการยอมรับด้วยเหตุผลบางประการ ... ลองใช้รูปแบบด้านบนแทน ID ด้วยรหัสไฟล์จาก URL เดิมของคุณ
aularon

5

ฉันใช้ข้อมูลตัวอย่างของ@lit Chaharที่โพสต์คำตอบที่ดีในชุดข้อความนี้ ฉันพบว่ามีประโยชน์ที่จะใส่ไว้ในฟังก์ชั่นทุบตีมากกว่า.shไฟล์แยกต่างหาก

function curl_gdrive {

    GDRIVE_FILE_ID=$1
    DEST_PATH=$2

    curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${GDRIVE_FILE_ID}" > /dev/null
    curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${GDRIVE_FILE_ID}" -o ${DEST_PATH}
    rm -fr cookie
}

ที่สามารถรวมอยู่ในเช่น a ~/.bashrc(หลังจากการจัดหามันของหลักสูตรหากไม่ได้มาโดยอัตโนมัติ) และใช้ในวิธีดังต่อไปนี้

   $ curl_gdrive 153bpzybhfqDspyO_gdbcG5CMlI19ASba imagenet.tar

นี่อาจเป็นคำตอบที่ดีที่สุด ... การเปรียบเทียบ python นั้นหนักมากเมื่อเปรียบเทียบ ผมต้องบอกว่าผมค่อนข้างโรคพอใจกับ GDrive แม้ว่า ...
smaudet

1
คุณไม่จำเป็นต้องใช้ -f หรือ -r ในคำสั่ง rm ของคุณ หากคุณสอนให้คนรู้จัก "rm -rf" เสมอพวกเขาอาจจะเอาสิ่งที่พวกเขาต้องการเก็บไว้ออกไป ...
josch

4

มีการเปิดแหล่งที่มาของลูกค้าหลายแพลตฟอร์มเขียนไปเป็น: ไดรฟ์ มันค่อนข้างดีและเต็มรูปแบบและยังอยู่ในการพัฒนาที่ใช้งานอยู่

$ 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`

4

คำตอบข้างต้นทั้งหมดดูเหมือนจะปิดบังความเรียบง่ายของคำตอบหรือมีความแตกต่างบางอย่างที่ไม่ได้อธิบาย

หากแชร์ไฟล์แบบสาธารณะคุณสามารถสร้างลิงค์ดาวน์โหลดโดยตรงโดยเพียงแค่รู้ ID ไฟล์ URL จะต้องอยู่ในรูปแบบ " https://drive.google.com/uc?id=THFILEIDOWN&export=download " สิ่งนี้ใช้ได้ตั้งแต่ 11-22-2019 สิ่งนี้ไม่ต้องการให้ผู้รับลงชื่อเข้าใช้ Google แต่ไม่ต้องการให้แชร์ไฟล์แบบสาธารณะ

  1. ในเบราว์เซอร์ของคุณไปที่ drive.google.com

  2. คลิกขวาที่ไฟล์แล้วคลิก "รับลิงค์ที่แชร์ได้"

คลิกขวาเพื่อรับลิงค์ที่แชร์ได้

  1. เปิดแท็บใหม่เลือกแถบที่อยู่และวางเนื้อหาของคลิปบอร์ดซึ่งจะเป็นลิงค์ที่แชร์ได้ คุณจะเห็นไฟล์ที่แสดงโดยผู้ชมของ Google ID คือหมายเลขที่อยู่หน้าส่วนประกอบ "มุมมอง" ของ URL:

ป้อนคำอธิบายรูปภาพที่นี่

  1. แก้ไข URL ดังนั้นจึงอยู่ในรูปแบบต่อไปนี้แทนที่ "[FILEID]" ด้วย ID ของไฟล์ที่คุณแชร์:

    https://drive.google.com/uc?id=[FILEID]&export=download

  2. นั่นคือลิงค์ดาวน์โหลดโดยตรงของคุณ หากคุณคลิกที่มันในเบราว์เซอร์ของคุณไฟล์จะถูก "ผลัก" ไปยังเบราว์เซอร์ของคุณเปิดกล่องโต้ตอบดาวน์โหลดช่วยให้คุณสามารถบันทึกหรือเปิดไฟล์ คุณสามารถใช้ลิงค์นี้ในสคริปต์ดาวน์โหลดของคุณ

  3. ดังนั้นคำสั่ง curl ที่เทียบเท่าจะเป็น:

curl -L "https://drive.google.com/uc?id=AgOATNfjpovfFrft9QYa-P1IeF9e7GWcH&export=download" > phlat-1.0.tar.gz

2
สิ่งนี้ใช้ไม่ได้กับไฟล์ขนาดใหญ่: รับข้อผิดพลาดGoogle Drive can't scan this file for viruses. <filename> is too large for Google to scan for viruses. Would you still like to download this file?
Rekovni

สิ่งนี้ใช้ได้ผล ขอบคุณ! หลังจากแปลงลิงก์ไปเป็นรูปแบบนั้นคุณสามารถใช้ gdown ดังที่แสดงในคำตอบอื่น ๆ
Harry M

3

ฉันไม่สามารถรับสคริปต์ perl ของ Nanoix ให้ทำงานได้หรือตัวอย่าง curl อื่น ๆ ที่ฉันได้เห็นดังนั้นฉันจึงเริ่มค้นหา api ด้วยตัวเองใน python สิ่งนี้ทำงานได้ดีสำหรับไฟล์ขนาดเล็ก แต่ไฟล์ขนาดใหญ่สำลัก ram ที่ผ่านมาแล้วดังนั้นฉันจึงพบโค้ด chunking ที่ดีอื่น ๆ ที่ใช้ความสามารถของ API ในการดาวน์โหลดบางส่วน สรุปได้ที่นี่: https://gist.github.com/csik/c4c90987224150e4a0b2

จดบันทึกเล็กน้อยเกี่ยวกับการดาวน์โหลดไฟล์ client_secret json จากอินเตอร์เฟส API ไปยังไดเรกทอรีท้องถิ่นของคุณ

แหล่ง
$ cat gdrive_dl.py
from pydrive.auth import GoogleAuth  
from pydrive.drive import GoogleDrive    

"""API calls to download a very large google drive file.  The drive API only allows downloading to ram 
   (unlike, say, the Requests library's streaming option) so the files has to be partially downloaded
   and chunked.  Authentication requires a google api key, and a local download of client_secrets.json
   Thanks to Radek for the key functions: http://stackoverflow.com/questions/27617258/memoryerror-how-to-download-large-file-via-google-drive-sdk-using-python
"""

def partial(total_byte_len, part_size_limit):
    s = []
    for p in range(0, total_byte_len, part_size_limit):
        last = min(total_byte_len - 1, p + part_size_limit - 1)
        s.append([p, last])
    return s

def GD_download_file(service, file_id):
  drive_file = service.files().get(fileId=file_id).execute()
  download_url = drive_file.get('downloadUrl')
  total_size = int(drive_file.get('fileSize'))
  s = partial(total_size, 100000000) # I'm downloading BIG files, so 100M chunk size is fine for me
  title = drive_file.get('title')
  originalFilename = drive_file.get('originalFilename')
  filename = './' + originalFilename
  if download_url:
      with open(filename, 'wb') as file:
        print "Bytes downloaded: "
        for bytes in s:
          headers = {"Range" : 'bytes=%s-%s' % (bytes[0], bytes[1])}
          resp, content = service._http.request(download_url, headers=headers)
          if resp.status == 206 :
                file.write(content)
                file.flush()
          else:
            print 'An error occurred: %s' % resp
            return None
          print str(bytes[1])+"..."
      return title, filename
  else:
    return None          


gauth = GoogleAuth()
gauth.CommandLineAuth() #requires cut and paste from a browser 

FILE_ID = 'SOMEID' #FileID is the simple file hash, like 0B1NzlxZ5RpdKS0NOS0x0Ym9kR0U

drive = GoogleDrive(gauth)
service = gauth.service
#file = drive.CreateFile({'id':FILE_ID})    # Use this to get file metadata
GD_download_file(service, FILE_ID) 

3

นี่เป็นสคริปต์ทุบตีเล็ก ๆ น้อย ๆ ที่ฉันเขียนซึ่งทำงานวันนี้ มันทำงานกับไฟล์ขนาดใหญ่และสามารถทำการดึงไฟล์กลับมาบางส่วนได้เช่นกัน ใช้สองอาร์กิวเมนต์แรกคือ file_id และที่สองคือชื่อของไฟล์ที่ส่งออก การปรับปรุงที่สำคัญเหนือคำตอบก่อนหน้านี้คือการทำงานกับไฟล์ขนาดใหญ่และต้องการเพียงเครื่องมือทั่วไปที่มี: 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

ยินดีต้อนรับสู่ SO หากคุณใช้การอ้างอิงใด ๆ เพื่อจุดประสงค์นี้โปรดรวมไว้ในคำตอบของคุณ อย่างไรก็ตามงานที่ดี +1
M--

3

สามารถใช้งานได้ตั้งแต่ พ.ย. 2560 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

แม้ว่าจะมีการระบุ "source url" และมีการแยกวิเคราะห์บางอย่างฉันไม่พยายามที่จะเข้าใจว่ามันทำงานได้โดยเพียงแค่ใช้สิ่งที่เรียกว่า fileid ที่นี่และในคำตอบอื่น ๆ เป็นพารามิเตอร์แรก
ม.ค.

@jan นั่นอาจหมายความว่ามี URL มากกว่าหนึ่งสไตล์ ฉันดีใจที่มันยังใช้ได้ผลกับคุณตลอด
ppetraki

3

หลังจากล้อเล่นไปกับขยะแล้ว ฉันพบวิธีดาวน์โหลดไฟล์หวาน ๆ โดยใช้ chrome - เครื่องมือสำหรับนักพัฒนา

  1. ที่แท็บ Google เอกสารของคุณให้กด Ctrl + Shift + J (การตั้งค่า -> เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์)
  2. สลับไปที่แท็บเครือข่าย
  3. ที่ไฟล์เอกสารของคุณให้คลิก "ดาวน์โหลด" -> ดาวน์โหลดเป็น CSV, xlsx, ....
  4. มันจะแสดงคำขอในคอนโซล "เครือข่าย" ป้อนคำอธิบายรูปภาพที่นี่

  5. คลิกขวา -> Copy -> Copy เป็น Curl

  6. คำสั่ง Curl ของคุณจะเป็นเช่นนี้และเพิ่ม-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

แก้ไข!


ลิงก์นั้นจะหมดอายุและใช้ได้เพียง 1 ที่อยู่ต่อครั้ง
bluejayke

คุณสามารถสร้างคำขอคงที่ที่ไม่มีการโต้ตอบเพื่อให้เซสชันคงอยู่ @bluejayke
Ender

ฉันทำอย่างนั้นและเมื่อมาที่นี่เพื่อเขียนคำตอบอื่นสะดุดกับคุณ ฉันยืนยันว่ามันทำงานได้กับ IP ที่แตกต่างกันเนื่องจากฉันต้องการดาวน์โหลดไฟล์ขนาด 36GB ไปยังเซิร์ฟเวอร์ที่ไม่มีเบราว์เซอร์ และฉันได้แยกลิงก์ออกจากแล็ปท็อปของฉัน
dmitry502

2

นี่คือวิธีแก้ปัญหาซึ่งฉันดาวน์โหลดไฟล์จาก Google Drive ไปยังเชลล์ Google Cloud Linux ของฉัน

  1. แชร์ไฟล์ให้กับสาธารณะและแก้ไขสิทธิ์โดยใช้การแชร์ขั้นสูง
  2. คุณจะได้รับลิงค์แชร์ซึ่งจะมี ID ดูลิงก์: - drive.google.com/file/d/ [IDID เหมือนกัน /view?usp=sharing
  3. คัดลอก ID นั้นและวางในลิงค์ต่อไปนี้: -

googledrive.com/host/[ID]

  1. ลิงค์ด้านบนจะเป็นลิงค์ดาวน์โหลดของเรา
  2. ใช้ wget เพื่อดาวน์โหลดไฟล์: -

wget https://googledrive.com/host/ [รหัส]

  1. คำสั่งนี้จะดาวน์โหลดไฟล์ที่มีชื่อเป็น [ID] โดยไม่มีนามสกุลและมีขนาดไฟล์เท่ากันในตำแหน่งเดียวกับที่คุณรันคำสั่ง wget
  2. จริงๆแล้วฉันดาวน์โหลดโฟลเดอร์ซิปในทางปฏิบัติ ดังนั้นฉันจึงเปลี่ยนชื่อไฟล์ที่น่าอึดอัดใจโดยใช้: -

mv [ID] 1.zip

  1. จากนั้นใช้

เปิดเครื่องรูด 1.zip

เราจะได้รับไฟล์


http 502 สำหรับหนึ่งgoogledrive.com/host/0BwPIpgeJ2AdnUGUzVGJuak5abDg
2284570

Google เอาโฮสติ้งออกจากไดรฟ์ดังนั้นจึงใช้งานไม่ได้อีกต่อไป
kgingeri

2

ฉันพบวิธีแก้ปัญหาที่ใช้การได้ ... แค่ใช้สิ่งต่อไปนี้

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

เมื่อทำสิ่งนี้ฉันจะได้รับคำเตือน: ไม่สามารถตรวจสอบใบรับรองของ docs.google.com ได้รับการออกโดย `/ C = US / O = Google Trust Services / CN = Google Internet Authority G3 ': ไม่สามารถตรวจสอบสิทธิ์ของผู้ออกบัตร ส่งคำขอ HTTP แล้วกำลังรอการตอบกลับ ... 404 ไม่พบ 2019-02-08 02:56:30 ข้อผิดพลาด 404: ไม่พบ วิธีแก้ปัญหาใด ๆ
bluejayke

ว้าว! คำตอบที่ดีและมีเหตุผลมาก ขอบคุณที่เขียนขึ้น ดาวน์โหลดไฟล์ 1.3 GB โดยใช้คำสั่งนี้ ... โหมดอัตโนมัติอย่างสมบูรณ์จาก terminal linux โดยคำสั่งนี้เท่านั้น ลองใช้ GCP ด้วย ใช้งานได้ดีที่นั่นเช่นกัน ปี 2020 ... ฉันเชื่อว่านี่เป็นวิธีที่ถูกต้อง ... แม้ว่าพวกเขาจะเปลี่ยนคำสั่งเล็กน้อย
Atta Jutt

2

มีวิธีที่ง่ายกว่า

ติดตั้ง cliget / CURLWGET จาก firefox / chrome extension

ดาวน์โหลดไฟล์จากเบราว์เซอร์ สิ่งนี้จะสร้างลิงค์ curl / wget ที่จดจำคุกกี้และส่วนหัวที่ใช้ในขณะที่ดาวน์โหลดไฟล์ ใช้คำสั่งนี้จากเชลล์ใด ๆ เพื่อดาวน์โหลด


ไม่ต้องสงสัยเลยว่าเป็นวิธีที่ง่ายและสะดวกที่สุด
c0degeas

2

วิธีง่าย ๆ ในการดาวน์ไฟล์จากไดรฟ์ google คุณสามารถดาวน์โหลดไฟล์บน colab ได้

pip install gdown

import gdown

แล้วก็

url = 'https://drive.google.com/uc?id=0B9P1L--7Wd2vU3VUVlFnbTgtS2c'
output = 'spam.txt'
gdown.download(url, output, quiet=False)

หรือ

fileid='0B9P1L7Wd2vU3VUVlFnbTgtS2c'

gdown https://drive.google.com/uc?id=+fileid

เอกสารhttps://pypi.org/project/gdown/


เย็น. แต่มันแตกต่างจากคำตอบของ phiที่โพสต์ในช่วงหนึ่งปีก่อนหน้าคุณหรือไม่
umläute

1

พฤษภาคม 2018 ทำงาน

สวัสดีจากความคิดเห็นนี้ ... ฉันสร้าง bash เพื่อส่งออกรายการ URL จากไฟล์URLS.txtไปยังURLS_DECODED.txt เครื่องมือที่ใช้ในการเร่งความเร็วเช่น flashget (ฉันใช้ cygwin เพื่อรวม windows & linux)

Command Spider ถูกนำมาใช้เพื่อหลีกเลี่ยงการดาวน์โหลดและรับลิงค์สุดท้าย (โดยตรง)

คำสั่ง GREP HEAD and CUT, ประมวลผลและรับลิงค์สุดท้าย, ใช้ภาษาสเปน, บางทีคุณอาจจะเป็นพอร์ตของภาษาอังกฤษ

echo -e "$URL_TO_DOWNLOAD\r" อาจ \ r เป็นเพียง cywin เท่านั้นและต้องถูกแทนที่ด้วย \ n (break line)

**********user*********** เป็นโฟลเดอร์ผู้ใช้

*******Localización*********** เป็นภาษาสเปนล้างเครื่องหมายดอกจันและให้คำศัพท์เป็นภาษาอังกฤษและปรับ 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


0

skickaเป็นเครื่องมือ cli เพื่ออัปโหลดดาวน์โหลดไฟล์การเข้าถึงจาก google ไดรฟ์

ตัวอย่าง -

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.