Przewodnik Pythona

Ważne: ten dokument został napisany przed 2012 rokiem. Opcje uwierzytelniania opisane w tym dokumencie (OAuth 1.0, AuthSub i ClientLogin) zostały oficjalnie wycofane 20 kwietnia 2012 r. Zachęcamy do przejścia na OAuth 2.0.

Interfejs API danych Witryn Google umożliwia aplikacjom klienckim uzyskiwanie dostępu do treści w Witrynach Google oraz publikowanie i modyfikowanie jej zawartości. Aplikacja kliencka może również prosić o listę ostatniej aktywności, pobrać historię zmian i pobrać załączniki.

Poza ogólnymi informacjami o możliwościach interfejsu Sites Data API w tym przewodniku znajdziesz przykłady interakcji z tym interfejsem API. za pomocą biblioteki klienta w języku Python. Aby uzyskać pomoc przy konfigurowaniu biblioteki klienta, zobacz Pierwsze kroki z biblioteką klienta w języku Python Google Data Jeśli interesuje Cię jeśli chcesz dowiedzieć się więcej o podstawowym protokole używanym przez bibliotekę klienta w języku Python do interakcji z klasycznym interfejsem Sites API, zapoznaj się z artykułem przewodnika po protokołach.

Odbiorcy

Ten dokument jest przeznaczony dla programistów, którzy chcą pisać aplikacje klienckie obsługujące Witryny Google. za pomocą biblioteki klienta w języku Python Google.

Pierwsze kroki

Aby korzystać z biblioteki klienta w języku Python, musisz mieć język Python 2.2 lub nowszy oraz moduły wymienione na stronie wiki DependencyModules. Po pobraniu biblioteki klienta zapoznaj się z artykułem Pierwsze kroki z biblioteką Google Data Python, aby uzyskać pomoc dotyczącą instalowania i używania klienta.

Uruchamiam próbkę

Pełna próbka robocza znajduje się w podkatalogu samples/sites repozytorium Mercurial projektu. (/samples/sites/sites_example.py).

Uruchom przykład w ten sposób:

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

Jeśli wymagane flagi nie są dostępne, aplikacja poprosi o ich podanie. Przykład pozwala użytkownikowi wykonać wiele operacji, które zademonstrować, jak korzystać z klasycznej wersji Witryn. W związku z tym, aby wykonać określone operacje (np. zmodyfikować treści), musisz się uwierzytelnić. Program pojawi się też prośba o uwierzytelnienie przez AuthSub, OAuth lub ClientLogin.

Aby umieścić w swoim kodzie przykłady z tego przewodnika, potrzebujesz tych instrukcji import:

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

Musisz też skonfigurować obiekt SitesClient, który reprezentuje połączenie klienta z interfejsem API klasycznej wersji Witryn. Przekaż nazwę aplikacji i nazwę witryny (z jej adresu URL):

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

Aby korzystać z witryny hostowanej w domenie G Suite, ustaw domenę za pomocą parametru domain:

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

W powyższych fragmentach argument source jest opcjonalny, ale zalecany do celów rejestrowania. Powinna użyj formatu: company-applicationname-version

Uwaga: w pozostałej części przewodnika przyjęto założenie, że obiekt SitesClient został utworzony w zmiennej client.

Uwierzytelnianie w klasycznym interfejsie Sites API

Z biblioteki klienta w języku Python można korzystać do pracy z publicznymi lub prywatnymi kanałami. Interfejs Sites Data API zapewnia dostęp do prywatnych i publicznych danych. kanałów w zależności od uprawnień witryny i operacji, którą chcesz wykonać. Możesz na przykład odczytać źródło treści witrynę publiczną, ale nie wolno jej aktualizować (co wymaga uwierzytelnionego klienta); Można to zrobić za pomocą uwierzytelnianie ClientLogin (nazwa użytkownika i hasło), AuthSub lub OAuth.

Więcej informacji o protokole AuthSub, OAuth i ClientLogin znajdziesz w artykule Omówienie uwierzytelniania interfejsów API danych Google.

AuthSub dla aplikacji internetowych

Uwierzytelnianie AuthSub dla aplikacji internetowych powinno być używane przez aplikacje klienckie, które muszą uwierzytelniać użytkowników na kontach Google lub G Suite. Operator nie potrzebuje dostępu do nazwy użytkownika ani hasła dla użytkownika Witryn Google – wystarczy Token AuthSub jest wymagany.

Wyświetl instrukcje włączania AuthSub w aplikacji internetowej

Poproś o token jednorazowego użytku

Gdy użytkownik po raz pierwszy odwiedza Twoją aplikację, musi się uwierzytelnić. Zazwyczaj deweloperzy drukują tekst i link kierujący użytkownika stronie zatwierdzania AuthSub, aby uwierzytelnić użytkownika i poprosić o dostęp do jego dokumentów. Biblioteka klienta Google Data w Pythonie oferuje funkcję, generate_auth_sub_url(), aby wygenerować ten adres URL. Poniższy kod konfiguruje link do strony AuthSubRequest.

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()

Jeśli chcesz uwierzytelniać użytkowników w domenie hostowanej w G Suite, przekaż jej nazwę użytkownikowi 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)

Metoda generate_auth_sub_url() bierze pod uwagę kilka parametrów (odpowiadających parametrom zapytania używanym przez AuthSubRequest):

  • adres URL następny – adres URL, na który Google przekieruje po zalogowaniu się na konto i udzieleniu przez użytkownika dostępu; http://www.example.com/myapp.py w przykładzie powyżej
  • zakreshttps://sites.google.com/feeds/
  • secure (zabezpieczony) to wartość logiczna wskazująca, czy token będzie używany w trybie bezpiecznym i zarejestrowanym. True w przykładzie powyżej
  • session: druga wartość logiczna wskazująca, czy token jednorazowego użytku zostanie później zamieniony na token sesji; True w przykładzie powyżej

Przechodzenie na token sesji

Zobacz Używanie AuthSub z bibliotekami klienta interfejsu Google Data API.

Pobieranie informacji o tokenie sesji

Zobacz Używanie AuthSub z bibliotekami klienta interfejsu Google Data API.

Unieważnianie tokena sesji

Zobacz Używanie AuthSub z bibliotekami klienta interfejsu Google Data API.

Wskazówka: gdy aplikacja otrzyma token długotrwałych sesji, zapisać go w bazie danych do wycofania w celu późniejszego użycia. Nie musisz przy każdym uruchomieniu aplikacji odsyłać użytkownika do AuthSub. Użyj client.auth_token = gdata.gauth.AuthSubToken(TOKEN_STR), aby ustawić istniejący token dla klienta.

Protokół OAuth na potrzeby aplikacji internetowych lub zainstalowanych/mobilnych

Alternatywą dla protokołu AuthSub jest protokół OAuth. Jest on przeznaczony dla aplikacji internetowych. Protokół OAuth jest podobny do korzystania z trybu bezpiecznego i zarejestrowanego AuthSub. W tym fakcie, że wszystkie wnioski o przekazanie danych muszą być podpisane cyfrowo i musisz zarejestrować swoją domenę.

Wyświetl instrukcje włączania protokołu OAuth w zainstalowanej aplikacji

Pobieranie tokena żądania

Zobacz Używanie protokołu OAuth z bibliotekami klienta interfejsu Google Data API.

Autoryzacja tokena żądania

Zobacz Używanie protokołu OAuth z bibliotekami klienta interfejsu Google Data API.

Przejście na token dostępu

Zobacz Używanie protokołu OAuth z bibliotekami klienta interfejsu Google Data API.

Wskazówka: gdy aplikacja uzyska token dostępu OAuth, zapisać go w bazie danych do wycofania w celu późniejszego użycia. Nie musisz przy każdym uruchomieniu aplikacji odsyłać użytkownika przez OAuth. Użyj client.auth_token = gdata.oauth.OAuthToken(TOKEN_STR, TOKEN_SECRET), aby ustawić istniejący token dla klienta.

ClientLogin dla zainstalowanych/mobilnych aplikacji

Konta ClientLogin powinny używać zainstalowane lub mobilne aplikacje, które muszą uwierzytelniać użytkowników na kontach Google. Przy pierwszym uruchomieniu aplikacja prosi użytkownika o podanie nazwy użytkownika i hasła. W przypadku kolejnych próśb pojawia się odwołanie do tokena uwierzytelniania.

Wyświetl instrukcje włączania ClientLogin do zainstalowanej aplikacji

Aby użyć parametru ClientLogin, wywołaj ClientLogin(). metody obiektu SitesClient, która jest dziedziczona z GDClient. Podaj adres e-mail hasło użytkownika, w imieniu którego klient przesyła żądania. Na przykład:

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

Wskazówka: gdy aplikacja po raz pierwszy uwierzytelni użytkownika, zapisz token uwierzytelniania w bazie danych w celu późniejszego użycia. Nie musisz przy każdym uruchomieniu aplikacji prosić użytkownika o podanie hasła. Więcej informacji znajdziesz w artykule na temat wycofywania tokena uwierzytelniania.

Więcej informacji o używaniu ClientLogin w aplikacjach w języku Python znajdziesz w artykule Używanie ClientLogin z bibliotekami klienta interfejsu API danych Google (w języku angielskim).

Powrót do góry

Kanał witryny

Kanał witryn może służyć do tworzenia listy witryn Google należących do użytkownika lub do wyświetlania, do których ma uprawnienia do wyświetlania. W ten sposób możesz też zmienić nazwę istniejącej witryny. Wreszcie w przypadku domen G Suite można go też użyć do tworzenia lub kopiowania całą witrynę.

Witryny z ofertami

Aby wyświetlić listę stron, do których użytkownik ma dostęp, użyj metody GetSiteFeed() klienta. Metoda przyjmuje opcjonalny uri, którego możesz użyć do określenia alternatywnego identyfikatora URI kanału witryny. Domyślnie GetSiteFeed() używa nazwy witryny i domeny ustawionych w obiekcie klienta. W sekcji Pierwsze kroki znajdziesz informacje Dowiedz się więcej o ustawianiu tych wartości w obiekcie klienta.

Oto przykład pobierania listy witryn uwierzytelnionego użytkownika:

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

Powyższy fragment zawiera tytuł i nazwę witryny, witrynę, z której została skopiowana, oraz identyfikator URI kanału listy ACL.

Tworzenie nowych witryn

Uwaga: ta funkcja jest dostępna tylko w domenach G Suite.

Można udostępniać nowe witryny przez wywołanie metody CreateSite() biblioteki. Podobnie jak pomocnik GetSiteFeed(), CreateSite() akceptuje również opcjonalny argument uri, którego możesz użyć do określenia alternatywnego identyfikatora URI kanału witryny (w przypadku utworzenia w witrynie w innej domenie niż ustawiona w obiekcie SitesClient).

Oto przykład tworzenia nowej witryny z motywem „Slate” i dostarczenie tytuł i (opcjonalnie) opis:

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

Powyższe żądanie spowoduje utworzenie nowej witryny w domenie G Suite example2.com. Adres URL witryny będzie więc wyglądać tak: https://sites.google.com/a/example2.com/title-for-my-site.

Po utworzeniu witryny serwer w odpowiedzi przesyła gdata.sites.data.SiteEntry zawiera elementy dodane przez serwer: link do witryny, link do kanału listy kontroli dostępu witryny (ACL), nazwa witryny, tytuł, podsumowanie itd.

Kopiowanie witryny

Uwaga: ta funkcja jest dostępna tylko w domenach G Suite.

Pliku CreateSite() można też użyć do kopiowania istniejącej witryny. W tym celu przekaż argument słowa kluczowego source_site. Ten link będzie dostępny w każdej skopiowanej witrynie, który jest dostępny na stronie entry.FindSourceLink(). Oto przykład duplikowania witryny utworzone w sekcji Tworzenie nowych witryn:

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

Ważne informacje:

  • Kopiowane mogą być tylko witryny i szablony witryn należące do uwierzytelnionego użytkownika.
  • Możesz też skopiować szablon witryny. Witryna jest szablonem, jeśli opcja „Opublikuj tę witrynę jako szablon” jest zaznaczona na stronie ustawień Witryn Google.
  • Możesz skopiować witrynę z innej domeny, dopóki nie staniesz się jej właścicielem w witrynie źródłowej.

Aktualizowanie metadanych witryny

Aby zaktualizować tytuł lub podsumowanie witryny, potrzebujesz elementu SiteEntry zawierającego jej treść. Ten W przykładzie użyto metody GetEntry(), aby najpierw pobrać element SiteEntry, a następnie zmienić jego tytuł, opis i tag kategorii:

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)

Powrót do góry

Pobieranie kanału aktywności

Uwaga: aby uzyskać dostęp do tego kanału, musisz być współpracownikiem lub właścicielem witryny. Twój klient musi uwierzytelniać się przy użyciu tokena AuthSub, OAuth lub ClientLogin. Zobacz Uwierzytelnianie w usłudze Witryny.

Możesz pobrać ostatnią aktywność (zmiany) w witrynie, pobierając kanał aktywności. Metoda GetActivityFeed() biblioteki lib zapewnia dostęp do tego pliku danych:

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)

Wywołanie GetActivityFeed() zwraca obiekt gdata.sites.data.ActivityFeed zawierający listę gdata.sites.data.ActivityEntry Każdy wpis o aktywności zawiera informacje na temat: zmianę wprowadzoną w Witrynie.

Powrót do góry

Pobieranie historii wersji

Uwaga: aby uzyskać dostęp do tego kanału, musisz być współpracownikiem lub właścicielem witryny. Twój klient musi uwierzytelniać się przy użyciu tokena AuthSub, OAuth lub ClientLogin. Zobacz Uwierzytelnianie w usłudze Witryny.

Kanał wersji zawiera informacje o historii zmian każdego wpisu treści. GetRevisionFeed() można użyć do pobrania wersji określonego wpisu treści. Metoda przyjmuje opcjonalny uri , który akceptuje wartość gdata.sites.data.ContentEntry, pełny identyfikator URI wpisu treści lub identyfikator wpisu treści.

W tym przykładzie odpytujemy plik danych o treści i pobieramy plik danych o wersjach pierwszego wpisu:

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]

Wywołanie GetRevisionFeed() zwraca obiekt gdata.sites.data.RevisionFeed zawierający listę gdata.sites.data.RevisionEntry Każdy wpis wersji zawiera informacje takie jak treść numer wersji oraz datę utworzenia nowej wersji.

Powrót do góry

Źródło treści

Pobieram źródło treści

Uwaga: źródło treści może wymagać uwierzytelniania, ale nie musi. w zależności od uprawnień do udostępniania w witrynie. Jeśli witryna nie jest publiczna, klient musi uwierzytelnić się przy użyciu tokena AuthSub, OAuth lub ClientLogin. Zobacz Uwierzytelnianie w usłudze Witryny.

Źródło treści zwraca najnowszą zawartość witryny. Można uzyskać do niego dostęp przez wywołanie biblioteki lib metody GetContentFeed(), która przyjmuje opcjonalny parametr ciągu uri w celu przekazywania dostosowane zapytanie.

Oto przykład pobierania całego źródła treści i wydrukowania kilku interesujących elementów:

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

Wskazówka: za pomocą entry.Kind() można określić typ wpisu.

Powstały obiekt feed to obiekt typu gdata.sites.data.ContentFeed zawierający listę z gdata.sites.data.ContentEntry. Każdy wpis reprezentuje inną stronę/produkt w obrębie witryny użytkownika i zawiera elementy charakterystyczne dla tego rodzaju wpisu. Więcej informacji znajdziesz w przykładowej aplikacji. z niektórych właściwości dostępnych w poszczególnych rodzajach wpisów.

Powrót do góry

Przykłady zapytań dotyczących źródła treści

Źródło treści możesz przeszukiwać, korzystając ze standardowych parametrów zapytania w interfejsie Google Data API. i tych związanych z interfejsem klasycznej wersji Witryn. Szczegółowe informacje i pełną listę obsługiwanych parametrów znajdziesz tutaj: Przewodnik informacyjny

Uwaga: w przykładach w tej sekcji używana jest metoda pomocnicza gdata.sites.client.MakeContentFeedUri(). .

Pobieranie określonych rodzajów wpisów

Aby pobrać tylko konkretny typ wpisu, użyj parametru kind. Na przykład ten fragment zwraca tylko tyle wpisów: attachment:

kind = 'webpage'

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

Aby zwrócić więcej niż 1 typ, oddziel każdą kolumnę kind przecinkiem. Na przykład ten fragment zwraca filecabinet i listpage wpisy:

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

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

Pobieranie strony według ścieżki

Jeśli znasz względną ścieżkę strony w Witrynach Google, możesz użyć parametru path, by ją pobrać. Ten przykład zwróci stronę znajdującą się pod adresem 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)

Pobieranie wszystkich wpisów ze strony nadrzędnej

Jeśli znasz identyfikator wpisu treści strony (np. „1234567890” w przykładzie poniżej), możesz użyć parametru parent pobierz wszystkie jej wpisy podrzędne (jeśli występują):

parent = '1234567890'

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

Dodatkowe parametry znajdziesz w Przewodniku.

Powrót do góry



Tworzenie treści

Uwaga: zanim utworzysz treść witryny, skonfiguruj ją w kliencie.
client.site = "siteName"

Nowe treści (strony internetowe, strony z listami, magazyny plików, strony z ogłoszeniami itp.) można tworzyć przy użyciu CreatePage(). Pierwszym argumentem tej metody powinien być rodzaj strony do utworzenia, a po nim tytuł i zawartość HTML.

Listę obsługiwanych typów węzłów znajdziesz w opisie parametru kind w Przewodniku.

Tworzenie nowych elementów / stron

W tym przykładzie jest tworzony nowy webpage poniżej najwyższego poziomu, zawiera fragment XHTML dla treści strony, i ustawia tytuł nagłówka na „Tytuł nowej strony internetowej”:

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

Jeśli żądanie zostanie zrealizowane, entry będzie zawierać kopię wpisu utworzonego na serwerze w postaci gdata.sites.gdata.ContentEntry.

Aby utworzyć bardziej złożony rodzaj wpisu, który jest wypełniany podczas tworzenia (np. listpage z nagłówkami kolumn), musisz utworzyć gdata.sites.data.ContentEntry ręcznie, wypełnić interesujące Cię właściwości i wywołać client.Post().

Tworzenie elementów/stron w niestandardowych ścieżkach URL

Domyślnie poprzedni przykład jest tworzony pod adresem URL. http://sites.google.com/domainName/siteName/new-webpage-title i mają nagłówek „Tytuł nowej strony internetowej”. Oznacza to, że tytuł jest znormalizowany do new-webpage-title. Aby dostosować ścieżkę adresu URL strony, możesz ustawić właściwość page_name we wpisie treści. Asystent funkcji CreatePage() podaje ją jako opcjonalny argument słowa kluczowego.

W tym przykładzie tworzymy nową stronę filecabinet z nagłówkiem „Przechowywanie plików”, ale tworzymy stronę z adresem URL http://sites.google.com/domainName/siteName/files (zamiast http://sites.google.com/domainName/siteName/file-storage) określając właściwość page_name.

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

Serwer używa następujących reguł pierwszeństwa przy nazywaniu ścieżki adresu URL strony:

  1. page_name (jeśli występuje). Wymagana jest wartość w polu a-z, A-Z, 0-9, -, _.
  2. title: jeśli nie ma nazwy strony, nie może mieć wartości null. Normalizacja polega na przycięciu i zwijaniu odstępów do znaku „-” oraz usuń znaki, które nie pasują do a-z, A-Z, 0-9, -, _.

Tworzenie podstron

Aby utworzyć podstrony (podrzędne) na stronie nadrzędnej, użyj argumentu słowa kluczowego parent w elemencie CreatePage(). Obiekt parent może być ciągiem znaków gdata.sites.gdata.ContentEntry lub ciągiem reprezentującym pełny własny identyfikator wpisu treści.

W tym przykładzie odpytujemy plik danych o elementy announcementpage i tworzymy nowy element announcement na podstawie pierwszego znalezionego źródła:

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!'

Przesyłanie plików

Podobnie jak w przypadku Witryn Google interfejs API obsługuje przesyłanie załączników do strony magazynu plików lub strony nadrzędnej. Należy przesłać załączniki do strony nadrzędnej. Dlatego musisz ustawić link nadrzędny na koncie ContentEntry, który próbujesz przesłać. Więcej informacji znajdziesz w artykule Tworzenie podstron.

Metoda UploadAttachment() biblioteki klienta udostępnia interfejs do przesyłania załączników.

Przesyłam załączniki

W tym przykładzie prześlesz plik PDF do pierwszego elementu filecabinet znalezionego w źródle treści użytkownika. Załącznik zostanie utworzony z tytułem „Podręcznik nowego pracownika”. i (opcjonalnie) opis „Pakiet HR”.

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

Jeśli przesyłanie się uda, plik attachment będzie zawierać kopię utworzonego załącznika na serwerze.

Przesyłanie załącznika do folderu

Magazyny plików w Witrynach Google obsługują foldery. Parametr UploadAttachment() zawiera dodatkowe słowo kluczowe folder_name, którego można użyć do przesłania załącznika do folderu filecabinet. Po prostu podaj nazwę tego folderu:

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')

Zwróć uwagę, że ten przykład przekazuje obiekt gdata.data.MediaSource do UploadAttachment() ścieżki pliku. Nie przekazuje też typu treści. Zamiast tego typ treści jest określany w obiekcie MediaSource.

Załączniki internetowe

Załączniki internetowe to szczególne rodzaje załączników. Zasadniczo są to linki do innych plików w internecie które możesz dodać do stron w filecabinet. Ta funkcja działa analogicznie do opcji „Add file by URL” (Dodaj plik według adresu URL). przesyłania w interfejsie Witryn Google.

Uwaga: załączniki internetowe można tworzyć tylko w domenie filecabinet. Nie można ich przesyłać na strony innego typu.

W tym przykładzie tworzony jest załącznik internetowy pod pierwszym elementem filecabinet znalezionym w źródle treści użytkownika. Jej tytuł i (opcjonalny) opis mają wartość „GoogleLogo” i „ładne kolory”.

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!'

Wywołanie powoduje utworzenie linku wskazującego obraz pod adresem „http://www.google.com/images/logo.gif”. w filecabinet.

Powrót do góry



Aktualizowanie treści

Aktualizowanie metadanych strony i/lub treści HTML

Metadane (tytuł, nazwa strony itp.) i treść strony dowolnego rodzaju mogą być edytowane przez za pomocą metody Update() klienta.

Poniżej znajdziesz przykład aktualizacji elementu listpage z tymi zmianami:

  • Zmieniono tytuł na „Zaktualizowany tytuł”.
  • Zawartość HTML strony zostanie zmieniona na „Zaktualizowana treść HTML”
  • Nagłówek pierwszej kolumny listy został zmieniony na „Właściciel”.
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!'

Zastępowanie zawartości i metadanych załącznika

Możesz zastąpić zawartość pliku załącznika, tworząc nowy obiekt MediaSource z nową zawartością pliku i wywołaniem metody Update() klienta. Atrybut Możesz aktualizować tylko metadane (np. tytuł i opis). Ten przykład pokazuje jednoczesne aktualizowanie treści i metadanych pliku:

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)

Powrót do góry



Usuwam treść

Aby usunąć stronę lub element z witryny Google, najpierw pobierz wpis treści, a następnie wywołaj metodę Delete() klienta.

client.Delete(content_entry)

Możesz też przekazać metodę Delete() link edit do wpisu treści lub wymusić jego usunięcie:

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

Więcej informacji o tagach ETag znajdziesz w przewodniku po interfejsach API danych Google.

Powrót do góry



Pobieranie załączników

Każdy wpis attachment zawiera link do treści src, którego można użyć do pobrania zawartości pliku. Klient Witryn zawiera metodę pomocniczą umożliwiającą dostęp do pliku i pobieranie go z tego linku: DownloadAttachment(). Akceptuje identyfikator URI gdata.sites.data.ContentEntry lub pobrany jako pierwszy argument oraz ścieżkę pliku do zapisania załącznika jako drugą.

Ten przykład pobiera konkretny wpis załącznika (wykonując zapytanie o link self) i pobiera plik pod określoną ścieżkę:

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!'

To programista aplikacji odpowiada za określenie rozszerzenia pliku pasującego do typu zawartości załącznika. Typ treści znaleźć w entry.content.type.

W niektórych przypadkach nie można pobrać pliku na dysk (np. jeśli aplikacja działa w Google App Engine). W takich sytuacjach użyj polecenia _GetFileContent(), aby pobrać treść pliku i zapisać ją w pamięci.

Ten przykład pobiera załącznik do pamięci.

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

Powrót do góry

Kanał ACL

Omówienie uprawnień do udostępniania (listy kontroli dostępu)

Każdy wpis na liście kontroli dostępu (ACL) w kanale ACL reprezentuje rolę dostępu określonego podmiotu: użytkownika, grupy użytkowników, domeny lub domyślny dostęp (witryna publiczna). Wpisy będą wyświetlane tylko dla jednostek z jawnym dostępem – wyświetli się 1 wpis dla każdego adresu e-mail w polu „People with Access” (Osoby z dostępem) na ekranie udostępniania w interfejsie Witryn Google. Administratorzy domeny nie będą wyświetlani, nawet jeśli mają bezpośredni dostęp do witryny.

Role

Element roli reprezentuje poziom dostępu, jaki może mieć encja. Element gAcl:role może mieć 4 wartości:

  • reader – przeglądający (odpowiednik dostępu tylko do odczytu).
  • writer – współpracownik (odpowiednik uprawnień do odczytu i zapisu).
  • owner – zwykle jest administratorem witryny (odpowiednik uprawnień do odczytu i zapisu).

Zakresy

Element zakresu reprezentuje jednostkę, która ma dany poziom dostępu. Element gAcl:scope może zawierać 4 rodzaje:

  • user – wartość adresu e-mail, np. „użytkownik@gmail.com”.
  • grupa – adres e-mail grupy dyskusyjnej Google, np. „grupa@domena.com”.
  • domena – nazwa domeny G Suite, np. „domena.com”.
  • default – jest tylko jeden możliwy zakres typu „default”, który nie zawiera wartości; (np.<gAcl:scope type="default">). Ten konkretny zakres określa domyślnie dostęp każdego użytkownika na stronie publicznej.

Uwaga: domeny nie mogą mieć wartości gAcl:role. z ustawieniem „owner” dostęp do treści, mogą być tylko czytelnikami lub autorami.

Pobieranie pliku danych ACL

Pliku danych ACL można używać do kontrolowania uprawnień do udostępniania witryny i można go pobrać za pomocą metody GetAclFeed().

Poniższy przykład pokazuje pobieranie pliku danych ACL dla witryny ustawionej obecnie w obiekcie SitesClient. i wydrukuje wpisy uprawnień:

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)

Po pomyślnym zapytaniu feed będzie obiektem gdata.sites.data.AclFeed zawierającym informacje o produkcie gdata.sites.data.AclEntry.

Jeśli pracujesz z wpisami w kanale SiteFeed, każdy element SiteEntry zawiera link do swojego kanału ACL. Na przykład ten fragment kodu pobiera pierwszą witrynę z kanału witryny użytkownika i wysyła zapytanie do tego pliku danych ACL:

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())

Udostępnianie witryny

Uwaga: udostępnianie określonych list kontroli dostępu (ACL) jest możliwe tylko wtedy, gdy domena jest skonfigurowana. aby zezwolić na takie uprawnienia (np. jeśli w przypadku domen G Suite udostępnianie poza domenę jest włączone).

Aby udostępnić stronę w Witrynach Google przy użyciu interfejsu API, utwórz gdata.sites.gdata.AclEntry z odpowiednim gdata.acl.data.AclScope i gdata.acl.data.AclRole wartości. Zobacz Sekcja Przegląd pliku danych ACL dla możliwych AclScope i AclRoles.

W tym przykładzie przyznano uprawnienia do odczytu w witrynie użytkownikowi „użytkownik@example.com”:

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)

Udostępnianie na poziomie grupy i domeny

Podobnie jak w przypadku udostępniania witryny jednemu użytkownikowi, możesz udostępnić ją całej Domena grupy dyskusyjnej Google lub domena G Suite. Niezbędne wartości scope podano poniżej.

Udostępnianie adresowi e-mail grupy:

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

Udostępnianie w całej domenie:

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

Udostępnianie na poziomie domeny jest obsługiwane tylko w przypadku domen G Suite i tylko w przypadku domeny, w której hostowana jest witryna. Na przykład witryna http://sites.google.com/a/domena1.com/witrynaA może udostępnić całą witrynę tylko domenie domena1.com, a nie domena2.com. Witryny, które nie są hostowane w domenie G Suite (np. http://sites.google.com/site/siteB) nie mogą zapraszać domen.

Zmiana uprawnień do udostępniania

Aby uzyskać istniejące uprawnienia do udostępniania w witrynie, najpierw pobierz obiekt AclEntry, którego dotyczy problem, a następnie zmodyfikuj uprawnienia. zgodnie z potrzebami, a następnie wywołaj metodę Update() klienta, aby zmodyfikować listę kontroli dostępu (ACL) na serwerze.

Ten przykład zmienia poprzedni acl_entry z sekcji Udostępnianie witryny, aktualizując konto „użytkownik@example.com” pisarzem (współpracownikiem):

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)

Więcej informacji o tagach ETag znajdziesz w przewodniku po interfejsach API danych Google.

Usuwanie uprawnień do udostępniania

Aby usunąć uprawnienia do udostępniania, najpierw pobierz obiekt AclEntry, a następnie wywołaj metodę Delete() klienta.

client.Delete(acl_entry)

Możesz też przekazać metodę Delete() linku edit do wpisu listy kontroli dostępu i/lub wymusić usunięcie:

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

Więcej informacji o tagach ETag znajdziesz w przewodniku po interfejsach API danych Google.

Powrót do góry

Tematy specjalne

Ponowne pobieranie kanału lub wpisu

Jeśli chcesz pobrać pobrany wcześniej kanał lub wpis, możesz poprawić wydajność, mówiąc z serwera, aby wysyłał listę lub wpis tylko wtedy, gdy zmieniły się one od ostatniego pobrania.

Aby wykonać tego rodzaju pobieranie warunkowe, przekaż wartość ETag do funkcji GetEntry(). Jeśli na przykład masz już obiekt entry:

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

Jeśli GetEntry() zgłosi wyjątek gdata.client.NotModified, wpisowi ETag dopasowuje się do wersji na serwerze, co oznacza, że masz najbardziej aktualną kopię. Jeśli jednak inny klient/użytkownik wprowadzi zmiany, nowy wpis zostanie zwrócony w entry i nie zostanie zgłoszony żaden wyjątek.

Więcej informacji o tagach ETag znajdziesz w przewodniku po interfejsach API danych Google.

Powrót do góry