Frage

Ich versuche, ein Skript zu schreiben, das einige Anhänge automatisch auf einer Website aktualisiert, die über Google -Websites erstellt und verwaltet wird. Dies sollte möglich sein, wenn Google die veröffentlicht hat Standorte API im September und die Python Gdata API Ansprüche, Websites zu unterstützen. Die nächstgelegene Methode, die ich finden kann, heißt jedoch client.update, was es mir ermöglicht, die Metadaten eines Anhangs zu aktualisieren, aber nicht den Inhalt.

In der Java -API wird ein Anhang aktualisiert, indem ein neues erstellt wird MediaFileSource und dann rufen entry.setMediaFileSource(source) gefolgt von entry.updateMedia(). Ich kann jedoch in der Python -API nichts Ähnliches finden. Bin ich dumm und fehlt nur etwas oder ist es wirklich nicht möglich, einen Google -Websites -Anhang mit der Python -API zu aktualisieren?

War es hilfreich?

Lösung

Die API der Sites wurde auf v1.1 aktualisiert; Dies ist wahrscheinlich ein neuer Zusatz

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

Andere Tipps

Die Dokumentation hier Bietet ein Beispiel zum Aktualisieren des Inhalts und der Metadaten eines Anhangs (Unterabschnitt, der den Inhalt eines Anhangs und die Metadaten ersetzt)

Das einzige, was ausgelassen wird, ist zu bekommen existing_attachment was leicht mit so etwas erfolgen kann:

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, die API dort ist seltsam und die Dokumentation ist nicht sehr klar. Hier ist, was ich herausgefunden habe. Wenn Sie zum ersten Mal einen Anhang hochladen, tun Sie dies über die UploadAtachment-Methode, aber bei den Follow-up-Versuchen müssen Sie Update anrufen. Hier ist der Code, der es tut:

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

Da ist ein Upload_Attachment Methode, das sollte funktionieren. Möglicherweise möchten Sie auch das überprüfen Beispielcode Für Sites -API wird diese Methode verwendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top