web-dev-qa-db-fra.com

Comment télécharger une URL de Google Drive via curl ou wget

Existe-t-il un moyen de télécharger une URL de Google Drive visualisable publiquement via curl ou wget? Par exemple, être capable de faire quelque chose comme:

curl -O myfile.xls https://drive.google.com/uc?export=download&id=1Wb2NfKTQr_dLoFJH0GfM0cx-t4r07IVl

Remarque: je souhaite effectuer cette opération sur un fichier accessible au public sans devoir me connecter à mon compte Google (ni laisser quelqu'un d'autre se connecter à son compte, etc.).

Si utile, les en-têtes cors que j'ai sont:

 "kind": "drive#file",
 "id": "1Wb2NfKTQr_dLoFJH0GfM0cx-t4r07IVl",
9
David542

Vous devez utiliser le commutateur -L pour que curl suive les redirections, et le commutateur correct pour le nom de fichier est -o. Vous devriez également citer l'URL:

 curl -L -o myfile.xls "https://drive.google.com/uc?export=download&id=0B4fk8L6brI_eX1U5Ui1Lb1FpVG8"
8
Martin Broadhurst

Que diriez-vous de cette méthode? Lorsque le fichier est aussi volumineux, Google renvoie un code pour le télécharger. Vous pouvez télécharger le fichier en utilisant le code. Lorsqu'un fichier aussi volumineux est téléchargé à l'aide de curl, vous pouvez voir le code comme suit.

<a id="uc-download-link" class="goog-inline-block jfk-button jfk-button-action" href="/uc?export=download&amp;confirm=ABCD&amp;id=### file ID ###">download</a>

La requête avec confirm=ABCD est importante pour télécharger le fichier. Ce code est également inclus dans le cookie. Au cookie, vous pouvez le voir comme suit.

#HttpOnly_.drive.google.com TRUE    /uc TRUE    #####   download_warning_#####  ABCD

Dans ce cas, "ABCD" est le code. Afin de récupérer le code du cookie et de télécharger le fichier, vous pouvez utiliser le script suivant.

Exemple de script:

#!/bin/bash
fileid="### file id ###"
filename="MyFile.csv"
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}

Si ce n'était pas utile pour vous, je suis désolé.

29
Tanaike

Je viens de vérifier la réponse de @tanaike et cela fonctionne à merveille. Mais la solution proposée par @Martin Broadhurst et acceptée par topicstarter ne l’est pas.

Comme Google affiche l'avertissement concernant l'analyse antivirus, qui doit être traitée, un script soc est requis.

J'aimerais voter pour la réponse de @ tanaike, mais je n'ai pas assez de réputation pour le faire :)

De plus, pour ceux qui ne savent pas comment obtenir et l'identifiant d'un fichier sur google drive, j'aimerais partager cette connaissance assez simple.

  1. allez dans votre gDrive
  2. faites un clic droit dessus et sélectionnez "Option de partage"
  3. choisissez un partage public pour tous, qui ont un lien sans connexion requise
  4. copier l'URL https://drive.google.com/file/d/1FNUZiDDDDDSSSSSSAAAAAdv42Qgzb6n8d/view?usp=sharing

  5. collez-le dans un bloc-notes

  6. L'ID fait partie de l'URL: 1FNUZiDDDDDDSSSSSSAAAAAAAdv42Qgzb6n8d

Prendre plaisir!

2
Konstantyn