¿Cómo se crea un documento en Google Docs mediante programación?

Resuelto snoopy asked hace 14 años • 4 respuestas

La documentación de la API de la lista de documentos de Google parece decir que puede crear un documento local y cargarlo. ¿No hay forma de crear y editar un documento en Google Docs a través de una API?

snoopy avatar Apr 24 '10 22:04 snoopy
Aceptado

Si bien los documentos lo llaman "cargar", todo se reduce a enviar una HTTP POSTsolicitud con el formato adecuado, por lo que , por supuesto, puede ser una nueva creación en lugar de una "carga" real de un archivo que de otro modo ya existiría. (La creación a través de POSTsolicitudes es similar a lo que normalmente se describe como REST API, aunque en realidad RESTnormalmente usarías una PUTsolicitud en lugar de, por supuesto).

Solo necesita crear una masa de datos que represente su documento en cualquiera de los formatos enumerados aquí (dependiendo de su lenguaje de programación, el más simple puede ser text/csvpara una hoja de cálculo y application/rtfun documento de texto) y luego ingresar los POSTdatos con el formato adecuado. Por ejemplo, para crear una hoja de cálculo de la forma más sencilla (sin metadatos), podrías hacer POSTalgo como:

POST /feeds/default/private/full HTTP/1.1
Host: docs.google.com
GData-Version: 3.0
Authorization: <your authorization header here>
Content-Length: 81047
Content-Type: text/csv
Slug: Example Spreadsheet

ColumnA, ColumnB
23, 45

Cada lenguaje de programación específico para el cual se proporciona una API dedicada puede ofrecer ayuda con esta tarea no tan difícil; por ejemplo, en Python, según los documentos , la API recomienda su uso ETagspara evitar sobrescribir cambios cuando varios clientes están "cargando" simultáneamente (es decir, creando o actualizando documentos). Pero siempre es posible preparar el POST directamente, ya que la API casi REST está documentada como el protocolo subyacente a todas las API específicas del idioma.

Alex Martelli avatar Apr 24 '2010 15:04 Alex Martelli

La respuesta de Alex, aunque indudablemente correcta, plantea la pregunta: "¿cómo hago eso a través de la API de Google Docs?"

Aquí hay una manera (en Python, porque soy ese tipo de persona):

import gdata.docs.service
import StringIO

client = gdata.docs.service.DocsService()
client.ClientLogin(username, password,
                   source='Spreadsheet Creation Example')

content = 'COL_A, COL_B, COL_C, COL_D\ndata1, data2, data3, data4'
ms = gdata.MediaSource(file_handle=StringIO.StringIO(content),
                       content_type='text/csv',
                       content_length=len(content))
entry = client.Upload(ms, 'Test Spreadsheet')

Esta es una pequeña combinación de técnicas que encontré en http://code.google.com/p/gdata-python-client/source/browse/tests/gdata_tests/docs/service_test.py , que a su vez encontré a través de este publicación del Grupo de Google para la API de GData Docs.

Las ideas clave (para mí al menos) fueron:

  1. darse cuenta de que el parámetro formal "file_handle" del constructor de MediaSource tomará cualquier objeto similar a un archivo, y
  2. descubrir (como menciona el seguimiento del OP a la publicación del Grupo Google) que las pruebas unitarias son una gran fuente de ejemplos

(No pude encontrar la guía para desarrolladores específica de Python a la que hace referencia el enlace del documento de Alex; posiblemente se haya perdido o se haya enterrado en el movimiento de recursos de documentación de Google de code.google.com a desarrolladores.google.com. El enlace de Alex ahora redirige al documento más genérico que muestra principalmente ejemplos de .NET y Java, pero solo un poco de Python).

Hephaestus avatar Jun 07 '2012 23:06 Hephaestus