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 - scope –
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: 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.
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)
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.
Ü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.
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.
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.
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:
page_name
, falls vorhanden. Mussa-z, A-Z, 0-9, -, _
erfüllen.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 mita-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 announcementpage
s 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
.
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)
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.
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
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.
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.