Comment puis-je mettre à jour le contenu des pièces jointes avec l'API python sites google?

StackOverflow https://stackoverflow.com/questions/2001664

  •  18-09-2019
  •  | 
  •  

Question

Je suis en train d'écrire un script qui mettra automatiquement à jour des pièces jointes sur un site créé et géré par Google Sites. Cela devrait être possible que Google a publié le API Sites en Septembre et API Python GData prétend soutenir les sites. Cependant, la méthode la plus proche que je peux trouver est appelé client.update, qui me permet de mettre à jour les métadonnées d'une pièce jointe, mais pas le contenu.

Dans l'API Java mise à jour d'une pièce jointe se fait en créant une nouvelle MediaFileSource puis appeler entry.setMediaFileSource(source) suivi par entry.updateMedia(). Cependant, je ne peux pas trouver quelque chose de semblable dans l'API Python. Suis-je stupide et manque quelque chose, ou est-il vraiment impossible de mettre à jour une pièce jointe de sites Google en utilisant l'API python?

Était-ce utile?

La solution

Sites api a été mis à jour V1.1; ce qui est probablement une nouvelle addition

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

Autres conseils

La documentation un exemple sur la façon dont mettre à jour un contenu de pièce jointe et des métadonnées (le paragraphe Remplacement du contenu et de métadonnées d'une pièce jointe)

La seule chose qui reste à faire est de existing_attachment qui peut être fait facilement avec quelque chose comme ceci:

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, l'API, il est bizarre, et la documentation est pas très claire. Voici ce que j'ai compris. Première fois que vous téléchargez une pièce jointe, vous le faites par la méthode de UploadAttachment, mais les tentatives de suivi, vous devez appeler Mise à jour. Voici le code qu'il fait:

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

Il y a un méthode upload_attachment , qui devrait fonctionner. Vous pouvez également consulter la

scroll top