Python-Leitfaden

Wichtig:Dieses Dokument wurde vor 2012 verfasst. Authentifizierungsoptionen der in diesem Dokument beschriebenen Methoden (OAuth 1.0, AuthSub und ClientLogin) wurden offiziell eingestellt seit dem 20. April 2012 und sind nicht mehr verfügbar. Wir empfehlen Ihnen, zu OAuth 2.0 möglichst bald verwenden.

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

Zusätzlich zu einigen Hintergrundinformationen zu den Funktionen der Sites Data API enthält dieses Handbuch 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 Wenn Sie sich für Weitere Informationen zum zugrunde liegenden Protokoll, das von der Python-Clientbibliothek für die Interaktion mit der klassischen Sites API verwendet wird, finden Sie in der Protokollleitfaden.

Zielgruppe

Dieses Dokument richtet sich an Entwickler, die Client-Anwendungen schreiben möchten, die mit Google Sites interagieren. mit der Google Data-Clientbibliothek für Python.

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. Führen Sie nach dem Herunterladen der Clientbibliothek folgende Schritte aus: Informationen zur Installation und Verwendung des Clients finden Sie unter Erste Schritte mit der Python-Bibliothek für Google-Daten.

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 sind, werden Sie von der App aufgefordert, diese Werte einzugeben. Das Beispiel ermöglicht es dem Nutzer, eine Reihe von Vorgängen auszuführen, und zeigen, wie Sie die API für das klassische Google Sites verwenden. Daher ist für bestimmte Vorgänge (z.B. das Ändern von Inhalten) eine Authentifizierung erforderlich. Das Programm Sie werden auch aufgefordert, sich über AuthSub, OAuth oder ClientLogin

Um die Beispiele aus diesem Leitfaden in Ihren eigenen Code zu integrieren, 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. Übergeben Sie den Namen Ihrer Anwendung und den Webspace-Namen der Website (aus ihrer URL):

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

Wenn Sie mit einer Website arbeiten möchten, die in einer G Suite-Domain gehostet wird, legen Sie die Domain mithilfe des Parameters 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 folgendes Format verwenden: 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 für die Arbeit mit öffentlichen oder privaten Feeds verwendet werden. Die Sites Data API bietet Zugriff auf private und öffentliche Daten -Feeds abhängig von den Berechtigungen der Website und dem Vorgang, den Sie durchführen möchten. Vielleicht können Sie den Content-Feed von eine öffentliche Website ist, aber keine Aktualisierungen daran vornehmen. Dies erfordert einen authentifizierten Client. Dies kann über Nutzername/Passwort-Authentifizierung für ClientLogin, AuthSub oder OAuth.

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

AuthSub für Webanwendungen

Die AuthSub-Authentifizierung für Webanwendungen sollte von Client-Anwendungen genutzt werden, die ihre Nutzer bei Google- oder G Suite-Konten zu authentifizieren. Der Betreiber benötigt keinen Zugriff auf den Nutzernamen und das Passwort für den Google Sites-Nutzer, sondern nur ein AuthSub-Token ist erforderlich.

Anleitung zum Einbinden von AuthSub in Ihre Webanwendung

Einmal-Token anfordern

Wenn der Nutzer Ihre Anwendung zum ersten Mal aufruft, muss er sich authentifizieren. In der Regel drucken Entwickler einen Text und einen Link, über den die Nutzer weitergeleitet werden. zur AuthSub-Genehmigungsseite, um den Nutzer zu authentifizieren und den Zugriff auf seine Dokumente anzufordern. Die Google Data-Client-Bibliothek für Python bietet eine Funktion, generate_auth_sub_url(), um diese URL zu generieren. 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)

Für die Methode generate_auth_sub_url() sind mehrere Parameter erforderlich, die den Suchparametern entsprechen, die vom AuthSubRequest-Handler):

  • die nächste URL – URL, zu der Google weiterleitet Nachdem sich der Nutzer in seinem Konto angemeldet und ihm Zugriff gewährt hat http://www.example.com/myapp.py im obigen Beispiel
  • scopehttps://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: ein zweiter boolescher Wert, der angibt, ob das Einmal-Token später gegen ein Sitzungstoken ausgetauscht wird oder nicht True im obigen Beispiel

Upgrade auf ein Sitzungstoken

Siehe AuthSub mit den Google Data API-Clientbibliotheken verwenden

Informationen zu einem Sitzungstoken abrufen

Siehe AuthSub mit den Google Data API-Clientbibliotheken verwenden

Sitzungstoken widerrufen

Siehe AuthSub mit den Google Data API-Clientbibliotheken verwenden

Tipp: Sobald Ihre Anwendung erfolgreich ein langlebiges Sitzungstoken erhalten hat, das Token in Ihrer Datenbank speichern, um es zur späteren Verwendung abzurufen. Es ist nicht erforderlich, den Nutzer bei jeder Ausführung Ihrer Anwendung zurück zu AuthSub zu senden. Verwenden Sie client.auth_token = gdata.gauth.AuthSubToken(TOKEN_STR), um ein vorhandenes Token auf dem Client festzulegen.

OAuth für Web- 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. dass alle Datenanfragen digital signiert werden und Sie Ihre Domain registrieren müssen.

Anleitung zur Integration von OAuth in Ihrer installierten Anwendung

Anfragetoken abrufen

Siehe OAuth mit den Google Data API-Clientbibliotheken verwenden.

Anfragetoken autorisieren

Siehe OAuth mit den Google Data API-Clientbibliotheken verwenden.

Upgrade auf ein Zugriffstoken

Siehe OAuth mit den Google Data API-Clientbibliotheken verwenden.

Tipp: Sobald Ihre Anwendung ein OAuth-Zugriffstoken abgerufen hat, das Token in Ihrer Datenbank speichern, um es zur späteren Verwendung abzurufen. Es ist nicht erforderlich, den Nutzer bei jeder Ausführung Ihrer Anwendung über OAuth zurückzusenden. Verwenden Sie client.auth_token = gdata.oauth.OAuthToken(TOKEN_STR, TOKEN_SECRET), um ein vorhandenes Token auf dem Client festzulegen.

ClientLogin für installierte/mobile Anwendungen

ClientLogin sollte von installierten oder mobilen Apps verwendet werden, die eine ihre Nutzer bei Google-Konten zu authentifizieren. Bei der ersten Ausführung fordert Ihre Anwendung den Nutzer zur Eingabe seines Nutzernamens und Passworts auf. Bei nachfolgenden Anfragen auf ein Authentifizierungstoken verwiesen wird.

Anleitung zur Integration von ClientLogin in Ihre installierte Anwendung

Um ClientLogin zu verwenden, rufen Sie den ClientLogin() -Methode des SitesClient-Objekts, das von GDClient Geben Sie die E-Mail-Adresse und Passwort des Nutzers, 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 Ihre Anwendung den Nutzer zum ersten Mal erfolgreich authentifiziert hat, speichern Sie das Authentifizierungstoken in Ihrer Datenbank, um es zur späteren Verwendung abzurufen. 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

Website-Feed

Mit dem Website-Feed können die Google Sites-Websites aufgelistet werden, die einem Nutzer gehören oder für die er Leseberechtigungen hat. Außerdem kann damit der Name einer vorhandenen Site geändert werden. Für G Suite-Domains lässt sich damit auch ein für die gesamte Website.

Websites auflisten

Mit der GetSiteFeed()-Methode des Clients können Sie die Websites auflisten, auf die ein Nutzer Zugriff hat. Die Methode verwendet einen optionalen Argument, uri, das Sie verwenden können, um einen alternativen Website-Feed-URI anzugeben. Standardmäßig ist die GetSiteFeed() verwendet den Websitenamen und die Domain, die für das Clientobjekt festgelegt wurden. Im Abschnitt Erste Schritte finden Sie Weitere Informationen zum Festlegen dieser Werte für Ihr Clientobjekt.

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 ACL-Feed-URI aus.

Neue Websites erstellen

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

Neue Websites können durch Aufrufen der CreateSite()-Methode der Bibliothek bereitgestellt werden. Ähnlich wie beim Hilfsprogramm GetSiteFeed() akzeptiert CreateSite() auch eine Das optionale Argument uri, mit dem Sie eine alternative Website-Feed-URI angeben können (beim Erstellen die Website unter einer anderen Domain als der, die in Ihrem SitesClient-Objekt festgelegt ist).

Hier ist ein Beispiel für die Erstellung einer neuen Website mit dem Thema „Slate“. und eine Titel und (optional) 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 würde eine neue Website unter der G Suite-Domain example2.com erstellt werden. 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, gibt der Server die Meldung gdata.sites.data.SiteEntry zurück. -Objekt, das mit Elementen gefüllt ist, die vom Server hinzugefügt wurden: ein Link zur Website, ein Link zum ACL-Feed der Website, Namen der Website, Titel, 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. Dazu übergeben Sie das Schlüsselwortargument source_site. Alle Websites, die kopiert werden, haben diesen Link, auf den über entry.FindSourceLink() zugegriffen werden kann. Hier ist ein Beispiel für das Duplizieren die im Abschnitt Neue Websites erstellen erstellt wurden:

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 Hinweise:

  • Nur Websites und Websitevorlagen, die dem authentifizierten Nutzer gehören, können kopiert werden.
  • Eine Websitevorlage kann auch kopiert werden. Eine Website ist eine Vorlage, wenn die Option „Diese Website als Vorlage veröffentlichen“ Einstellung auf der Google Sites-Einstellungsseite 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

Um den Titel oder die Zusammenfassung einer Website zu aktualisieren, benötigst du ein SiteEntry, das die betreffende Website enthält. Dieses Im Beispiel wird die Methode GetEntry() verwendet, um zuerst ein SiteEntry-Objekt abzurufen und dann den Titel, die Beschreibung und das Kategorie-Tag zu ändern:

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 wird abgerufen

Hinweis: Damit Sie auf diesen Feed zugreifen können, müssen Sie Mitbearbeiter oder Inhaber der Website sein. Ihr Client muss sich mithilfe eines AuthSub-, OAuth- oder ClientLogin-Tokens authentifizieren. Weitere Informationen finden Sie unter Beim Google Sites-Dienst authentifizieren.

Sie können die letzten Aktivitäten (Änderungen) einer Website abrufen, indem Sie den Aktivitätsfeed abrufen. Die Methode GetActivityFeed() 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 Jeder Aktivitätseintrag enthält Informationen zu die an der Website vorgenommen wurde.

Nach oben

Überarbeitungsverlauf wird abgerufen

Hinweis: Damit Sie auf diesen Feed zugreifen können, müssen Sie Mitbearbeiter oder Inhaber der Website sein. Ihr Client muss sich mithilfe eines AuthSub-, OAuth- oder ClientLogin-Tokens authentifizieren. Weitere Informationen finden Sie unter Beim Google Sites-Dienst authentifizieren.

Der Überarbeitungsfeed enthält Informationen zum Überarbeitungsverlauf für jeden Inhaltseintrag. Das GetRevisionFeed() kann verwendet werden, um die Überarbeitungen für einen bestimmten Inhaltseintrag abzurufen. Die Methode verwendet einen optionalen uri-Wert -Parameter, der einen gdata.sites.data.ContentEntry, einen vollständigen URI eines Inhaltseintrags oder eine Inhaltseintrags-ID akzeptiert.

In diesem Beispiel wird der Content-Feed abgefragt und der Überarbeitungsfeed für den ersten Content-Eintrag 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]

Der Aufruf von GetRevisionFeed() gibt ein gdata.sites.data.RevisionFeed-Objekt mit einer Liste von gdata.sites.data.RevisionEntry Jeder Versionseintrag enthält Informationen, z. B. den Inhalt die Versionsnummer und das Datum, an dem die neue Version erstellt wurde.

Nach oben

Inhaltsfeed

Content-Feed abrufen

Hinweis: Für den Content-Feed ist möglicherweise eine Authentifizierung erforderlich. abhängig von den Freigabeberechtigungen der Website. Ist die Website nicht öffentlich, muss sich Ihr Client mithilfe eines AuthSub-, OAuth- oder ClientLogin-Tokens authentifizieren. Weitere Informationen finden Sie unter Beim Google Sites-Dienst authentifizieren

Der Content-Feed gibt den neuesten Content einer Website zurück. Sie können darauf zugreifen, indem Sie die Methode GetContentFeed(), die einen optionalen uri-Stringparameter zur Übergabe eine benutzerdefinierte Abfrage.

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() kann der Typ eines Eintrags bestimmt werden.

Das resultierende feed-Objekt ist eine gdata.sites.data.ContentFeed mit einer Liste von gdata.sites.data.ContentEntry. Jeder Eintrag repräsentiert eine andere Seite bzw. ein anderes Element innerhalb der Website des Nutzers enthält und über Elemente verfügt, die für die Art des Eintrags spezifisch sind. Eine bessere Idee finden Sie in der Beispielanwendung. einiger der für jeden Eintragstyp verfügbaren Eigenschaften.

Nach oben

Beispiele für Suchanfragen in Content-Feeds

Sie können den Content-Feed mithilfe einiger standardmäßiger Suchparameter für die Google Data API durchsuchen. und die für die klassische Google Sites API. Ausführlichere Informationen und eine vollständige Liste der unterstützten Parameter finden Sie in der Referenzhandbuch.

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

Bestimmte Eintragstypen abrufen

Wenn Sie nur einen bestimmten Eintragstyp abrufen möchten, verwenden Sie den Parameter kind. Beispielsweise gibt dieses Snippet 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 filecabinet und listpage Einträge:

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

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

Seite über Pfad abrufen

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

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 den Parameter parent verwenden. , um alle untergeordneten Einträge abzurufen (falls vorhanden):

parent = '1234567890'

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

Informationen zu weiteren Parametern 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, das XHTML für den Seitentext enthält. und legt den Titel der Überschrift auf "New WebPage Title" fest:

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 Eintragart erstellen möchten, die beim Erstellen ausgefüllt wird (z.B. eine listpage mit Spaltenüberschriften), müssen Sie einen die gdata.sites.data.ContentEntry manuell, geben Sie die gewünschten Properties ein und rufen Sie client.Post() auf.

Elemente/Seiten unter benutzerdefinierten URL-Pfaden erstellen

Standardmäßig wird das vorherige Beispiel unter der URL erstellt. http://sites.google.com/domainName/siteName/new-webpage-title und haben die Seitenüberschrift „Neuer Webseitentitel“. Das heißt, der Titel wird für die URL auf new-webpage-title normalisiert. Wenn du den URL-Pfad einer Seite anpassen möchtest, kannst du die page_name-Eigenschaft des Inhaltseintrags festlegen. Der CreatePage()-Assistent stellt dies als optionales Schlüsselwortargument bereit.

In diesem Beispiel wird eine neue filecabinet-Seite mit der Überschrift „File Storage“ erstellt, aber die Seite wird erstellt unter der URL http://sites.google.com/domainName/siteName/files (anstelle von http://sites.google.com/domainName/siteName/file-storage) indem Sie die Eigenschaft page_name angeben.

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

Der Server wendet für die Benennung des URL-Pfads einer Seite die folgenden Rangfolgeregeln an:

  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 ist das Kürzen und Minimieren von Leerzeichen in „-“. und Zeichen entfernen, die nicht mit a-z, A-Z, 0-9, -, _ übereinstimmen.

Unterseiten erstellen

Um untergeordnete Seiten unter einer übergeordneten Seite zu erstellen, verwenden Sie das Schlüsselwortargument parent von CreatePage(). Das parent kann entweder ein gdata.sites.gdata.ContentEntry oder ein String sein, der den die vollständige Selbst-ID des Inhaltseintrags.

In diesem Beispiel wird der Content-Feed nach announcementpages abgefragt und eine neue announcement unter dem ersten gefundenen Element 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!'

Hochladen von Dateien

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

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

Anhänge werden hochgeladen

In diesem Beispiel wird eine PDF-Datei in die erste filecabinet im Content-Feed des Nutzers hochgeladen. Der Anhang hat den Titel „Handbuch für neue Mitarbeiter“. und eine (optionale) Beschreibung: "HR-Paket".

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 ist, enthält attachment eine Kopie des erstellten Anhangs auf dem Server.

Anhang in einen Ordner hochladen

Ordner in Google Sites unterstützen Ordner. Für UploadAttachment() ist ein zusätzliches Keyword verfügbar. Argument folder_name, mit dem Sie einen Anhang in einen filecabinet-Ordner hochladen können. Geben Sie 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 stattdessen ein gdata.data.MediaSource-Objekt an UploadAttachment() übergeben. eines Dateipfads. Außerdem wird ein Inhaltstyp nicht übergeben. Stattdessen wird der Inhaltstyp für das MediaSource-Objekt angegeben.

Webanhänge

Webanhänge sind spezielle Arten von Anhängen. Im Wesentlichen handelt es sich um Links zu anderen Dateien im Web. die Sie Ihren filecabinet-Einträgen hinzufügen können. Diese Funktion ist analog zu 'Add file by URL' [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 Arten von Seiten hochgeladen werden.

In diesem Beispiel wird ein Webanhang unter der ersten filecabinet im Content-Feed des Nutzers erstellt. Der Titel und die (optionale) Beschreibung sind auf „GoogleLogo“ festgelegt. und 'nice color' [schöne Farben].

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" verweist. in filecabinet.

Nach oben



Inhalte aktualisieren

Metadaten und/oder HTML-Inhalte einer Seite aktualisieren

Die Metadaten (title, pageName usw.) und der Seiteninhalt jeder Eintragart können durch mit der Methode Update() des Clients.

Im Folgenden finden Sie ein Beispiel für die Aktualisierung eines listpage mit den folgenden Änderungen:

  • Der Titel wurde 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 erstellen durch den neuen Dateiinhalt und durch Aufrufen der Update()-Methode des Clients. Die E-Mail-Adresse des Anhangs Metadaten (wie Titel und Beschreibung) oder einfach nur die Metadaten 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 über ETags finden Sie im Referenzhandbuch für Google Data APIs.

Nach oben



Anhänge herunterladen

Jeder attachment-Eintrag enthält einen src-Inhaltslink, über den der Dateiinhalt heruntergeladen werden kann. Der Google Sites-Client enthält eine Hilfsmethode zum Aufrufen und Herunterladen der Datei über diesen Link: DownloadAttachment(). Sie akzeptiert einen gdata.sites.data.ContentEntry- oder Download-URI für das erste Argument und einen Dateipfad zum Speichern des Anhangs als zweiten festlegen.

In diesem Beispiel wird ein bestimmter Anhangseintrag abgerufen, indem der self-Link abgefragt wird, und die Datei wird unter 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!'

Der App-Entwickler muss eine Dateiendung angeben, die für den Inhaltstyp des Anhangs sinnvoll ist. Inhaltstyp finden Sie unter entry.content.type.

In einigen Fällen können Sie die Datei möglicherweise nicht auf das Laufwerk herunterladen, z.B. wenn Ihre App in 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

Übersicht über Freigabeberechtigungen (ACLs)

Jeder ACL-Eintrag im ACL-Feed repräsentiert eine Zugriffsrolle einer bestimmten Entität, entweder eines Nutzers, einer Gruppe von Nutzern, einer Domain, oder den Standardzugriff (eine öffentliche Website). Einträge werden nur für Entitäten mit explizitem Zugriff angezeigt – es wird ein Eintrag angezeigt für jede E-Mail-Adresse in der Spalte "Personen mit Zugriff" auf dem Freigabebildschirm der Google Sites-Benutzeroberfläche. Domainadministratoren werden daher nicht angezeigt, obwohl sie impliziten Zugriff auf eine Website haben.

Rollen

Das Rollenelement stellt eine Zugriffsebene dar, die eine Entität haben kann. Für das Element gAcl:role gibt es vier mögliche Werte:

  • reader – Ein Viewer (entspricht Lesezugriff).
  • writer – ein Mitbearbeiter (entspricht Lese-/Schreibzugriff).
  • owner – in der Regel der Websiteadministrator (entspricht Lese-/Schreibzugriff)

Ebenen

Das Bereichselement stellt die Entität mit dieser Zugriffsebene dar. Es gibt vier mögliche Typen von gAcl:scope-Elementen:

  • user – Wert für eine E-Mail-Adresse, z. B. „nutzer@gmail.com“.
  • group – eine E-Mail-Adresse einer Google-Gruppe, z. B. „gruppe@domain.com“.
  • domain – ein G Suite-Domainname, z. B. „domain.com“.
  • Standard: Es gibt nur einen Bereich vom Typ „Standard“, der keinen Wert hat. (z. B. <gAcl:scope type="default">). Dieser bestimmte Bereich steuert den Zugriff, den jeder Nutzer standardmäßig hat auf einer öffentlichen Website.

Hinweis: Domains dürfen nicht den Wert gAcl:role haben. auf „owner“ festgelegt können nur Leser oder Autoren sein.

ACL-Feed abrufen

Der ACL-Feed kann verwendet werden, um die Freigabeberechtigungen einer Website zu steuern, und kann mit der GetAclFeed()-Methode abgerufen werden.

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

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, das ein Eintrag von gdata.sites.data.AclEntry.

Wenn Sie mit Einträgen im SiteFeed arbeiten, enthält jeder SiteEntry einen Link zum entsprechenden ACL-Feed. Mit diesem Snippet wird beispielsweise die erste Website im Website-Feed 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 Freigabe-ACLs sind möglicherweise nur möglich, wenn die Domain konfiguriert ist. um diese Berechtigungen zuzulassen, z.B. wenn die Freigabe außerhalb der Domain für G Suite-Domains aktiviert ist usw.

Um eine Google Sites-Website über die API freizugeben, erstellen Sie ein gdata.sites.gdata.AclEntry mit dem gewünschten gdata.acl.data.AclScope- und gdata.acl.data.AclRole-Werte. Weitere Informationen finden Sie in der Abschnitt ACL-Feed – Übersicht für die möglichen AclScope und AclRoles-Werte.

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

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

Freigabe für eine Gruppen-E-Mail-Adresse:

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

Freigabe für eine ganze 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, in der die Website gehostet wird. Beispielsweise kann http://sites.google.com/a/domain1.com/siteA nur die gesamte Website für domain1.com freigeben, nicht für domain2.com. Websites, die nicht in einer G Suite-Domain gehostet werden (z.B. http://sites.google.com/site/siteB), können keine Domains einladen.

Freigabeberechtigungen ändern

Wenn auf einer Website eine vorhandene Freigabeberechtigung vorhanden ist, rufen Sie zuerst die betreffenden AclEntry ab und ändern Sie die Berechtigung und rufen Sie dann die Methode Update() des Clients auf, um die ACL auf dem Server zu ändern.

In diesem Beispiel wird die vorherige acl_entry aus dem Abschnitt Website freigeben geändert. durch Aktualisieren von „nutzer@beispiel.de“ als Autor (Mitbearbeiter):

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 über ETags finden Sie im Referenzhandbuch für Google Data APIs.

Freigabeberechtigungen werden entfernt

Wenn Sie eine Freigabeberechtigung entfernen möchten, rufen Sie zuerst das AclEntry-Objekt ab und rufen Sie dann die Delete()-Methode des Clients auf.

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 über ETags finden Sie im Referenzhandbuch für Google Data APIs.

Nach oben

Besondere Themen

Feed oder Eintrag noch einmal abrufen

Wenn Sie bereits abgerufene Feeds oder Einträge abrufen möchten, verbessern Sie die Effizienz, indem Sie angeben, um die Liste oder den Eintrag nur dann zu senden, wenn sie sich seit dem letzten Abruf geändert hat.

Übergeben Sie für diese Art des bedingten Abrufs einen ETag-Wert an GetEntry(). Angenommen, Sie hatten 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 Ausnahme gdata.client.NotModified auslöst, wird die Das ETag entspricht der Version auf dem Server, d. h., Sie verfügen über die aktuellste Kopie. Wenn jedoch ein anderer Kunde/Nutzer Änderungen vorgenommen hat, wird der neue Eintrag in entry zurückgegeben. und es wird keine Ausnahme ausgelöst.

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

Nach oben