Télécharger CSV sur la feuille de calcul GoogleDrive à L'aide de L'API Drive v2
Comment puis-je télécharger un fichier local CSV sur Google Drive en utilisant L'API de lecteur V2 de sorte que le fichier téléchargé est dans le format natif Tableur Google . De préférence en Python, mais une requête HTTP brute suffira.
Ce que j'ai essayé:
-
du corps de la requête content-type: application/vnd.Google-apps.tableur', media_body content-type:'text/csv'. -- >401 Bad Request
-
du corps de la requête content-type: application/vnd.Google-apps.tableur', media_body content-type: 'application/vnd.Google-apps.feuille de calcul'. -- >400 Bad Request
-
... (un couple d'autres tels que laisser une propriété et similaire, généralement obtenu 400 ou conduire ne l'a pas reconnu comme un tableur natif)
5 réponses
votre insert request doit spécifier text/csv
comme le type de contenu.
L'astuce pour obtenir le fichier converti est d'ajouter le ?convert=true
paramètre de requête de l'url de la requête:
https://developers.google.com/drive/v2/reference/files/insert
(Mar 2017) Note, alors que la question porte spécifiquement sur le lecteur API v2, les développeurs doivent savoir que le Google Drive API team released v3 à la fin de 2015, et dans cette version, insert()
changé de nom à create()
afin de mieux refléter le fonctionnement du fichier. Il n'y a plus non plus de drapeau convert -- vous spécifiez juste des MIMEtypes... imaginez que!
la documentation a aussi été améliorée: il ya maintenant un guide spécial consacré aux téléchargements (simple, multipart, et resumable) qui vient avec le code échantillon en Java, Python, PHP, C#/.NET, Ruby, JavaScript/Node.js, et iOS/Obj-C pour télécharger un fichier et un autre qui importe un fichier CSV comme une feuille de Google.
juste pour montrer qu'il est simple, ci-dessous est une solution de Python alternative (à l'échantillon dans les docs) pour les fichiers courts ("téléchargement simple") où vous n'avez pas besoin de apiclient.http.MediaFileUpload
de la classe. Cet extrait suppose que votre code d'auth fonctionne lorsque votre endpoint de service est DRIVE
avec un champ d'auth minimum de https://www.googleapis.com/auth/drive.file
.
# filenames & MIMEtypes
DST_FILENAME = 'inventory'
SRC_FILENAME = DST_FILENAME + '.csv'
SHT_MIMETYPE = 'application/vnd.google-apps.spreadsheet'
CSV_MIMETYPE = 'text/csv'
# Import CSV file to Google Drive as a Google Sheets file
METADATA = {'name': DST_FILENAME, 'mimeType': SHT_MIMETYPE}
rsp = DRIVE.files().create(body=METADATA, media_body=SRC_FILENAME).execute()
if rsp:
print('Imported %r to %r (as %s)' % (SRC_FILENAME, DST_FILENAME, rsp['mimeType']))
la réponse de Claudio Cherubino est correcte -- vous devez ajouter le paramètre manuellement. Puisque vous avez demandé en Python cependant, voici un exemple concret:
body = {
'mimeType':'text/csv',
'title': 'title'
}
# service: your authenticated service
# media: your apiclient.http.MediaFileUpload object, with 'text/csv' mimeType
req = service.files().insert(media_body=media, body=body)
# patch the uri to ensure conversion, as the documented kwarg seems to be borked.
# you may need to use '?convert=true' depending on the uri, not taking that into
# account here for sake of simplicity.
req.uri = req.uri + '&convert=true'
# now we can execute the response.
resp = req.execute()
# should be OK
assert resp['mimeType'] == u'application/vnd.google-apps.spreadsheet'
Java:
//Insert a file
File body = new File();
body.setTitle("CSV");
body.setDescription("A test document");
body.setMimeType("text/csv");
java.io.File fileContent = new java.io.File("document.csv");
FileContent mediaContent = new FileContent("text/csv", fileContent);
Insert insert = service.files().insert(body, mediaContent);
insert.setConvert(true);
File file = insert.execute();
System.out.println("File ID: " + file.getId());
La meilleure façon de commencer est d'utiliser le formulaire web à https://developers.google.com/drive/v2/reference/files/insert#try-it