for - Cargue CSV a la hoja de cálculo de Google Drive con la API de Drive v2
google drive api upload file example (5)
¿Cómo puedo cargar un archivo CSV local en Google Drive utilizando Drive API v2 para que el archivo cargado se encuentre en el formato nativo de Google Spreadsheet ? Preferiblemente en Python, pero una solicitud HTTP sin procesar será suficiente.
Lo que probé:
cuerpo de solicitud tipo-contenido: ''application / vnd.google-apps.spreadsheet'', media_body content-type: ''text / csv''. -> 401 Mala solicitud
cuerpo de solicitud tipo de contenido: ''application / vnd.google-apps.spreadsheet'', media_body content-type: ''application / vnd.google-apps.spreadsheet''. -> 400 Solicitud incorrecta
... (un par de otros como dejar una propiedad y similares, por lo general obtuvieron 400 o Drive no lo reconoció como una hoja de cálculo nativa)
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 mejor forma de comenzar es utilizando el formulario web en https://developers.google.com/drive/v2/reference/files/insert#try-it
La respuesta de Claudio Cherubino es correcta: debe agregar el parámetro manualmente. Sin embargo, dado que preguntaste en Python, aquí hay un ejemplo concreto:
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''
(Mar 2017) Tenga en cuenta que, aunque la pregunta específicamente sobre Drive API v2, los desarrolladores deben saber que el equipo de la API de Google Drive lanzó v3 a finales de 2015, y en esa versión, insert()
cambió los nombres para create()
para reflejar mejor la operación de archivo. Tampoco hay más indicador de conversión: solo debes especificar MIMEtypes ... ¡imagínate!
La documentación también se ha mejorado: ahora hay una guía especial dedicada a las cargas (simple, multiparte y reanudable) que viene con código de muestra en Java, Python, PHP, C # /. NET, Ruby, JavaScript / Node.js, y iOS / Obj-C para cargar un archivo y otro que importa un archivo CSV como una hoja de Google.
Para mostrar que es sencillo, a continuación se muestra una solución alternativa de Python (para la muestra en los documentos) para archivos cortos ("carga simple") donde no necesita la clase apiclient.http.MediaFileUpload
. Este fragmento asume que su código de autenticación funciona donde su punto final del servicio es DRIVE
con un alcance de autenticación mínimo 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'']))
Su solicitud de inserción debe especificar text/csv
como el tipo de contenido. El truco para convertir el archivo es agregar el parámetro de consulta ?convert=true
a la URL de solicitud:
https://developers.google.com/drive/v2/reference/files/insert