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é:

  1. du corps de la requête content-type: application/vnd.Google-apps.tableur', media_body content-type:'text/csv'. -- >401 Bad Request

  2. 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

  3. ... (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)

22
demandé sur Zuza 2012-10-07 07:09:27

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

24
répondu Claudio Cherubino 2012-10-08 23:34:38

(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']))
9
répondu wescpy 2017-04-03 07:36:38

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'
7
répondu Talos 2013-04-21 20:27:30

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());
7
répondu Cad 2014-03-11 00:41:42

La meilleure façon de commencer est d'utiliser le formulaire web à https://developers.google.com/drive/v2/reference/files/insert#try-it

0
répondu pinoyyid 2012-10-07 10:30:07