Comment puis-je mettre à jour le contenu des pièces jointes avec l'API python sites google?
-
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?
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