Python-Leitfaden

Wichtig:Dieses Dokument wurde vor 2012 verfasst. Die in diesem Dokument beschriebenen Authentifizierungsoptionen (OAuth 1.0, AuthSub und ClientLogin) wurden am 20. April 2012 offiziell eingestellt und sind nicht mehr verfügbar. Wir empfehlen, so schnell wie möglich zu OAuth 2.0 zu migrieren.

Mit der Google Sites Data API können Clientanwendungen auf Inhalte in einer Google Sites-Website zugreifen, diese veröffentlichen und ändern. Ihre Clientanwendung kann auch eine Liste der letzten Aktivitäten anfordern, den Änderungsverlauf abrufen und Anhänge herunterladen.

Dieser Leitfaden bietet nicht nur einen Überblick über die Funktionen der Sites Data API, sondern auch Beispiele für die Interaktion mit der API mithilfe der Python-Clientbibliothek. Hilfe zum Einrichten der Clientbibliothek finden Sie unter Erste Schritte mit der Google Data-Clientbibliothek für Python. Weitere Informationen zum zugrunde liegenden Protokoll, das von der Python-Clientbibliothek für die Interaktion mit der klassischen Sites API verwendet wird, finden Sie im Protokollleitfaden.

Zielgruppe

Dieses Dokument richtet sich an Entwickler, die Clientanwendungen schreiben möchten, die mit Google Sites über die Google Data Python-Clientbibliothek interagieren.

Erste Schritte

Zur Verwendung der Python-Clientbibliothek benötigen Sie Python 2.2 oder höher sowie die auf der Wiki-Seite DependencyModules aufgeführten Module. Nachdem Sie die Clientbibliothek heruntergeladen haben, finden Sie unter Einstieg in die Google Data Python Library Informationen zur Installation und Verwendung des Clients.

Beispiel ausführen

Ein vollständiges funktionsfähiges Beispiel befindet sich im Unterverzeichnis samples/sites des Mercurial-Repositorys des Projekts (/samples/sites/sites_example.py).

Führen Sie das Beispiel so aus:

python sites_example.py
# or
python sites_example.py --site [sitename] --domain [domain or "site"] --debug [prints debug info if set]

Wenn die erforderlichen Flags nicht angegeben werden, werden Sie von der App aufgefordert, diese Werte einzugeben. Mit dem Beispiel können Nutzer eine Reihe von Vorgängen ausführen, die die Verwendung der klassischen Sites API veranschaulichen. Daher müssen Sie sich authentifizieren, um bestimmte Vorgänge ausführen zu können, z. B. Inhalte zu ändern. Außerdem werden Sie aufgefordert, sich über AuthSub, OAuth oder ClientLogin zu authentifizieren.

Wenn Sie die Beispiele in diesem Leitfaden in Ihren eigenen Code einbinden möchten, benötigen Sie die folgenden import-Anweisungen:

import atom.data
import gdata.sites.client
import gdata.sites.data

Außerdem müssen Sie ein SitesClient-Objekt einrichten, das eine Clientverbindung zur klassischen Sites API darstellt. Geben Sie den Namen Ihrer Anwendung und den Webspace-Namen der Website (aus der URL) an:

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName')

Wenn Sie mit einer Website arbeiten möchten, die auf einer G Suite-Domain gehostet wird, legen Sie die Domain mit dem Parameter domain fest:

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName', domain='example.com')

In den obigen Snippets ist das Argument source optional, wird aber zu Protokollierungszwecken empfohlen. Er sollte folgendermaßen formatiert sein: company-applicationname-version.

Hinweis: In diesem Leitfaden wird davon ausgegangen, dass Sie ein SitesClient-Objekt in der Variablen client erstellt haben.

Bei der klassischen Sites API authentifizieren

Die Python-Clientbibliothek kann sowohl mit öffentlichen als auch mit privaten Feeds verwendet werden. Die Sites Data API bietet Zugriff auf private und öffentliche Feeds, je nach den Berechtigungen einer Website und dem gewünschten Vorgang. So können Sie beispielsweise den Inhaltsfeed einer öffentlichen Website lesen, aber keine Änderungen daran vornehmen. Dafür ist ein authentifizierter Client erforderlich. Dies kann über die Nutzername/Passwort-Authentifizierung ClientLogin, AuthSub oder OAuth erfolgen.

Weitere Informationen zu AuthSub, OAuth und ClientLogin finden Sie in der Übersicht zur Authentifizierung bei Google Data APIs.

AuthSub für Webanwendungen

Die AuthSub-Authentifizierung für Webanwendungen sollte von Clientanwendungen verwendet werden, die ihre Nutzer bei Google- oder G Suite-Konten authentifizieren müssen. Der Operator benötigt keinen Zugriff auf den Nutzernamen und das Passwort für den Google Sites-Nutzer – nur ein AuthSub-Token ist erforderlich.

Anleitung zum Einbinden von AuthSub in Ihre Webanwendung

Einmaliges Token anfordern

Wenn der Nutzer Ihre Anwendung zum ersten Mal aufruft, muss er sich authentifizieren. Normalerweise drucken Entwickler Text und einen Link aus, über den der Nutzer zur AuthSub-Genehmigungsseite weitergeleitet wird, um sich zu authentifizieren und Zugriff auf seine Dokumente anzufordern. Die Google Data Python-Clientbibliothek bietet die Funktion generate_auth_sub_url() zum Generieren dieser URL. Mit dem folgenden Code wird ein Link zur Seite AuthSubRequest eingerichtet.

import gdata.gauth

def GetAuthSubUrl():
  next = 'http://www.example.com/myapp.py'
  scopes = ['https://sites.google.com/feeds/']
  secure = True
  session = True
  return gdata.gauth.generate_auth_sub_url(next, scopes, secure=secure, session=session)

print '<a href="%s">Login to your Google account</a>' % GetAuthSubUrl()

Wenn Sie Nutzer in einer von G Suite gehosteten Domain authentifizieren möchten, übergeben Sie den Domainnamen an generate_auth_sub_url():

def GetAuthSubUrl():
  domain = 'example.com'
  next = 'http://www.example.com/myapp.py'
  scopes = ['https://sites.google.com/feeds/']
  secure = True
  session = True
  return gdata.gauth.generate_auth_sub_url(next, scopes, secure=secure, session=session, domain=domain)

Die Methode generate_auth_sub_url() verwendet mehrere Parameter, die den Abfrageparametern des AuthSubRequest-Handlers entsprechen:

  • next: URL, zu der Google weiterleitet, nachdem sich der Nutzer in seinem Konto angemeldet und Zugriff gewährt hat; http://www.example.com/myapp.py im Beispiel oben
  • Umfang: https://sites.google.com/feeds/
  • secure: ein boolescher Wert, der angibt, ob das Token im sicheren und registrierten Modus verwendet wird oder nicht; True im obigen Beispiel
  • session: Eine zweite boolesche Variable, die angibt, ob das Einmaltoken später gegen ein Sitzungstoken eingetauscht wird oder nicht; True im Beispiel oben

Upgrade auf ein Sitzungstoken

Weitere Informationen finden Sie unter AuthSub mit den Google Data API-Clientbibliotheken verwenden.

Informationen zu einem Sitzungstoken abrufen

Weitere Informationen finden Sie unter AuthSub mit den Google Data API-Clientbibliotheken verwenden.

Sitzungstoken widerrufen

Siehe AuthSub mit den Google Data API-Clientbibliotheken verwenden

Tipp: Nachdem Ihre Anwendung ein langlebiges Sitzungstoken abgerufen hat, speichern Sie es in Ihrer Datenbank, um es später wiederverwenden zu können. Sie müssen den Nutzer nicht bei jedem Ausführen Ihrer Anwendung zu AuthSub zurücksenden. Mit client.auth_token = gdata.gauth.AuthSubToken(TOKEN_STR) kannst du ein vorhandenes Token auf dem Client festlegen.

OAuth für Webanwendungen oder installierte/mobile Anwendungen

OAuth kann als Alternative zu AuthSub verwendet werden und ist für Webanwendungen bestimmt. OAuth ähnelt der Verwendung des sicheren und registrierten Modus von AuthSub insofern, als alle Datenanfragen digital signiert werden und Sie Ihre Domain registrieren müssen.

Anleitung zur Integration von OAuth in Ihrer installierten Anwendung

Anfragetoken abrufen

Weitere Informationen finden Sie unter OAuth mit den Google Data API-Clientbibliotheken verwenden.

Anfragetoken autorisieren

Siehe OAuth mit den Google Data API-Clientbibliotheken verwenden.

Auf ein Zugriffstoken umstellen

Siehe OAuth mit den Google Data API-Clientbibliotheken verwenden.

Tipp: Nachdem Ihre Anwendung ein OAuth-Zugriffstoken abgerufen hat, speichern Sie dieses Token in Ihrer Datenbank, um es später wiederverwenden zu können. Sie müssen den Nutzer nicht bei jedem Ausführen Ihrer Anwendung über OAuth zurücksenden. Mit client.auth_token = gdata.oauth.OAuthToken(TOKEN_STR, TOKEN_SECRET) kannst du ein vorhandenes Token auf dem Client festlegen.

ClientLogin für installierte/mobile Anwendungen

ClientLogin sollte von installierten oder mobilen Anwendungen verwendet werden, die ihre Nutzer bei Google-Konten authentifizieren müssen. Beim ersten Start wird der Nutzer von Ihrer App aufgefordert, seinen Nutzernamen und sein Passwort einzugeben. Bei nachfolgenden Anfragen wird auf ein Authentifizierungstoken verwiesen.

Anleitung zur Integration von ClientLogin in Ihre installierte Anwendung

Wenn Sie ClientLogin verwenden möchten, rufen Sie die Methode ClientLogin() des SitesClient-Objekts auf, die von GDClient übernommen wird. Geben Sie die E-Mail-Adresse und das Passwort des Nutzers an, in dessen Namen Ihr Kunde Anfragen stellt. Beispiel:

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1')
client.ClientLogin('user@gmail.com', 'pa$$word', client.source);

Tipp: Nachdem die Anwendung den Nutzer zum ersten Mal erfolgreich authentifiziert hat, speichern Sie das Authentifizierungstoken in Ihrer Datenbank, um es später wiederverwenden zu können. Der Nutzer muss nicht bei jeder Ausführung Ihrer Anwendung zur Eingabe seines Passworts aufgefordert werden. Weitere Informationen finden Sie unter Authentifizierungstoken zurückrufen.

Weitere Informationen zur Verwendung von ClientLogin in Ihren Python-Anwendungen finden Sie unter ClientLogin mit den Google Data API-Client-Bibliotheken verwenden.

Nach oben

Websitefeed

Im Websitefeed können die Google Sites aufgeführt werden, deren Inhaber ein Nutzer ist oder für die er Leseberechtigungen hat. Außerdem können Sie damit den Namen einer vorhandenen Website ändern. Für G Suite-Domains kann damit auch eine ganze Website erstellt und/oder kopiert werden.

Websites auflisten

Verwenden Sie die GetSiteFeed()-Methode des Clients, um die Websites aufzulisten, auf die ein Nutzer Zugriff hat. Die Methode verwendet das optionale Argument uri, mit dem Sie einen alternativen Websitefeed-URI angeben können. Standardmäßig verwendet GetSiteFeed() den Websitenamen und die Domain, die für das Clientobjekt festgelegt sind. Weitere Informationen zum Festlegen dieser Werte für Ihr Clientobjekt finden Sie im Abschnitt Erste Schritte.

Hier ist ein Beispiel für das Abrufen der Websiteliste des authentifizierten Nutzers:

feed = client.GetSiteFeed()

for entry in feed.entry:
  print '%s (%s)' % (entry.title.text, entry.site_name.text)
  if entry.summary.text:
    print 'description: ' + entry.summary.text
  if entry.FindSourceLink():
    print 'this site was copied from site: ' + entry.FindSourceLink()
  print 'acl feed: %s\n' % entry.FindAclLink()
  print 'theme: ' + entry.theme.text

Das Snippet oben gibt den Titel der Website, den Namen der Website, die Website, von der sie kopiert wurde, und die zugehörige ACL-Feed-URI aus.

Neue Websites erstellen

Hinweis: Diese Funktion ist nur für G Suite-Domains verfügbar.

Neue Websites können bereitgestellt werden, indem die CreateSite()-Methode der Bibliothek aufgerufen wird. Ähnlich wie der Helper GetSiteFeed() akzeptiert CreateSite() auch ein optionales Argument, uri, mit dem Sie einen alternativen Websitefeed-URI angeben können, wenn Sie die Website unter einer anderen Domain als derjenigen erstellen, die für Ihr SitesClient-Objekt festgelegt ist.

Hier siehst du ein Beispiel für die Erstellung einer neuen Website mit dem Thema „Slate“ sowie einem Titel und einer (optionalen) Beschreibung:

client.domain = 'example2.com'  # demonstrates creating a site under a different domain.

entry = client.CreateSite('Title For My Site', description='Site to hold precious memories', theme='slate')
print 'Site created! View it at: ' + entry.GetAlternateLink().href

Mit der obigen Anfrage wird eine neue Website unter der G Suite-Domain example2.com erstellt. Die URL der Website wäre also https://sites.google.com/a/beispiel2.de/titel-für-meine-website.

Wenn die Website erfolgreich erstellt wurde, antwortet der Server mit einem gdata.sites.data.SiteEntry-Objekt, das vom Server hinzugefügte Elemente enthält: einen Link zur Website, einen Link zum ACL-Feed der Website, den Namen der Website, den Titel, die Zusammenfassung usw.

Website kopieren

Hinweis: Diese Funktion ist nur für G Suite-Domains verfügbar.

Mit CreateSite() lässt sich auch eine vorhandene Website kopieren. Übergeben Sie dazu das Keyword-Argument source_site. Alle kopierten Websites haben diesen Link, auf den über entry.FindSourceLink() zugegriffen werden kann. Hier sehen Sie ein Beispiel für das Duplizieren der Website, die im Abschnitt Neue Websites erstellen erstellt wurde:

copied_site = client.CreateSite('Copy of Title For My Site', description='My Copy', source_site=entry.FindSourceLink())
print 'Site copied! View it at: ' + copied_site.GetAlternateLink().href

Wichtige Punkte:

  • Nur Websites und Websitevorlagen, die dem authentifizierten Nutzer gehören, können kopiert werden.
  • Auch eine Website-Vorlage kann kopiert werden. Eine Website ist eine Vorlage, wenn die Einstellung "Diese Website als Vorlage veröffentlichen" in den Google Sites-Einstellungen aktiviert ist.
  • Sie können Websites von einer anderen Domain kopieren, sofern Sie auf der Quellwebsite als Inhaber aufgeführt sind.

Metadaten einer Website aktualisieren

Wenn Sie den Titel oder die Zusammenfassung einer Website aktualisieren möchten, benötigen Sie eine SiteEntry mit der betreffenden Website. In diesem Beispiel wird mit der Methode GetEntry() zuerst eine SiteEntry abgerufen und dann der Titel, die Beschreibung und das Kategorie-Tag geändert:

uri = 'https://sites.google.com/feeds/site/example2.com/title-for-my-site'
site_entry = client.GetEntry(uri, desired_class=gdata.sites.data.SiteEntry)

site_entry.title.text = 'Better Title'
site_entry.summary.text = 'Better Description'
category_name = 'My Category'
category = atom.data.Category(
    scheme=gdata.sites.data.TAG_KIND_TERM,
    term=category_name)
site_entry.category.append(category)
updated_site_entry = client.Update(site_entry)

# To force the update, even if you do not have the latest changes to the entry:
# updated_site_entry = client.Update(site_entry, force=True)

Nach oben

Aktivitätsfeed abrufen

Hinweis: Sie benötigen Zugriff als Mitbearbeiter oder Inhaber der Website, um auf diesen Feed zugreifen zu können. Ihr Client muss sich mit einem AuthSub-, OAuth- oder ClientLogin-Token authentifizieren. Weitere Informationen finden Sie unter Authentifizierung beim Sites-Dienst.

Sie können die letzten Aktivitäten (Änderungen) einer Website abrufen, indem Sie den Aktivitätsfeed abrufen. Die GetActivityFeed()-Methode der Bibliothek bietet Zugriff auf diesen Feed:

print "Fetching activity feed of '%s'...\n" % client.site
feed = client.GetActivityFeed()

for entry in feed.entry:
  print '%s [%s on %s]' % (entry.title.text, entry.Kind(), entry.updated.text)

Der Aufruf von GetActivityFeed() gibt ein gdata.sites.data.ActivityFeed-Objekt mit einer Liste von gdata.sites.data.ActivityEntry zurück. Jeder Aktivitätseintrag enthält Informationen zu einer Änderung, die an der Website vorgenommen wurde.

Nach oben

Überarbeitungsverlauf wird abgerufen

Hinweis: Sie benötigen Zugriff als Mitbearbeiter oder Inhaber der Website, um auf diesen Feed zugreifen zu können. Ihr Client muss sich mit einem AuthSub-, OAuth- oder ClientLogin-Token authentifizieren. Weitere Informationen finden Sie unter Authentifizierung beim Sites-Dienst.

Der Überarbeitungsfeed enthält Informationen zum Überarbeitungsverlauf für jeden Inhaltseintrag. Mit der Methode GetRevisionFeed() können Sie die Versionen für einen bestimmten Inhaltseintrag abrufen. Die Methode nimmt einen optionalen Parameter uri an, der einen gdata.sites.data.ContentEntry, einen vollständigen URI eines Inhaltseintrags oder eine Inhaltseintrags-ID akzeptiert.

In diesem Beispiel wird der Inhaltsfeed abgefragt und der Rezensionsfeed für den ersten Inhaltseintrag abgerufen:

print "Fetching content feed of '%s'...\n" % client.site
content_feed = client.GetContentFeed()
content_entry = content_feed.entry[0]

print "Fetching revision feed of '%s'...\n" % content_entry.title.text
revision_feed = client.GetRevisionFeed(content_entry)

for entry in revision_feed.entry:
  print entry.title.text
  print ' new version on:\t%s' % entry.updated.text
  print ' view changes:\t%s' % entry.GetAlternateLink().href
  print ' current version:\t%s...\n' % str(entry.content.html)[0:100]

Wenn Sie GetRevisionFeed() aufrufen, wird ein gdata.sites.data.RevisionFeed-Objekt mit einer Liste von gdata.sites.data.RevisionEntry zurückgegeben. Jeder Revisionseintrag enthält Informationen wie den Inhalt der jeweiligen Version, die Versionsnummer und das Datum, an dem die neue Version erstellt wurde.

Nach oben

Inhaltsfeed

Inhaltsfeed abrufen

Hinweis: Für den Inhaltsfeed ist möglicherweise eine Authentifizierung erforderlich. Das hängt von den Freigabeberechtigungen der Website ab. Wenn die Website nicht öffentlich ist, muss sich Ihr Client mit einem AuthSub-, OAuth- oder ClientLogin-Token authentifizieren. Weitere Informationen finden Sie unter Authentifizierung beim Sites-Dienst.

Der Inhaltsfeed gibt die neuesten Inhalte einer Website zurück. Sie können darauf zugreifen, indem Sie die GetContentFeed()-Methode der lib-Bibliothek aufrufen. Dabei wird ein optionaler uri-Stringparameter zum Übergeben einer benutzerdefinierten Abfrage verwendet.

Hier ist ein Beispiel, wie Sie den gesamten Content-Feed abrufen und einige interessante Elemente ausdrucken können:

print "Fetching content feed of '%s'...\n" % client.site
feed = client.GetContentFeed()

for entry in feed.entry:
  print '%s [%s]' % (entry.title.text, entry.Kind())

  # Common properties of all entry kinds.
  print ' content entry id: ' + entry.GetNodeId()
  print ' revision:\t%s' % entry.revision.text
  print ' updated:\t%s' % entry.updated.text

  if entry.page_name:
    print ' page name:\t%s' % entry.page_name.text

  if entry.content:
    print ' content\t%s...' % str(entry.content.html)[0:100]

  # Subpages/items will have a parent link.
  parent_link = entry.FindParentLink()
  if parent_link:
    print ' parent link:\t%s' % parent_link

  # The alternate link is the URL pointing to Google Sites.
  if entry.GetAlternateLink():
    print ' view in Sites:\t%s' % entry.GetAlternateLink().href

  # If this entry is a filecabinet, announcementpage, etc., it will have a feed of children.
  if entry.feed_link:
    print ' feed of items:\t%s' % entry.feed_link.href

  print

Tipp: Mit entry.Kind() können Sie den Typ eines Eintrags ermitteln.

Das resultierende feed-Objekt ist eine gdata.sites.data.ContentFeed mit einer Liste von gdata.sites.data.ContentEntry. Jeder Eintrag steht für eine andere Seite/einen anderen Artikel auf der Website des Nutzers und enthält Elemente, die für die Art des Eintrags spezifisch sind. In der Beispielanwendung finden Sie weitere Informationen zu einigen der Eigenschaften, die für jede Art von Eintrag verfügbar sind.

Nach oben

Beispiele für Content-Feed-Abfragen

Sie können den Content-Feed mit einigen der standardmäßigen Google Data API-Abfrageparameter und solchen, die für die klassische Sites API spezifisch sind, durchsuchen. Weitere Informationen und eine vollständige Liste der unterstützten Parameter finden Sie im Referenzhandbuch.

Hinweis: In den Beispielen in diesem Abschnitt wird die Hilfsmethode gdata.sites.client.MakeContentFeedUri() zum Erstellen des Basis-URI des Content-Feeds verwendet.

Bestimmte Arten von Einträgen abrufen

Wenn Sie nur einen bestimmten Eintragstyp abrufen möchten, verwenden Sie den Parameter kind. Dieses Snippet gibt beispielsweise nur attachment Einträge zurück:

kind = 'webpage'

print 'Fetching only %s entries' % kind
uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind)
feed = client.GetContentFeed(uri=uri)

Wenn Sie mehrere Typen zurückgeben möchten, trennen Sie die einzelnen kind durch Kommas. Dieses Snippet gibt beispielsweise die Einträge filecabinet und listpage zurück:

kind = ','.join(['filecabinet', 'listpage'])

print 'Fetching only %s entries' % kind
uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind)
feed = client.GetContentFeed(uri=uri)

Seiten per Pfad abrufen

Wenn Sie den relativen Pfad einer Seite auf der Google-Website kennen, können Sie mit dem Parameter path diese Seite abrufen. In diesem Beispiel wird die Seite unter http://sites.google.com/domainName/siteName/path/to/the/page zurückgegeben:

path = '/path/to/the/page'

print 'Fetching page by its path: ' + path
uri = '%s?path=%s' % (client.MakeContentFeedUri(), path)
feed = client.GetContentFeed(uri=uri)

Alle Einträge unter einer übergeordneten Seite abrufen

Wenn Sie die Inhaltseintrags-ID einer Seite kennen (z.B. „1234567890“ im Beispiel unten), können Sie mit dem Parameter parent alle untergeordneten Einträge abrufen (falls vorhanden):

parent = '1234567890'

print 'Fetching all children of parent entry: ' + parent
uri = '%s?parent=%s' % (client.MakeContentFeedUri(), parent)
feed = client.GetContentFeed(uri=uri)

Weitere Parameter finden Sie im Referenzhandbuch.

Nach oben



Inhalte erstellen

Hinweis:Bevor Sie Inhalte für eine Website erstellen, prüfen Sie, ob Sie Ihre Website im Client festgelegt haben.
client.site = "siteName"

Neue Inhalte (Webseiten, Listenseiten, Ordner, Ankündigungsseiten usw.) können mit CreatePage() erstellt werden. Das erste Argument für diese Methode sollte die Art der zu erstellenden Seite sein, gefolgt vom Titel und ihrem HTML-Inhalt.

Eine Liste der unterstützten Knotentypen finden Sie im Referenzhandbuch im Parameter kind.

Neue Elemente / Seiten erstellen

In diesem Beispiel wird ein neues webpage-Element unter der obersten Ebene erstellt. Außerdem enthält es XHTML für den Seitentext und als Titel der Überschrift wird „New WebPage Title“ festgelegt:

entry = client.CreatePage('webpage', 'New WebPage Title', html='<b>HTML content</b>')
print 'Created. View it at: %s' % entry.GetAlternateLink().href

Wenn die Anfrage erfolgreich ist, enthält entry eine Kopie des auf dem Server erstellten Eintrags als gdata.sites.gdata.ContentEntry.

Wenn Sie eine komplexere Datensatzart erstellen möchten, die beim Erstellen ausgefüllt wird (z. B. eine listpage mit Spaltenüberschriften), müssen Sie die gdata.sites.data.ContentEntry manuell erstellen, die gewünschten Properties eingeben und client.Post() aufrufen.

Elemente/Seiten unter benutzerdefinierten URL-Pfaden erstellen

Standardmäßig wird das vorherige Beispiel unter der URL http://sites.google.com/domainName/siteName/new-webpage-title erstellt und hat den Seitentitel „Neuer Seitentitel“. Das heißt, der Titel wird für die URL auf new-webpage-title normalisiert. Wenn Sie den URL-Pfad einer Seite anpassen möchten, können Sie die Property page_name für den Inhaltseintrag festlegen. Der CreatePage()-Helfer bietet dies als optionales Keyword-Argument an.

In diesem Beispiel wird eine neue filecabinet-Seite mit der Überschrift „File Storage“ erstellt. Die Seite wird jedoch unter der URL http://sites.google.com/domainName/siteName/files (anstelle von http://sites.google.com/domainName/siteName/file-storage) erstellt. Dazu wird das Attribut page_name angegeben.

entry = client.CreatePage('filecabinet', 'File Storage', html='<b>HTML content</b>', page_name='files')
print 'Created. View it at: ' + entry.GetAlternateLink().href

Der Server verwendet die folgenden Vorrangregeln für die Benennung des URL-Pfads einer Seite:

  1. page_name, falls vorhanden. Muss a-z, A-Z, 0-9, -, _ erfüllen.
  2. title, darf nicht null sein, wenn kein Seitenname vorhanden ist. Normalisierung besteht darin, Leerzeichen auf „-“ zu entfernen und zu minimieren und Zeichen zu entfernen, die nicht mit a-z, A-Z, 0-9, -, _ übereinstimmen.

Unterseiten erstellen

Wenn Sie Unterseiten (untergeordnete Seiten) unter einer übergeordneten Seite erstellen möchten, verwenden Sie das Keyword-Argument parent von CreatePage(). parent kann entweder eine gdata.sites.gdata.ContentEntry oder ein String sein, der die vollständige Selbst-ID des Eintrags des Inhalts darstellt.

In diesem Beispiel wird der Inhaltsfeed nach announcementpages abgefragt und eine neue announcement unter der ersten gefundenen erstellt:

uri = '%s?kind=%s' % (client.MakeContentFeedUri(), 'announcementpage')
feed = client.GetContentFeed(uri=uri)

entry = client.CreatePage('announcement', 'Party!!', html='My place, this weekend', parent=feed.entry[0])
print 'Posted!'

Dateien hochladen

Wie in Google Sites unterstützt die API das Hochladen von Anhängen an eine Ordnerseite oder eine übergeordnete Seite. Anhänge müssen auf eine übergeordnete Seite hochgeladen werden. Daher müssen Sie auf der ContentEntry, die Sie hochladen möchten, einen übergeordneten Link festlegen. Weitere Informationen finden Sie unter Unterseiten erstellen.

Die UploadAttachment()-Methode der Clientbibliothek bietet die Schnittstelle zum Hochladen von Anhängen.

Anhänge werden hochgeladen

In diesem Beispiel wird eine PDF-Datei in die erste filecabinet hochgeladen, die im Inhaltsfeed des Nutzers gefunden wird. Der Anhang wird mit dem Titel „New Employee Handbook“ und der (optionalen) Beschreibung „HR-Paket“ erstellt.

uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'filecabinet')
feed = client.GetContentFeed(uri=uri)

attachment = client.UploadAttachment('/path/to/file.pdf', feed.entry[0], content_type='application/pdf',
                                     title='New Employee Handbook', description='HR Packet')
print 'Uploaded. View it at: %s' % attachment.GetAlternateLink().href

Wenn der Upload erfolgreich war, enthält attachment eine Kopie des erstellten Anhangs auf dem Server.

Anhang in einen Ordner hochladen

Ordner in Google Sites unterstützen Ordner. UploadAttachment() bietet ein zusätzliches Schlüsselwortargument folder_name, mit dem Sie einen Anhang in einen filecabinet-Ordner hochladen können. Geben Sie dazu einfach den Namen des Ordners an:

import gdata.data

ms = gdata.data.MediaSource(file_path='/path/to/file.pdf', content_type='application/pdf')
attachment = client.UploadAttachment(ms, feed.entry[0], title='New Employee Handbook',
                                     description='HR Packet', folder_name='My Folder')

In diesem Beispiel wird ein gdata.data.MediaSource-Objekt anstelle eines Dateipfads an UploadAttachment() übergeben. Es wird auch kein Inhaltstyp übergeben. Stattdessen wird der Inhaltstyp im MediaSource-Objekt angegeben.

Webanhänge

Webanhänge sind spezielle Arten von Anhängen. Im Wesentlichen handelt es sich dabei um Links zu anderen Dateien im Web, die Sie Ihren filecabinet-Einträgen hinzufügen können. Diese Funktion entspricht der Uploadmethode Datei per URL hinzufügen in der Google Sites-Benutzeroberfläche.

Hinweis: Webanhänge können nur unter einer filecabinet erstellt werden. Sie können nicht auf andere Seitentypen hochgeladen werden.

In diesem Beispiel wird ein Webanhang unter der ersten filecabinet erstellt, die im Inhaltsfeed des Nutzers gefunden wird. Der Titel und die (optionale) Beschreibung sind auf „GoogleLogo“ und „schöne Farben“ festgelegt.

uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'filecabinet')
feed = client.GetContentFeed(uri=uri)

parent_entry = feed.entry[0]
image_url = 'http://www.google.com/images/logo.gif'
web_attachment = client.CreateWebAttachment(image_url, 'image/gif', 'GoogleLogo',
                                            parent_entry, description='nice colors')

print 'Created!'

Durch den Aufruf wird ein Link erstellt, der auf das Bild unter "http://www.google.com/images/logo.gif" im filecabinet verweist.

Nach oben



Inhalte aktualisieren

Metadaten und/oder HTML-Inhalte einer Seite aktualisieren

Die Metadaten (title, pageName usw.) und Seiteninhalte jeder Eintragsart können mit der Update()-Methode des Clients bearbeitet werden.

Im folgenden Beispiel wird eine listpage-Datei mit den folgenden Änderungen aktualisiert:

  • Der Titel wird in „Aktualisierter Titel“ geändert.
  • Der HTML-Inhalt der Seite wird auf „Aktualisierte HTML-Inhalte“ aktualisiert
  • Die erste Spaltenüberschrift der Liste wird in „Inhaber“ geändert.
uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'listpage')
feed = client.GetContentFeed(uri=uri)

old_entry = feed.entry[0]

# Update the listpage's title, html content, and first column's name.
old_entry.title.text = 'Updated Title'
old_entry.content.html = 'Updated HTML Content'
old_entry.data.column[0].name = 'Owner'

# You can also change the page's webspace page name on an update.
# old_entry.page_name = 'new-page-path'

updated_entry = client.Update(old_entry)
print 'List page updated!'

Inhalt und Metadaten eines Anhangs ersetzen

Sie können den Dateiinhalt eines Anhangs ersetzen, indem Sie ein neues MediaSource-Objekt mit dem neuen Dateiinhalt erstellen und die Update()-Methode des Clients aufrufen. Auch die Metadaten des Anhangs (z. B. Titel und Beschreibung) können aktualisiert werden. In diesem Beispiel wird gezeigt, wie Dateiinhalte und Metadaten gleichzeitig aktualisiert werden:

import gdata.data

# Load the replacement content in a MediaSource. Also change the attachment's title and description.
ms = gdata.data.MediaSource(file_path='/path/to/replacementContent.doc', content_type='application/msword')
existing_attachment.title.text = 'Updated Document Title'
existing_attachment.summary.text = 'version 2.0'

updated_attachment = client.Update(existing_attachment, media_source=ms)
print "Attachment '%s' changed to '%s'" % (existing_attachment.title.text, updated_attachment.title.text)

Nach oben



Inhalte löschen

Wenn du eine Seite oder ein Element von einer Google Sites-Website entfernen möchtest, rufe zuerst den Inhaltseintrag ab und rufe dann die Methode Delete() des Clients auf.

client.Delete(content_entry)

Sie können auch die Methode Delete() des Links edit des Inhaltseintrags übergeben und/oder das Löschen erzwingen:

# force=True sets the If-Match: * header instead of using the entry's ETag.
client.Delete(content_entry.GetEditLink().href, force=True)

Weitere Informationen zu ETags finden Sie im Referenzhandbuch für Google Data APIs.

Nach oben



Anhänge herunterladen

Jeder attachment-Eintrag enthält einen Inhaltslink src, über den der Dateiinhalt heruntergeladen werden kann. Der Sites-Client enthält eine Hilfsmethode, mit der Sie über diesen Link auf die Datei zugreifen und sie herunterladen können: DownloadAttachment(). Als erstes Argument wird ein gdata.sites.data.ContentEntry- oder Download-URI und als zweites Argument ein Dateipfad zum Speichern des Anhangs akzeptiert.

In diesem Beispiel wird ein bestimmter Anhangseintrag abgerufen (durch Abfrage des self-Links) und die Datei wird an den angegebenen Pfad heruntergeladen:

uri = 'https://sites.google.com/feeds/content/site/siteName/1234567890'
attachment = client.GetEntry(uri, desired_class=gdata.sites.data.ContentEntry)

print "Downloading '%s', a %s file" % (attachment.title.text, attachment.content.type)
client.DownloadAttachment(attachment, '/path/to/save/test.pdf')

print 'Downloaded!'

Es liegt in der Verantwortung des App-Entwicklers, eine Dateiendung anzugeben, die für den Inhaltstyp des Anhangs sinnvoll ist. Den Inhaltstyp finden Sie unter entry.content.type.

In einigen Fällen können Sie die Datei möglicherweise nicht auf die Festplatte herunterladen, z. B. wenn Ihre App in der Google App Engine ausgeführt wird. Verwenden Sie in diesen Fällen _GetFileContent(), um den Dateiinhalt abzurufen und im Arbeitsspeicher zu speichern.

Dieser Beispieldownload ist ein Anhang in der Erinnerung.

try:
  file_contents = client._GetFileContent(attachment.content.src)
  # TODO: Do something with the file contents
except gdata.client.RequestError, e:
  raise e

Nach oben

ACL-Feed

Freigabeberechtigungen (ACLs) – Übersicht

Jeder ACL-Eintrag im ACL-Feed stellt eine Zugriffsrolle eines bestimmten Elements dar, entweder eines Nutzers, einer Gruppe von Nutzern, einer Domain oder des Standardzugriffs (eine öffentliche Website). Einträge werden nur für Entitäten mit explizitem Zugriff angezeigt. Auf dem Bildschirm „Teilen“ der Google Sites-Benutzeroberfläche wird im Bereich „Personen mit Zugriff“ jeweils ein Eintrag für jede E-Mail-Adresse angezeigt. Daher werden Domainadministratoren nicht angezeigt, obwohl sie impliziten Zugriff auf eine Website haben.

Rollen

Das Rollenelement stellt eine Zugriffsebene dar, die eine Entität haben kann. Das Element gAcl:role hat vier mögliche Werte:

  • reader: Betrachter (entspricht Lesezugriff).
  • writer – ein Mitbearbeiter (entspricht Lese-/Schreibzugriff).
  • owner: in der Regel der Website-Administrator (entspricht Lese-/Schreibzugriff).

Ebenen

Das Element „scope“ stellt die Entität dar, die diese Zugriffsebene hat. Es gibt vier mögliche Typen von gAcl:scope-Elementen:

  • user: E-Mail-Adresse, z. B. „user@gmail.com“.
  • group – eine E-Mail-Adresse einer Google-Gruppe, z. B. „gruppe@domain.com“.
  • domain – ein G Suite-Domainname, z. B. „domain.com“.
  • default: Es gibt nur einen möglichen Gültigkeitsbereich vom Typ „default“, der keinen Wert hat (z. B. <gAcl:scope type="default">). Mit diesem Gültigkeitsbereich wird der Zugriff gesteuert, den alle Nutzer standardmäßig auf eine öffentliche Website haben.

Hinweis: Für Domains darf der Wert gAcl:role nicht auf den Zugriff „Inhaber“ gesetzt sein. Sie können nur Leser oder Autoren sein.

ACL-Feed abrufen

Mit dem ACL-Feed können die Freigabeberechtigungen einer Website gesteuert werden. Er kann mit der Methode GetAclFeed() abgerufen werden.

Im folgenden Beispiel wird der ACL-Feed für die Website abgerufen, die derzeit für das Objekt SitesClient festgelegt ist, und die Berechtigungseinträge werden ausgegeben:

print "Fetching acl permissions of site '%s'...\n" % client.site

feed = client.GetAclFeed()
for entry in feed.entry:
  print '%s (%s) - %s' % (entry.scope.value, entry.scope.type, entry.role.value)

Nach einer erfolgreichen Abfrage ist feed ein gdata.sites.data.AclFeed-Objekt mit einer Liste von gdata.sites.data.AclEntry.

Wenn Sie mit Einträgen im SiteFeed arbeiten, enthält jeder SiteEntry einen Link zum entsprechenden ACL-Feed. In diesem Snippet wird beispielsweise die erste Website im Websitefeed des Nutzers abgerufen und der ACL-Feed abgefragt:

feed = client.GetSiteFeed()
site_entry = feed.entry[0]

print "Fetching acl permissions of site '%s'...\n" % site_entry.site_name.text
feed = client.GetAclFeed(uri=site_entry.FindAclLink())

Website freigeben

Hinweis: Bestimmte ACLs für die Freigabe sind möglicherweise nur möglich, wenn die Domain so konfiguriert ist, dass solche Berechtigungen zulässig sind (z. B. wenn die Freigabe außerhalb der Domain für G Suite-Domains aktiviert ist).

Wenn Sie eine Google-Website über die API freigeben möchten, erstellen Sie eine gdata.sites.gdata.AclEntry mit den gewünschten Werten für gdata.acl.data.AclScope und gdata.acl.data.AclRole. Im Abschnitt ACL-Feed – Übersicht finden Sie die möglichen Werte für AclScope und AclRoles.

In diesem Beispiel werden dem Nutzer „nutzer@beispiel.de“ Leseberechtigungen für die Website gewährt:

import gdata.acl.data

scope = gdata.acl.data.AclScope(value='user@example.com', type='user')
role = gdata.acl.data.AclRole(value='reader')
acl = gdata.sites.gdata.AclEntry(scope=scope, role=role)

acl_entry = client.Post(acl, client.MakeAclFeedUri())
print "%s %s added as a %s" % (acl_entry.scope.type, acl_entry.scope.value, acl_entry.role.value)

Freigabe auf Gruppen- und Domainebene

Ähnlich wie beim Freigeben einer Website für einen einzelnen Nutzer können Sie eine Website für eine Google-Gruppe oder G Suite-Domain freigeben. Die erforderlichen scope-Werte sind unten aufgeführt.

Beim Teilen mit einer Gruppen-E-Mail-Adresse geschieht Folgendes:

scope = gdata.acl.data.AclScope(value='group_name@example.com', type='group')

Freigabe für eine gesamte Domain:

scope = gdata.acl.data.AclScope(value='example.com', type='domain')

Die Freigabe auf Domainebene wird nur für G Suite-Domains und nur für die Domain unterstützt, auf der die Website gehostet wird. Beispiel: Unter http://sites.google.com/a/domain1.com/siteA kann die gesamte Website nur für domain1.com freigegeben werden, nicht für domain2.com. Bei Websites, die nicht auf einer G Suite-Domain gehostet werden (z. B. http://sites.google.com/site/siteB), können keine Domains eingeladen werden.

Freigabeberechtigungen ändern

Wenn Sie eine vorhandene Freigabeberechtigung für eine Website ändern möchten, müssen Sie zuerst die entsprechende AclEntry abrufen, die Berechtigung nach Bedarf ändern und dann die Update()-Methode des Clients aufrufen, um die ACL auf dem Server zu ändern.

In diesem Beispiel wird unsere vorherige acl_entry aus dem Abschnitt Website teilen geändert, indem „user@beispiel.de“ zum Mitbearbeiter (Bearbeiter) aktualisiert wird:

acl_entry.role.value = 'writer'
updated_acl = client.Update(acl_entry)

# To force the update, even if you do not have the latest changes to the entry:
# updated_acl = client.Update(acl_entrys, force=True)

Weitere Informationen zu ETags finden Sie im Referenzhandbuch für Google Data APIs.

Freigabeberechtigungen entfernen

Wenn du eine Freigabeberechtigung entfernen möchtest, musst du zuerst die AclEntry abrufen und dann die Delete()-Methode des Clients aufrufen.

client.Delete(acl_entry)

Sie können auch die Delete()-Methode des edit-Links des ACL-Eintrags übergeben und/oder das Löschen erzwingen:

# force=True sets the If-Match: * header instead of using the entry's ETag.
client.Delete(acl_entry.GetEditLink().href, force=True)

Weitere Informationen zu ETags finden Sie im Referenzhandbuch für Google Data APIs.

Nach oben

Besondere Themen

Feed oder Eintrag noch einmal abrufen

Wenn Sie einen Feed oder Eintrag abrufen möchten, den Sie schon einmal abgerufen haben, können Sie die Effizienz verbessern, indem Sie dem Server mitteilen, dass er die Liste oder den Eintrag nur senden soll, wenn er sich seit dem letzten Abruf geändert hat.

Wenn Sie eine solche bedingte Abfrage ausführen möchten, geben Sie einen ETag-Wert an GetEntry() weiter. Angenommen, Sie haben bereits ein entry-Objekt:

import gdata.client

try:
  entry = client.GetEntry(entry.GetSelfLink().href, desired_class=gdata.sites.data.ContentEntry, etag=entry.etag)
except gdata.client.NotModified, error:
  print 'You have the latest copy of this entry'
  print error

Wenn GetEntry() die gdata.client.NotModified-Ausnahme auslöst, stimmt das ETag des Eintrags mit der Version auf dem Server überein. Sie haben also die aktuellste Kopie. Wenn jedoch ein anderer Client/Nutzer Änderungen vorgenommen hat, wird der neue Eintrag in entry zurückgegeben und es wird keine Ausnahme ausgelöst.

Weitere Informationen zu ETags finden Sie im Referenzhandbuch für Google Data APIs.

Nach oben