web-dev-qa-db-fra.com

Télécharger un fichier CSV sur une feuille de calcul Google Drive à l'aide de l'API Drive v2

Comment puis-je télécharger un fichierCSVlocal sur Google Drive à l'aide de l'API Drive v2 afin que le fichier téléchargé soit au format natif de Google Spreadsheet . De préférence en Python, mais une requête HTTP brute suffira.

Ce que j'ai essayé:

  1. corps de la demande type de contenu: "application/vnd.google-apps.spreadsheet", type de contenu média_body: "text/csv". -> 401 mauvaise demande

  2. corps de la demande content-type: 'application/vnd.google-apps.spreadsheet', media_body content-type: 'application/vnd.google-apps.spreadsheet'. -> 400 mauvaise demande

  3. ... (deux ou trois personnes telles que laisser une propriété à l’extérieur et similaire, obtenaient généralement 400 ou Drive ne la reconnaissait pas comme une feuille de calcul native)

23
Zuza

Votre demande d'insertion doit spécifier text/csv comme type de contenu. L'astuce pour convertir le fichier consiste à ajouter le paramètre de requête ?convert=true à l'URL de la requête:

https://developers.google.com/drive/v2/reference/files/insert

24

(Mars 2017) Remarque, alors que la question concerne spécifiquement Drive API v2, les développeurs doivent savoir que le API Google Drive team publié v3 à la fin de 2015, et dans cette version, insert() a changé le nom en create() afin de mieux refléter l'opération de fichier. Il n'y a pas non plus d'indicateur de conversion: vous spécifiez simplement des types MIME ... imaginez cela!

La documentation a également été améliorée: il existe maintenant un guide spécial consacré aux téléchargements (simple, en plusieurs parties et pouvant être repris) qui est fourni avec un exemple de code 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 en tant que feuille Google.

Voici une solution de rechange Python (à l’exemple de la documentation) pour les fichiers courts («téléchargement simple») pour lesquels vous n’avez pas besoin de la classe apiclient.http.MediaFileUpload. Cet extrait suppose que votre code d'authentification fonctionne lorsque votre point de terminaison de service est DRIVE avec une étendue d'authentification minimale 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']))
10
wescpy

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
Cad

La réponse de Claudio Cherubino est correcte - vous devez ajouter le paramètre manuellement. Depuis que vous avez demandé en Python, 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
Talos

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

0
pinoyyid