Wget / Curl большой файл с Google Drive

306

Я пытаюсь загрузить файл с Google Drive в сценарии, и у меня возникли небольшие проблемы с этим. Файлы, которые я пытаюсь загрузить, находятся здесь .

Я много смотрел в Интернете, и мне, наконец, удалось загрузить одну из них. Я получил UID файлов, и меньший (1,6 МБ) загружается нормально, однако больший файл (3,7 ГБ) всегда перенаправляет на страницу, которая спрашивает меня, хочу ли я продолжить загрузку без проверки на вирусы. Может ли кто-нибудь помочь мне пройти этот экран?

Вот как у меня работает первый файл -

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 scriptgoogle drivecurl -u username:pass https://drive.google.com/open?id=0B0QQY4sFRhIDRk1LN3g2TjBIRU0 >image.jpg
указать,
Посмотрите на принятый ответ. Я использовал скрипт gdown.plgdown.pl https://drive.google.com/uc?export=download&confirm=yAjx&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM index4phlat.tar.gz
Арджун
2
Не бойтесь прокручивать! Этот ответ предоставляет очень хороший скрипт на python для загрузки за один раз.
Ciprian Tomoiagă
./gdrive загрузить [FILEID] [--recursive, если это папка], он попросит вас получить доступ к указанному URL и скопировать, вставить код токена.
roj4s
Проверьте эту суть: gist.github.com/ankitmundada/7d15bc85ff1430d99a8467767c8ed2d2
Ankit Mundada,

Ответы:

59

ВНИМАНИЕ : эта функциональность устарела. Смотрите предупреждение ниже в комментариях.


Посмотрите на этот вопрос: прямая загрузка с Google Drive с помощью Google Drive API

По сути, вы должны создать публичный каталог и обращаться к своим файлам по относительной ссылке с чем-то вроде

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

Кроме того, вы можете использовать этот скрипт: https://github.com/circulosmeos/gdown.pl

guadafan
источник
5
Еще один хороший способ - использовать инструмент командной строки linux «gdrive» github.com/prasmussen/gdrive
Тоби
1
Я смог использовать Perl-скрипт Nanolx в сочетании с постоянной ссылкой google drive, созданной на gdurl.com - Спасибо!
Jadik
14
ВНИМАНИЕ: поддержка веб-хостинга в Google Диске устарела. «Начиная с 31 августа 2015 г. веб-хостинг на Google Диске для пользователей и разработчиков будет объявлен устаревшим. Клиенты Служб Google могут продолжать использовать эту функцию в течение одного года до 31 августа 2016 г. при предоставлении контента через googledrive.com/host. / doc id будет прекращен. " googleappsupdates.blogspot.com/2015/08/...
chrish
9
К сожалению, это не работает больше с 2018 года.
Calimo
2
gdown.pl работал отлично для меня тоже. Беглый взгляд на сценарий показывает, что он не использует этот API, он создает новый URL с параметром, export=downloadпоэтому он будет полезен в обозримом будущем, если Google не изменит эту схему URL
Бен Барон,
234

Июнь 2020

Это 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и это работает как очарование
Сараванабалаги Рамачандран
8
Этот работал в июле 2018 года! Не забудьте поделиться файлом, и если у вас есть ссылка как drive.google.com/open?id=FILE_ID, просто замените «open» на «uc» и просто gdown 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
Кристоф
6
Это единственное решение из полудюжины, которое я пробовал, которое работает. За это нужно проголосовать первым. Мне нужно было только изменить «общую ссылку» с: drive.google.com/open?id=XXXX на drive.google.com/uc?id=XXXX
отменить
194

Я написал фрагмент Python, который загружает файл с Google Диска, предоставляя ссылку для совместного использования . Работает с августа 2017 года .

Снайп не использует ни gdrive , ни Google Drive API. Он использует модуль запросов .

При загрузке больших файлов с Google Диска одного запроса GET недостаточно. Требуется второй, и у него есть дополнительный параметр URL, называемый подтверждающим , значение которого должно равняться значению определенного cookie.

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)
TURDUS-Мерула
источник
Я бегу сниппет python snippet.py file_id destination. Это правильный способ запуска? Потому что, если место назначения - это папка, мне выдается ошибка. Если я создаю файл и использую его в качестве места назначения, фрагмент кода работает нормально, но ничего не делает.
Манфредо
2
@Manfredo вам нужно имя файла, который вы хотели бы сохранить файл, как, например, $ python snippet.py your_google_file_id /your/full/path/and/filename.xlsx работал для меня. в случае, если это не сработает, есть ли у вас какой-либо выход? любой файл создается?
Джефф
1
@CiprianTomoiaga У меня 90% индикатора выполнения работает с использованием модуля Python tqdm. Я сделал суть: gist.github.com/joshtch/8e51c6d40b1e3205d1bb2eea18fb57ae . К сожалению, я не нашел надежного способа получения общего размера файла, который вам понадобится для вычисления% прогресса и предполагаемого времени завершения.
Joshtch
Кроме того, какой тип аутентификации использует модуль запросов для доступа к дискам Google? OAuth? Например, где в приведенном выше коде это обрабатывается - запросы- oauthlib.readthedocs.io/en/latest/… ?
tauseef_CuriousGuy
7
Это круто! Вот подсказка для drive_File_ID: https // drive.google.com / file / d / «drive_File_ID» / view - между https ~~ file / d / и / view ссылки для скачивания.
Jaeyoung Ли
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 Диска.Для этого щелкните правой кнопкой мыши нужный файл на веб-сайте Google Диска и выберите «Получить ссылку…». Это вернет что-то вроде https://drive.google.com/open?id=0B7_OwkDsUIgFWXA1B2FPQfV5S8H. Получите строку позади ?id=и скопируйте ее в буфер обмена. Это идентификатор файла.

  2. Загрузите файл.Конечно, вместо этого используйте идентификатор вашего файла в следующей команде.

    gdrive download 0B7_OwkDsUIgFWXA1B2FPQfV5S8H
    

При первом использовании инструменту необходимо получить разрешения на доступ к API Google Диска. Для этого он покажет вам ссылку, которую вы должны посетить в браузере, а затем вы получите проверочный код для копирования и вставки обратно в инструмент. Загрузка начнется автоматически. Нет индикатора прогресса, но вы можете наблюдать за прогрессом в файловом менеджере или втором терминале.

Источник: комментарий Тоби к другому ответу здесь.

 

Дополнительный трюк: ограничение скорости. Для загрузки с gdriveограниченной максимальной скоростью (чтобы не перегружать сеть…), вы можете использовать такую ​​команду ( pvэто PipeViewer ):

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

Это покажет количество загруженных данных ( -b) и скорость загрузки ( -r) и ограничит эту скорость до 90 КБ / с ( -L 90k).

tanius
источник
сообщение об ошибке: «Превышен дневной лимит для неаутентифицированного использования. Для продолжения использования требуется регистрация.», код: 403
Nianliang
@Nianliang Еще не испытывал этого, но вот предположение: вы использовали gdrive для загрузки общедоступного файла, поэтому он не будет запрашивать у вас аутентификацию при первом использовании. Сначала попробуйте открыть не публичный файл, убедитесь, что аутентификация прошла успешно (как описано в ответе: «При первом использовании…»). Это помогло?
Танус
3
Не могу получить код подтверждения. Получите сообщение об ошибке «Вход в Google временно отключен для этого приложения. Это приложение еще не проверено Google для использования входа в Google».
Useranon
1
То же сообщение об ошибке: «Это приложение еще не было проверено Google для использования входа в Google».
Геббиссимо
1
@useranon: попробуйте это решение: github.com/gdrive-org/gdrive/issues/533#issuecomment-596336395 , вам нужно создать учетную запись службы Google и предоставить общий доступ к файлу / папке с адресом этой учетной записи службы. Я это сделал. Работает с 17.04.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}"  

Как это работает?
Получить файл cookie и HTML-код с помощью curl.
Передайте html в grep и sed и найдите имя файла.
Получить код подтверждения из файла cookie с помощью awk.
Наконец загрузите файл с включенным файлом cookie, подтвердите код и имя файла.

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

Если вам не нужно переменная файла скручивание может угадать его
-L Следовать переадресовывает
-O Дистанционно имя
-J Remote-заголовок-имя

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 
lapinpt
источник
Очень красиво сделано. Избавился от предупреждения о вирусе на 5 ГБ + файл, когда все остальные ответы не удалось.
1
Это потрясающе. Мне нужно было добавить --insecureопцию к обоим запросам curl, чтобы она работала.
Тейлор Р
@lapinpt как мне добавить функциональность RESUME?
steven7mwesigwa
Можем ли мы как-то избавиться от идентификатора Google, если у нас есть общедоступная ссылка на файл?
oarfish
42

Дополнение от марта 2018.

Я пробовал различные методы, приведенные в других ответах, чтобы загрузить мой файл (6 ГБ) непосредственно с диска Google в мой экземпляр AWS ec2, но ни один из них не работает (возможно, потому, что он старый).

Итак, для информации других, вот как я сделал это успешно:

  1. Щелкните правой кнопкой мыши по файлу, который вы хотите загрузить, щелкните «Поделиться», в разделе «Обмен ссылками» выберите «любой пользователь, имеющий эту ссылку, может редактировать».
  2. Скопируйте ссылку. Это должно быть в этом формате:https://drive.google.com/file/d/FILEIDENTIFIER/view?usp=sharing
  3. Скопируйте часть FILEIDENTIFIER из ссылки.
  4. Скопируйте приведенный ниже скрипт в файл. Он использует 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}
    
  5. Как показано выше, вставьте ФАЙЛИДЕНТИФИКАТОР в скрипт. Не забудьте сохранить двойные кавычки!

  6. Укажите имя файла вместо FILENAME. Не забудьте сохранить двойные кавычки, а также включить расширение в FILENAME (например,myfile.zip ).
  7. Теперь сохраните файл и сделайте его исполняемым, выполнив эту команду в терминале sudo chmod +x download-gdrive.sh .
  8. Запустите скрипт, используя `./download-gdrive.sh".

PS: Вот суть Github для приведенного выше сценария: https://gist.github.com/amit-chahar/db49ce64f46367325293e4cce13d2424

Амит Чахар
источник
для wget заменить -cна --save-cookiesи -bна--load-cookies
отменить
3
подтвердил, что это работает для меня 👍, отредактировал немного для ясности
Джефф Этвуд
1
Работает в январе 2019 года. Мне нужно было добавить "цитаты ${filename}в последнюю строку.
Джимбо
> Запустите скрипт, используя ./download-gdrive.sh" Do not be like me and try to run the script by typing download-gdrive.sh , the . / `, Кажется обязательным.
Амбруаз Рабье
Работает в мае 2019 года
Кшитий Байрачарья,
29

Вот быстрый способ сделать это.

Убедитесь, что ссылка является общей, и она будет выглядеть примерно так:

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
thouliha
источник
2
Привет, спасибо за ответ. Если вы посмотрите на файлы по ссылке, которой я поделился, вы увидите, что, хотя файлы являются общими, им не хватает тега «authuser = 0» в ссылке. Ваш метод не работал с предоставленными файлами! Арджун
Арджун
2
Даже не пытался с публичным доступом, этот работал хорошо для общих файлов только для ссылок atow. Использовал это так:wget 'https://docs.google.com/uc?export=download&id=SECRET_ID' -O 'filename.pdf'
Сампо Саррала - 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'
Артем Пеленицын
1
Работал для меня с 10/2019 и был идеальным решением для меня, когда я помещал файл в работающий контейнер Docker, на котором почти не запущены утилиты.
ammills01
23

Поведение по умолчанию на диске Google - сканировать файлы на наличие вирусов, если файл слишком большой, он будет запрашивать пользователя и уведомлять его о невозможности сканирования файла.

На данный момент единственный обходной путь, который я нашел, - это поделиться файлом с сетью и создать веб-ресурс.

Цитата со страницы справки Google Drive:

С помощью Drive вы можете сделать веб-ресурсы - такие как файлы HTML, CSS и Javascript - видимыми как веб-сайт.

Чтобы разместить веб-страницу с Drive:

  1. Откройте диск на drive.google.com и выберите файл.
  2. Нажмите кнопку « Поделиться» в верхней части страницы.
  3. Нажмите « Дополнительно» в правом нижнем углу окна обмена.
  4. Нажмите Изменить ....
  5. Выберите On - Public в Интернете и нажмите Save .
  6. Перед закрытием поля для обмена скопируйте идентификатор документа с URL-адреса в поле ниже «Ссылка для обмена». Идентификатор документа представляет собой строку прописных и строчных букв и цифр между косыми чертами в URL.
  7. Поделитесь URL-адресом, который выглядит как «www.googledrive.com/host/[doc id], где [doc id] заменяется идентификатором документа, который вы скопировали на шаге 6.
    Теперь любой может просматривать вашу веб-страницу.

Найдено здесь: https://support.google.com/drive/answer/2881970?hl=ru.

Так, например, когда вы публикуете файл на диске Google публично, sharelink выглядит следующим образом:

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

Затем вы копируете идентификатор файла и создаете линк googledrive.com, который выглядит следующим образом:

https://www.googledrive.com/host/0B5IRsLTwEO6CVXFURmpQZ1Jxc0U
Alex
источник
1
@ FıratKÜÇÜK вы уверены, что у вас был правильный формат URL? (обратите внимание на www.googledrive.com, а не drive.google.com) Я только что попробовал, и это сработало.
Чарльз Форест
Мой файл превышает 50 МБ. он запрашивает подтверждение сканирования на вирусы. Так что решение не подходит для моего случая. Вместо этого я использовал консольное приложение gdrive.
Fırat KÜÇÜK
@ FıratKÜÇÜK Мне только что удалось скачать файл размером более 200 Мб с помощью этого метода, который обычно запускает проверку на вирусы. Я получил идентификатор от щелчка правой кнопкой мыши> "получить доступную ссылку".
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
1
@
Алекс
11
Эта функция устарела и больше не поддерживается
Даниэль Г
19

Простой способ:

(если вам это нужно для разовой загрузки)

  1. Перейдите на веб-страницу Google Drive, на которой есть ссылка для скачивания.
  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 :)


источник
Работает
Работает по состоянию на февраль 2020 года
Дживан
12

На основании ответа от Рошана Сетия

Май 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
Это работает как ШАРМ, спасибо и облегчает дела:chmod 770 wgetgdrive.sh
Мохамед Кавсара
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

ОБНОВИТЬ:

Я только что узнал это:

  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)

Скопируйте идентификатор после 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)

Надеюсь, поможет

jturi
источник
1
привет, спасибо, я попробовал это, и он загружается, когда я запускаю из командной строки, но есть ли способ получить фактическую «прямую ссылку», как для доступа на сервере? Я пытаюсь запустить его с узла {spawn}, но затем он должен загрузить его на сервер узла, и оттуда загрузить его снова, есть ли способ просто получить прямую ссылку для скачивания с Google Drive? Какую ссылку они используют?
блюджайке
Сейчас мне приходится много использовать этот метод, поэтому я постараюсь полностью его автоматизировать. Просто получите ссылку на Google, и скрипт Python сделает все остальное. Я думаю, что я буду использовать селен для этого. Обновлю мое решение, когда оно будет работать.
jturi
Обновил мой ответ. Теперь для загрузки любых файлов с помощью youtube-dl достаточно двух кликов.
Jturi
7

Нет ответа предлагает то, что работает для меня по состоянию на декабрь 2016 года ( источник ):

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

при условии, что файл Google Диска был передан тем, у кого есть ссылка, и {FileID}является строкой позади?id= в общем URL-адресе.

Хотя я не проверял с большими файлами, я думаю, что это может быть полезно знать.

MMJ
источник
Хммм ... не работает для меня :( Просто загружает веб-контент, а не файл
kgingeri
1
curl -L -o {filename} https://drive.google.com/uc?id={FileID}работал на меня, спасибо!
Дарио
Это не работает для меня. Моя ссылка ниже (любой, у кого есть ссылка, может просмотреть): drive.google.com/file/d/0B7Jh6M91b83bdFlWX2RIU2hYSWM/… . Я попытался: <code> curl -O -J -L drive.google.com/uc?id=0B7Jh6M91b83bdFlWX2RIU2hYSWM </code>, и я получил такой результат: curl: (56) Получил HTTP-код 403 от прокси-сервера после CONNECT
Стив
7
Работает только для файлов до 25 МБ, большие файлы выдают страницу с предупреждением о проверке на вирусы
cen
6

Самый простой способ это:

  1. Создать ссылку для скачивания и скопировать fileID
  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
Спасибо вам большое! Невероятно полезно
Николас Пипитоне
6

Приведенные выше ответы устарели на апрель 2020 года, поскольку на диске Google теперь используется перенаправление на фактическое местоположение файла.

Работает по состоянию на апрель 2020 года на 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>
danieltan95
источник
1
download-google-2работает для меня. Мой файл имеет размер 3G. Спасибо @ danieltan95
Кумар
Я обновил download-google-2последний завиток к этому, 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 Диске. Дайте вашему файлу публичную ссылку.

  2. Скопируйте общедоступную ссылку в буфер обмена (например, щелкните правой кнопкой мыши, скопируйте адрес ссылки)

  3. Откройте Терминал. Если вы загружаете на другой компьютер / сервер / компьютер, вы должны использовать SSH, как показано ниже.

  4. Установите ссылки 2 (метод debian / ubuntu, используйте ваш дистрибутив или аналог ОС)

    sudo apt-get install links2

  5. Вставьте ссылку в ваш терминал и откройте ее с помощью ссылок следующим образом:

    links2 "paste url here"

  6. Перейдите по ссылке для скачивания в разделе «Ссылки» с помощью клавиш со стрелками и нажмите Enter

  7. Выберите имя файла, и он загрузит ваш файл

mattbell87
источник
Linksполностью сделал свое дело! И это намного лучше, чемw3m
alvas
1
Это единственное, что сработало для меня! Февраль 2019. Приложение gdown в предыдущих комментариях размещено не кем иным, как Google docs, поэтому его также невозможно загрузить.
Стивен
5

Используйте youtube-dl !

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

Вы также можете пройти, --get-urlчтобы получить URL для прямой загрузки.

aularon
источник
1
@ Конец это все еще работает для меня youtube-dl https://drive.google.com/open?id=ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [GoogleDrive] ABCDEFG1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: Downloading webpage. возможно, у вас устаревшая версия youtube-dlили формат ссылки по какой-то причине не распознан ... Попробуйте использовать формат, указанный выше, заменив идентификатор идентификатором файла из исходного URL
aularon
5

Я использовал фрагмент скручивания @ Amit Chahar, который опубликовал хороший ответ в этой теме. Я нашел полезным поместить его в функцию bash, а не в отдельный .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
}

которые могут быть включены, например, в ~/.bashrc(после выбора источника, если он не получен автоматически) и использоваться следующим образом

   $ curl_gdrive 153bpzybhfqDspyO_gdbcG5CMlI19ASba imagenet.tar
Мгер
источник
Это, вероятно, лучший ответ ... Python Gdown так тяжело по сравнению. Я должен сказать, что я довольно недоволен gdrive, хотя ...
smaudet
1
Вам не нужны ни -f, ни -r в вашей команде rm. Если вы научите людей просто всегда «rm -rf», они могут в конечном итоге удалить то, что хотят сохранить ...
josch
4

Есть мультиплатформенный клиент с открытым исходным кодом, написанный на 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`
Utgarda
источник
4

Все приведенные выше ответы, кажется, затеняют простоту ответа или имеют некоторые нюансы, которые не объясняются.

Если файл открыт для общего доступа, вы можете создать прямую ссылку для скачивания, просто зная идентификатор файла. URL-адрес должен быть в форме « https://drive.google.com/uc?id=[FILEID]&export=download ». Это работает с 11-22-2019. Для этого не требуется, чтобы получатель входил в Google, но для общего доступа к файлу.

  1. В вашем браузере перейдите на drive.google.com.

  2. Щелкните правой кнопкой мыши по файлу и нажмите «Получить общую ссылку»

Щелкните правой кнопкой мыши, чтобы получить ссылку

  1. Откройте новую вкладку, выберите адресную строку и вставьте содержимое буфера обмена, которое станет общей ссылкой. Вы увидите файл, отображаемый программой просмотра Google. Идентификатор - это число перед компонентом «Просмотр» в URL:

введите описание изображения здесь

  1. Измените URL-адрес в следующем формате, заменив «[FILEID]» идентификатором вашего общего файла:

    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
CoderBlue
источник
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. Это работало хорошо для маленьких файлов, но большие файлы заполняли доступный оперативный памяти, поэтому я нашел другой хороший код, который использует API для частичной загрузки. Суть здесь: https://gist.github.com/csik/c4c90987224150e4a0b2

Обратите внимание на загрузку json-файла client_secret из интерфейса 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

Вот небольшой скрипт bash, который я написал, который делает работу сегодня. Он работает с большими файлами и может восстанавливать частично извлеченные файлы. Он принимает два аргумента: первый - 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
Серый Христофоро
источник
Добро пожаловать в ТАК. Если вы использовали какие-либо ссылки для этой цели, пожалуйста, включите их в свой ответ. Во всяком случае, хорошая работа +1
М--
3

Это работает с ноября 2017 года 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
ppetraki
источник
Хотя там указан «исходный URL» и есть некоторый синтаксический анализ, я не пытался понять, что он работает, просто напрямую используя то, что здесь называется fileid, и в других ответах в качестве первого параметра.
январь
@jan Это может означать, что существует более одного стиля URL. Я рад, что это все еще сработало для вас.
ппетраки
3

После возни с этим мусором. Я нашел способ загрузить мой сладкий файл с помощью инструментов разработчика Chrome.

  1. На вкладке "Документы Google" нажмите Ctr + Shift + J (Настройка -> Инструменты разработчика).
  2. Переключиться на вкладки сети
  3. В файле документации нажмите «Загрузить» -> Загрузить как CSV, xlsx, ....
  4. Он покажет вам запрос в консоли «Сеть» введите описание изображения здесь

  5. Щелкните правой кнопкой мыши -> Копировать -> Копировать как завиток

  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

Решено!

Эндер
источник
срок действия этой ссылки истекает и
указывается
Вы можете просто сделать тихий постоянный запрос, чтобы поддержать сеанс. @bluejayke
Эндер
Я сделал именно это, и когда пришел сюда, чтобы написать другой ответ, наткнулся на ваш. Я подтверждаю, что он работает с разными IP-адресами, так как мне нужно было загрузить файл размером 36 ГБ на сервер, на котором нет браузера. И я извлек ссылку с моего ноутбука.
dmitry502
2

Вот обходной путь, по которому я подошел, загрузив файлы с Google Drive в мою оболочку Google Cloud Linux.

  1. Предоставьте общий доступ к файлу в PUBLIC и с правами редактирования, используя расширенный доступ.
  2. Вы получите ссылку для обмена, которая будет иметь идентификатор. Смотрите ссылку: - drive.google.com/file/d/[ID]/view?usp=sharing
  3. Скопируйте этот идентификатор и вставьте его по следующей ссылке: -

googledrive.com/host/[ID]

  1. Приведенная выше ссылка будет нашей ссылкой для скачивания.
  2. Используйте wget для загрузки файла: -

wget https://googledrive.com/host/[ID]

  1. Эта команда загрузит файл с именем [ID] без расширения и с тем же размером файла в том же месте, где вы выполнили команду wget.
  2. На самом деле, я скачал заархивированную папку в моей практике. поэтому я переименовал этот неловкий файл, используя: -

mv [ID] 1.zip

  1. затем с помощью

распаковать 1.zip

мы получим файлы.

Викас Гаутам
источник
http 502 для этого googledrive.com/host/0BwPIpgeJ2AdnUGUzVGJuak5abDg
user2284570
Google забрал хостинг с диска, так что это больше не работает.
Кингери
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 Not Found 2019-02-08 02:56:30 ОШИБКА 404: Not Found. какие-нибудь обходные пути?
блюджайке
ВОТ ЭТО ДА! Отличный ответ и очень логичный. Спасибо, что написали это. Загруженный файл 1,3 ГБ с помощью этой команды ... Полностью автоматический режим с терминала Linux только по этой команде. Также попробовал на GCP. Там тоже отлично работает. Год 2020 ... Я считаю, что это правильный путь ... даже если они меняют немного команд, это должно выдержать испытание временем.
Атта Ютт
2

Есть более простой способ.

Установите cliget / CURLWGET из расширения Firefox / Chrome.

Загрузите файл из браузера. Это создает ссылку curl / wget, которая запоминает файлы cookie и заголовки, используемые при загрузке файла. Используйте эту команду из любой оболочки для загрузки

Еш
источник
Это, без сомнения, самый простой и простой способ.
cdedeas
2

простой способ скачать файл с Google Drive, вы также можете скачать файл на 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/

Jadli
источник
прохладный. но чем он отличается от ответа Фи, который был опубликован за год до твоего?
umläute
1

Май 2018 РАБОТАЕТ

Привет, основываясь на этих комментариях ... я создаю bash для экспорта списка URL из файла URLS.txt в URLS_DECODED.txt который используется в некоторых ускорителях, таких как flashget (я использую cygwin для объединения окон и linux)

Командный паук был введен, чтобы избежать загрузки и получить окончательную ссылку (напрямую)

Команда GREP HEAD и CUT, обработка и получение окончательной ссылки, Основана на испанском языке, может быть, вы могли бы быть портированы на АНГЛИЙСКИЙ ЯЗЫК

echo -e "$URL_TO_DOWNLOAD\r" вероятно, \ r только cywin и должно быть заменено на \ n (разрывная строка)

**********user*********** это папка пользователя

*******Localización*********** на испанском языке, очистите звездочки и дайте слово на английском. Местоположение и адаптируйте ГОЛОВУ и СОЛНЕЧНЫЕ числа, чтобы соответствовать подходу.

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
Пестрый
источник
1

Вам просто нужно использовать wget с:

 https://drive.google.com/uc?authuser=0&id=[your ID without brackets]&export=download

Оплаченный Файл должен быть общедоступным.

Хосе Вальехо
источник
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
Шубхам Бхардвадж
источник