Pregunta

Necesito cargar un archivo / documento a Google Docs en una aplicación GAE.Esto debería ser lo suficientemente simple, pero estoy teniendo muchos problemas con la API.

El contexto:

import gdata.docs.service

client = gdata.docs.service.DocsService()
client.ClientLogin('gmail', 'pass')

ms = gdata.MediaSource(#what goes in here?)
client.Upload(media_source=ms, title='title')

Subir Estoy usando client.Upload(), que toma un objeto MediaSource (envoltura) como parámetro.Sin embargo, MediaSource() parece aceptar solo un filepath para un documento: 'C:/Docs/ex.doc'.

Dado que estoy en Gae sin sistema de archivos, solo puedo acceder al archivo a través de Blobstore o una URL directa al archivo.Pero, ¿cómo ingreso eso en MediaSource()?

Parece que hay una Manera en Java para lograr esto usando MediaByteArraySource(), pero nada para Python.

¿Fue útil?

Solución

Si alguien es curioso, aquí es cómo resolví este problema usando la Lista de documentos API.

No quería usar el drive sdk ya que hace complicaciones muchas cosas.Es mucho más sencillo con la LISTA API para autenticar / iniciar sesión sin la necesidad de un truco de OAUTH.Esto está utilizando la versión 2.0.14 de la GDATA Python Library ,que no es la versión actual (2.0.17), pero parece tener un mecanismo de carga más simple.

También hay documentación ligeramente más (aún escasez) en línea para 2.0.14, aunque tuve que arreglar esto juntos de varias fuentes y prueba y error.El inconveniente es que no puede cargar PDF's con esta versión.Este código no será trabajar con 2.0.17.

Aquí está el código:

import gdata.docs.service
import gdata.docs.data
from google.appengine.api import urlfetch

# get file from url
result = urlfetch.fetch('http://example.com/test.docx')
headers = result.headers
data = result.content

# authenticate client object
client = gdata.docs.service.DocsService()
client.ClientLogin('gmail', 'password')

# create MediaSource file wrapper
ms = gdata.MediaSource(file_handle=result.content, 
content_type=headers['content-type'], 
content_length=int(headers['content-length']))

# upload specific folder, return URL of doc
google_doc_name = 'title'
folder_uri = '/feeds/folders/private/full/folder:j7XO8SJj...'
entry = client.Upload(ms, google_doc_name, folder_or_uri=secret.G_FOLDER_URI)
edit_url = entry.GetAlternateLink().href

Otros consejos

Los documentos de Google Drive SDK incluyen una aplicación de muestra completa escrita en Python que se ejecuta en el motor de la aplicación:

https://developers.google.com/dive/examples/python

Puede usarlo como referencia para su implementación y ver cómo guardar un archivo del motor de la aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top