Wie aktualisiere ich Anhangsinhalte mit der Google Sites Python API?
-
18-09-2019 - |
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?
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.