Pregunta

Estoy tratando de escribir un script que actualice automáticamente algunos archivos adjuntos en un sitio web creado y administrado a través de los sitios de Google. Esto debería ser posible a medida que Google lanzó el Sitios API en septiembre y el Python gdata API reclamos de apoyar sitios. Sin embargo, se llama el método más cercano que puedo encontrar client.update, que me permite actualizar los metadatos de un archivo adjunto, pero no el contenido.

En la API de Java, la actualización de un archivo adjunto se realiza creando un nuevo MediaFileSource Y luego llamando entry.setMediaFileSource(source) seguido por entry.updateMedia(). Sin embargo, no puedo encontrar nada similar en la API de Python. ¿Me estoy perdiendo algo y simplemente me falta algo, o realmente no es posible actualizar un archivo adjunto de Google Sites usando la API de Python?

¿Fue útil?

Solución

Sites API se ha actualizado a V1.1; Esta es probablemente una nueva adición

http://code.google.com/apis/sites/docs/1.0/developers_guide_python.html#updatingcontent

Otros consejos

La documentación aquí Proporciona un ejemplo sobre cómo actualizar el contenido y los metadatos de un archivo adjunto (subsección que reemplaza el contenido y los metadatos de un archivo adjunto)

Lo único que queda fuera es obtener existing_attachment que se puede hacer fácilmente con algo como esto:

existing_attachment = None
uri = '%s?kind=%s' % (client.MakeContentFeedUri(), 'attachment')
feed = client.GetContentFeed(uri=uri)
for entry in feed.entry:
  if entry.title.text == title:
    print '%s [%s]' % (entry.title.text, entry.Kind())
    existing_attachment = entry

Ok, la API allí es extraña, y la documentación no es muy clara. Esto es lo que he descubierto. La primera vez que sube un archivo adjunto, lo hace a través del método de carga de carga, pero en los intentos de seguimiento, debe llamar a la actualización. Aquí está el código que lo hace:

class AttachmentUploader(object):
  """Uploads a given attachment to a given filecabinet in Google Sites."""

  def __init__(self, site, username, password):
    self.client = gdata.sites.client.SitesClient(
        source="uploaderScript", site=site)
    self.client.ssl = True
    try:
      self.client.ClientLogin(username, password, "some.key")
    except:
      traceback.print_exc()
      raise

  def FindAttachment(self, title):
    uri = "%s?kind=%s" % (self.client.MakeContentFeedUri(), "attachment")
    feed = self.client.GetContentFeed(uri=uri)
    for entry in feed.entry:
      if entry.title.text == title:
        return entry
    return None

  def FindCabinet(self, title):
    uri = "%s?kind=%s" % (self.client.MakeContentFeedUri(), "filecabinet")
    feed = self.client.GetContentFeed(uri=uri)
    for entry in feed.entry:
      if entry.title.text == title:
        return entry
    return None

  def Upload(self, cabinet_title, title, file_path, description):
    """Upload the given file as attachment."""
    ms = gdata.data.MediaSource(file_path=file_path, content_type="text/ascii")

    existing_attachment = self.FindAttachment(title)
    if existing_attachment is not None:
      existing_attachment.summary.text = description
      updated = self.client.Update(existing_attachment, media_source=ms)
      print "Updated: ", updated.GetAlternateLink().href
    else:
      cabinet = self.FindCabinet(cabinet_title)
      if cabinet is None:
        print "OUCH: cabinet %s does not exist" % cabinet_title
        return
      attachment = self.client.UploadAttachment(
          ms, cabinet, title=title, description=description)
      print "Uploaded: ", attachment.GetAlternateLink().href

Hay un cargar_attachment Método, eso debería funcionar. También es posible que desee ver el Código de muestra Para la API de los sitios, utiliza ese método.

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