Önemli: Bu doküman 2012'den önce yazılmıştır. Kimlik doğrulama seçenekleri (OAuth 1.0, AuthSub ve ClientLogin) yukarıda açıklandığı gibi resmi olarak kullanımdan kaldırıldı 20 Nisan 2012'de tamamlanmıştır ve artık kullanılamamaktadır. Şu Google Hesabı'na geçiş yapmanızı öneririz: OAuth 2.0 kullanmaya başlayın.
Google Sites Data API'sı, istemci uygulamaların bir Google Sitesindeki içeriğe erişmesine, bu içeriği yayınlamasına ve değiştirmesine olanak tanır. İstemci uygulamanız ayrıca son etkinliklerin listesini isteyebilir, düzeltme geçmişini alabilir ve ekleri indirebilir.
Bu kılavuz, Sites Data API'nın özelliklerine dair biraz arka plan sağlamanın yanı sıra, API ile etkileşime geçme hakkında örnekler de sunar. (Python istemci kitaplığı) kullanın. İstemci kitaplığını oluşturma konusunda yardım almak için Google Data Python İstemci Kitaplığı'nı Kullanmaya Başlama. Bu konuyla ilgileniyorsanız Python istemci kitaplığı tarafından klasik Sites API ile etkileşim kurmak için kullanılan temel protokol hakkında daha fazla bilgi edinmek için lütfen protokol kılavuzuna bakın.
Kitle
Bu doküman, Google Sites ile etkileşimde bulunan istemci uygulamaları yazmak isteyen geliştiricilere yöneliktir. Bunun için Google Data Python İstemci Kitaplığı'nı kullanın.
Başlarken
Python istemci kitaplığını kullanmak için Python 2.2+ sürümüne ve DependencyModules wiki sayfasında listelenen modüllere ihtiyacınız vardır. İstemci kitaplığını indirdikten sonra, İstemciyi yükleme ve kullanma konusunda yardım almak için Google Veri Python Kitaplığı'nı Kullanmaya Başlama adlı makaleyi inceleyin.
Örneği çalıştırma
Tam çalışma örneği, projenin Mercurial deposunun samples/sites
alt dizininde bulunmaktadır.
(/samples/sites/sites_example.py).
Örneği aşağıdaki gibi çalıştırın:
python sites_example.py # or python sites_example.py --site [sitename] --domain [domain or "site"] --debug [prints debug info if set]
Gerekli işaretler sağlanmazsa uygulama bu değerleri girmenizi ister. Örnek, kullanıcının bir dizi işlem gerçekleştirmesine olanak tanır. klasik Sites API'nin nasıl kullanılacağını gösterir. Bu nedenle, belirli işlemleri (ör. içerik değiştirme) gerçekleştirmek için kimlik doğrulaması yapmanız gerekir. Program, AuthSub, OAuth veya ClientLogin.
Bu kılavuzdaki örnekleri kendi kodunuza eklemek için aşağıdaki import
ifadelerine ihtiyacınız vardır:
import atom.data import gdata.sites.client import gdata.sites.data
Ayrıca, klasik Sites API'ye istemci bağlantısını temsil eden bir SitesClient
nesnesi oluşturmanız gerekir.
Uygulamanızın adını ve Sitenin web alanı adını (URL'sinden) iletin:
client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName')
Bir G Suite alanında barındırılan bir Siteyle çalışmak için alanı domain
parametresini kullanarak ayarlayın:
client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName', domain='example.com')
Yukarıdaki snippet'lerde source
bağımsız değişkeni isteğe bağlıdır ancak günlük kaydı amacıyla kullanılması önerilir. Uygulama
Şu biçimi kullanın: company-applicationname-version
Not: Kılavuzun geri kalanında, client
değişkeninde bir SitesClient
nesnesi oluşturduğunuz varsayılır.
Klasik Sites API için kimlik doğrulama
Python istemci kitaplığı, herkese açık veya gizli feed'lerle çalışmak için kullanılabilir. Sites Data API, gizli ve herkese açık verilere erişim sağlar bir sitenin izinlerine ve gerçekleştirmeye çalıştığınız işleme bağlı olarak değişir. Örneğin içerik feed'ini okuyabilir ve ancak üzerinde güncelleme yapılmaması (kimliği doğrulanmış istemci gerektirir). Bu işlem, ClientLogin kullanıcı adı/şifre kimlik doğrulaması, AuthSub veya OAuth.
AuthSub, OAuth ve ClientLogin hakkında daha fazla bilgi için lütfen Google Veri API'leri Kimlik Doğrulaması'na Genel Bakış sayfasına bakın.
Web uygulamaları için AuthSub
Web Uygulamaları için AuthSub Kimlik Doğrulaması, aşağıdaki değişikliği yapması gereken istemci uygulamaları tarafından kullanılmalıdır: Google veya G Suite hesaplarına giriş yapan kullanıcıların kimliklerini doğrulamalıdır. Operatörün, Google Sites kullanıcısının kullanıcı adı ve şifresine erişmesi gerekmez. Yalnızca AuthSub jetonu gereklidir.
AuthSub'ı web uygulamanıza entegre etme talimatlarını görüntüleyin
Tek kullanımlık jeton isteyin
Kullanıcı, uygulamanızı ilk kez ziyaret ettiğinde kimlik doğrulaması yapması gerekir. Genellikle, geliştiriciler bazı metinler ve kullanıcıyı yönlendiren bir bağlantı yazdırır
kullanıcının kimliğini doğrulamak ve dokümanlarına erişim isteğinde bulunmak için AuthSub onay sayfasına gidin. Google Data Python istemci kitaplığı şu işlevi sağlar:
generate_auth_sub_url()
kullanarak URL'yi oluşturun. Aşağıdaki kod AuthSubRequest sayfasına bir bağlantı oluşturur.
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()
G Suite tarafından barındırılan bir alanda kullanıcıların kimliğini doğrulamak istiyorsanız alan adını generate_auth_sub_url()
ile paylaşın:
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)
generate_auth_sub_url()
yöntemi, birden fazla parametre alır (ör. Search Ads 360'ın kullandığı sorgu parametrelerine
AuthSubRequest işleyicisi):
- sonraki URL: Google'ın yönlendirme yapacağı URL
Kullanıcı hesabına giriş yapıp erişim izni verdikten sonra;
Yukarıdaki örnekte
http://www.example.com/myapp.py
- kapsam —
https://sites.google.com/feeds/
- secure, jetonun güvenli ve kayıtlı modda kullanılıp kullanılmayacağını belirten bir boole değeridir; Yukarıdaki örnekte
True
- session, tek kullanımlık jetonun daha sonra bir oturum jetonuyla değiştirilip değiştirilmeyeceğini belirten ikinci bir boole değeri; Yukarıdaki örnekte
True
Oturum jetonuna yükseltme
AuthSub'ı Google Data API İstemci Kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.
Oturum jetonu hakkında bilgi alma
AuthSub'ı Google Data API İstemci Kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.
Oturum jetonunu iptal etme
AuthSub'ı Google Data API İstemci Kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.
İpucu: Uygulamanız uzun ömürlü oturum jetonunu başarıyla edindikten sonra
bunları daha sonra kullanmak üzere geri çağırmak için veritabanınızda saklarız. Uygulamanızı her çalıştırmada kullanıcıyı AuthSub'a geri göndermenize gerek yoktur.
İstemcide mevcut bir jetonu ayarlamak için client.auth_token = gdata.gauth.AuthSubToken(TOKEN_STR)
kullanın.
Web veya yüklü/mobil uygulamalar için OAuth
OAuth, AuthSub'a alternatif olarak kullanılabilir ve web uygulamaları için tasarlanmıştır. OAuth, AuthSub'ın güvenli ve kayıtlı modunu kullanmaya benzerdir .
OAuth'u yüklü uygulamanıza entegre etme talimatlarını görüntüleyin
İstek jetonu getiriliyor
Google Data API İstemci Kitaplıklarıyla OAuth Kullanma başlıklı makaleyi inceleyin.
İstek jetonunu yetkilendirme
Google Data API İstemci Kitaplıklarıyla OAuth Kullanma başlıklı makaleyi inceleyin.
Erişim jetonuna yükseltme
Google Data API İstemci Kitaplıklarıyla OAuth Kullanma başlıklı makaleyi inceleyin.
İpucu: Uygulamanız başarıyla bir OAuth erişim jetonu aldıktan sonra,
bunları daha sonra kullanmak üzere geri çağırmak için veritabanınızda saklarız. Uygulamanızı her çalıştırmada kullanıcıyı OAuth üzerinden geri göndermenize gerek yoktur.
İstemcide mevcut bir jetonu ayarlamak için client.auth_token = gdata.oauth.OAuthToken(TOKEN_STR, TOKEN_SECRET)
kullanın.
Yüklü/mobil uygulamalar için ClientLogin
ClientLogin, şunları yapması gereken yüklü veya mobil uygulamalar tarafından kullanılmalıdır: kullanıcılarının kimliklerini Google Hesaplarına doğrulatmaları. İlk çalıştırmada, uygulamanız kullanıcıdan kullanıcı adını/şifresini ister. Sonraki taleplerde, bir kimlik doğrulama jetonuna başvuruldu.
ClientLogin'i yüklü uygulamanıza dahil etme talimatlarını görüntüleyin
ClientLogin'i kullanmak için
ClientLogin()
SitesClient
nesnesinin yöntemi (şundan devralınan):
GDClient
. E-posta adresini belirtin ve
müşterinizin adına istek gönderen kullanıcının şifresi. Örneğin:
client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1') client.ClientLogin('user@gmail.com', 'pa$$word', client.source);
İpucu: Uygulamanız kullanıcının kimliğini ilk kez başarıyla doğruladıktan sonra yetkilendirme jetonunu, daha sonra kullanmak üzere veritabanınızda depolayın. Uygulamanızı her çalıştırmada kullanıcıdan şifresini istemenize gerek yoktur. Daha fazla bilgi için Yetkilendirme jetonunu geri çağırma bölümüne bakın.
Python uygulamalarınızda ClientLogin'i kullanma hakkında daha fazla bilgi için ClientLogin'i Google Data API İstemci Kitaplıklarıyla kullanma başlıklı makaleye bakın.
Site Özet Akışı
Site özet akışı, bir kullanıcının sahip olduğu veya görüntüleme izinlerine sahip olduğu Google Sites sitelerini listelemek için kullanılabilir. Mevcut bir sitenin adını değiştirmek için de kullanılabilir. Son olarak, G Suite alanlarında, bir dosyayı paylaşmak ve/veya bir şablondur.
Site listeleme
Kullanıcının erişebildiği siteleri listelemek için istemcinin GetSiteFeed()
yöntemini kullanın. Yöntem, isteğe bağlı olarak
bağımsız değişkeni uri
. Alternatif bir site özet akışı URI'si belirtmek için kullanabilirsiniz. Varsayılan olarak, GetSiteFeed()
istemci nesnesinde ayarlanan site adını ve alan adını kullanır. Aşağıdaki adımları öğrenmek için Başlarken bölümüne bakın:
istemci nesnenizde bu değerleri ayarlama hakkında daha fazla bilgi edinin.
Kimliği doğrulanmış kullanıcının site listesini getirmeyle ilgili bir örneği aşağıda bulabilirsiniz:
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
Yukarıdaki snippet sitenin başlığını, site adını, kopyalandığı siteyi ve EKL feed URI'sini yazdırır.
Yeni site oluşturma
Not: Bu özellik yalnızca G Suite alanlarında kullanılabilir.
Yeni sitelerin temel hazırlığı, kitaplığın CreateSite()
yöntemi kullanılarak yapılabilir.
GetSiteFeed()
yardımcısına benzer şekilde, CreateSite()
şunu da kabul eder:
isteğe bağlı uri
bağımsız değişkenidir. Bu bağımsız değişkeni, alternatif bir site özet akışı URI'si belirtmek için kullanabilirsiniz (
site, SitesClient
nesnenizde ayarlanan alan dışında farklı bir alan adına dahil edilmelidir.
"Seçenek listesi" temasıyla yeni bir site oluşturmaya ilişkin bir örneği burada bulabilirsiniz ve kullanıcılara başlık ve (isteğe bağlı) açıklama:
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
Yukarıdaki istek, example2.com
G Suite alanı altında yeni bir site oluşturacak.
Bu nedenle, sitenin URL'si https://sites.google.com/a/example2.com/sitemin-başlıki olur.
Site başarıyla oluşturulursa sunucu bir gdata.sites.data.SiteEntry
ile yanıt verir.
nesne; sunucu tarafından eklenen öğelerle doldurulur: site bağlantısı, sitenin EKL özet akışı.
Site adı, başlık, özet vb.
Site kopyalama
Not: Bu özellik yalnızca G Suite alanlarında kullanılabilir.
CreateSite()
, mevcut bir siteyi kopyalamak için de kullanılabilir. Bunu yapmak için source_site
anahtar kelime bağımsız değişkenini iletin.
Kopyalanan tüm sitelerde, entry.FindSourceLink()
üzerinden erişilebilen bu bağlantı bulunur. Aşağıda, sitenizin kopyasını oluşturmaya ilişkin bir
Yeni site oluşturma bölümünde oluşturulur:
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
Önemli noktalar:
- Yalnızca kimliği doğrulanmış kullanıcının sahip olduğu siteler ve site şablonları kopyalanabilir.
- Site şablonu da kopyalanabilir. "Bu siteyi şablon olarak yayınla" seçeneği sunulduğunda site, şablondur ayarının işaretli olup olmadığını kontrol edin.
- Kaynak sitede sahip olarak listelenmediğiniz sürece, başka bir alandan site kopyalayabilirsiniz.
Bir sitenin meta verilerini güncelleme
Bir sitenin başlığını veya özetini güncellemek için söz konusu siteyi içeren bir SiteEntry
olması gerekir. Bu
örnek, ilk olarak bir SiteEntry
getirmek ve ardından başlığını, açıklamasını ve kategori etiketini değiştirmek için GetEntry()
yöntemini kullanır:
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)
Etkinlik Feed'i Getiriliyor
Not: Bu feed'e erişmek için sitenin ortak çalışanı veya sahibi olmanız gerekir. İstemciniz bir AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulamalıdır. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.
Etkinlik feed'ini getirerek bir Site'nin son etkinliğini (değişiklikleri) getirebilirsiniz.
lib'in GetActivityFeed()
yöntemi bu feed'e erişim sağlar:
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)
GetActivityFeed()
işlevi çağrıldığında, şunları içeren bir gdata.sites.data.ActivityFeed
nesnesi döndürülür:
gdata.sites.data.ActivityEntry
. Her etkinlik girişi,
Sitede yapılan bir değişikliktir.
Düzeltme Geçmişi Alınıyor
Not: Bu feed'e erişmek için sitenin ortak çalışanı veya sahibi olmanız gerekir. İstemciniz bir AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulamalıdır. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.
Düzeltme feed'i, herhangi bir içerik girişinin düzeltme geçmişi hakkında bilgi sağlar. GetRevisionFeed()
yöntemi, belirtilen içerik girişine ilişkin düzeltmeleri getirmek için kullanılabilir. Yöntem, isteğe bağlı olarak uri
gerektirir
bir gdata.sites.data.ContentEntry
, içerik girişinin tam URI'si veya içerik giriş kimliğini kabul eden parametre kullanabilirsiniz.
Bu örnek, içerik feed'ini sorgular ve ilk içerik girişi için düzeltme feed'ini getirir:
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]
GetRevisionFeed()
işlevi çağrıldığında, şunları içeren bir gdata.sites.data.RevisionFeed
nesnesi döndürülür:
gdata.sites.data.RevisionEntry
. Her düzeltme girişi, içeriği,
sürüm numarası ve yeni sürümün oluşturulduğu tarih gibi bilgileri de içerir.
İçerik feed'i
İçerik feed'ini alma
Not: İçerik feed'i kimlik doğrulama gerektirebilir veya gerekmeyebilir; (Sitenin paylaşım izinlerine bağlı olarak). Site herkese açık değilse istemciniz bir AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulaması yapmalıdır. Görüntüleyin Sites hizmeti için kimlik doğrulama.
İçerik feed'i, bir sitenin en son içeriğini döndürür. lib'leri çağırarak erişilebilir
iletme işlemi için isteğe bağlı bir uri
dize parametresi alan GetContentFeed()
yöntemi
özelleştirilmiş bir sorgu.
Aşağıda, içerik özet akışının tamamını getirme ve bazı ilginç öğeleri yazdırmaya ilişkin bir örnek verilmiştir:
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
İpucu: entry.Kind()
, bir girişin türünü belirlemek için kullanılabilir.
Elde edilen feed
nesnesi, liste içeren bir gdata.sites.data.ContentFeed
/ gdata.sites.data.ContentEntry
. Her giriş, içindeki farklı bir sayfayı/öğeyi temsil eder
ve sitenin giriş türüne özel öğeler içeriyorsa. Daha iyi bir fikir için örnek uygulamaya göz atın
her giriş türünde kullanılabilen bazı özellikler.
İçerik feed'i sorgu örnekleri
Standart Google Data API sorgu parametrelerinden bazılarını kullanarak içerik feed'inde arama yapabilirsiniz. ve klasik Sites API'sine özel olanlar. Daha ayrıntılı bilgi ve desteklenen parametrelerin tam listesi için Başvuru Kılavuzu.
Not: Bu bölümdeki örneklerde gdata.sites.client.MakeContentFeedUri()
yardımcı yöntemi kullanılmaktadır
temel URI'sını oluşturabilirsiniz.
Belirli giriş türlerini alma
Yalnızca belirli bir giriş türünü getirmek için kind
parametresini kullanın. Örneğin, bu snippet yalnızca attachment
girişleri döndürür:
kind = 'webpage' print 'Fetching only %s entries' % kind uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind) feed = client.GetContentFeed(uri=uri)
Birden fazla tür döndürmek için her bir kind
öğesini virgülle ayırın. Örneğin, bu snippet filecabinet
ve
listpage
giriş:
kind = ','.join(['filecabinet', 'listpage']) print 'Fetching only %s entries' % kind uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind) feed = client.GetContentFeed(uri=uri)
Yola göre sayfa alma
Google Sitesindeki bir sayfanın göreli yolunu biliyorsanız o sayfayı getirmek için path
parametresini kullanabilirsiniz.
Bu örnek, şu adreste bulunan sayfayı döndürür:
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)
Üst sayfa altındaki tüm girişleri alma
Bir sayfanın içerik giriş kimliğini biliyorsanız (ör. aşağıdaki örnekte "1234567890") parent
parametresini kullanabilirsiniz
öğesini eklemeniz gerekir:
parent = '1234567890' print 'Fetching all children of parent entry: ' + parent uri = '%s?parent=%s' % (client.MakeContentFeedUri(), parent) feed = client.GetContentFeed(uri=uri)
Diğer parametreler için Başvuru Kılavuzu'na bakın.
İçerik Oluşturma
Not: Bir site için içerik oluşturmadan önce istemcide sitenizi ayarladığınızdan emin olun.client.site = "siteName"
Yeni içerik (web sayfaları, liste sayfaları, dosya dolabı sayfaları, duyuru sayfaları vb.) CreatePage()
kullanılarak oluşturulabilir.
Bu yöntemin ilk bağımsız değişkeni, oluşturulacak sayfanın türü, ardından başlık ve onun HTML içeriği olmalıdır.
Desteklenen düğüm türlerinin listesi için Başvuru Kılavuzu'ndaki kind
parametresine bakın.
Yeni öğeler / sayfalar oluşturma
Bu örnek, üst düzey altında yeni bir webpage
oluşturur ve sayfa gövdesi için bir XHTML içerir.
ve başlık başlığını 'Yeni Web Sayfası Başlığı' olarak ayarlar:
entry = client.CreatePage('webpage', 'New WebPage Title', html='<b>HTML content</b>') print 'Created. View it at: %s' % entry.GetAlternateLink().href
İstek başarılı olursa entry
, sunucuda oluşturulan girişin bir kopyasını gdata.sites.gdata.ContentEntry
olarak içerir.
Oluşturma sırasında doldurulan daha karmaşık bir giriş türü (ör. sütun başlıkları olan bir listpage
) oluşturmak için
gdata.sites.data.ContentEntry
öğesini manuel olarak girin, ilgili özellikleri doldurun ve client.Post()
yöntemini çağırın.
Özel URL yolları altında öğeler/sayfalar oluşturma
Varsayılan olarak önceki örnek, URL altında oluşturulur
http://sites.google.com/domainName/siteName/new-webpage-title
ve
"Yeni Web Sayfası Başlığı" şeklinde bir sayfa başlığına sahip olmalıdır. Yani başlık, URL için new-webpage-title
değerine normalleştirilir.
Bir sayfanın URL yolunu özelleştirmek için içerik girişinde page_name
özelliğini ayarlayabilirsiniz. CreatePage()
yardımcısı
değeri, bunu isteğe bağlı bir anahtar kelime bağımsız değişkeni olarak sağlar.
Bu örnekte, "File Storage" başlıklı yeni bir filecabinet
sayfası oluşturuluyor, ancak sayfa oluşturuluyor
http://sites.google.com/domainName/siteName/files
URL altında
(http://sites.google.com/domainName/siteName/file-storage
yerine)
page_name
özelliğini belirterek.
entry = client.CreatePage('filecabinet', 'File Storage', html='<b>HTML content</b>', page_name='files') print 'Created. View it at: ' + entry.GetAlternateLink().href
Sunucu, bir sayfanın URL yolunu adlandırmak için aşağıdaki öncelik kurallarını kullanır:
- Varsa
page_name
.a-z, A-Z, 0-9, -, _
şartlarını karşılamalıdır. title
, sayfa adı yoksa boş olmamalıdır. Normalleştirme, boşlukları "-" olacak şekilde kırpmak ve daraltmak için kullanılır vea-z, A-Z, 0-9, -, _
ile eşleşmeyen karakterleri kaldırın.
Alt sayfalar oluşturma
Bir üst sayfa altında alt sayfalar (alt sayfalar) oluşturmak için CreatePage()
ürününün parent
anahtar kelime bağımsız değişkenini kullanın.
parent
, bir gdata.sites.gdata.ContentEntry
veya
girişin tam öz kimliği.
Bu örnekte, announcementpage
öğeleri için içerik feed'i sorgulanır ve bulunan ilk öğenin altında yeni bir announcement
oluşturulur:
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!'
Dosya yükleme
Google Sites'ta olduğu gibi API, bir dosya dolabı sayfasına veya üst sayfaya ek yükleme işlemlerini destekler. Ekler yüklenmelidir
ana sayfaya Bu nedenle, yüklemeye çalıştığınız ContentEntry
üzerinde bir üst bağlantı ayarlamanız gerekir. Daha fazla bilgi için Alt sayfa oluşturma bölümüne bakın.
İstemci kitaplığının UploadAttachment()
yöntemi, eklerin yüklenmesi için arayüz sağlar.
Ekler yükleniyor
Bu örnekte, kullanıcının içerik feed'inde bulunan ilk filecabinet
dosyaya bir PDF dosyası yükleniyor.
Ek, "Yeni Çalışan El Kitabı" başlığıyla oluşturuldu ve (isteğe bağlı) bir açıklama ile "HR paketi"ni ekleyin.
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
Yükleme başarılı olursa attachment
, oluşturulan ekin sunucuda bir kopyasını içerir.
Klasöre ek yükleme
Google Sites'taki dosya dolapları klasörleri destekler. UploadAttachment()
, ek bir anahtar kelime sağlar
bağımsız değişkeni olan folder_name
öğesini, filecabinet
klasörüne ek yüklemek için kullanabilirsiniz. Klasörün adını belirtmeniz yeterlidir:
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')
Bu örneğin UploadAttachment()
öğesine bir gdata.data.MediaSource
nesnesi ilettiğine dikkat edin
olabilir. Ayrıca, belirli bir içerik türünü de geçirmez. Bunun yerine, içerik türü MediaSource nesnesinde belirtilir.
Web ekleri
Web ekleri, özel ek türleridir. Kısaca, web'deki diğer dosyaların bağlantılarıdır
filecabinet
girişlerinize ekleyebilirsiniz. Bu özellik, "Add file by URL" [URL ile dosya ekle] özelliğine benzerdir. yükleme yöntemini kullanabilirsiniz.
Not: Web ekleri yalnızca filecabinet
altında oluşturulabilir. Diğer sayfa türlerine yüklenemezler.
Bu örnek, kullanıcının içerik feed'inde bulunan ilk filecabinet
altında bir web eki oluşturur.
Başlığı ve (isteğe bağlı) açıklaması "GoogleLogo" olarak ayarlanmıştır ve "güzel renkler"
seçeneklerini görebilirsiniz.
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!'
Çağrı, 'http://www.google.com/images/logo.gif' adresindeki resmi işaret eden bir bağlantı oluşturuyor. filecabinet
.
İçerik güncelleniyor
Bir sayfanın meta verilerini ve/veya html içeriğini güncelleme
Herhangi bir giriş türünün meta verileri (başlık, pageName vb.) ve sayfa içeriği
(İstemcinin Update()
yöntemini) kullanarak.
Aşağıda, aşağıdaki değişikliklerle bir listpage
güncellemesinin bir örneği verilmiştir:
- Başlık "Güncellenmiş Başlık" olarak değiştirildi
- Sayfanın HTML içeriği "Güncellenen HTML İçeriği" olarak güncellenir
- Listenin ilk sütun başlığı "Sahip" olarak değiştirildi
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!'
Bir ekin içeriğini ve meta verilerini değiştirme
Yeni bir MediaSource
nesnesi oluşturarak ekin dosya içeriğini değiştirebilirsiniz.
müşterinin Update()
yöntemini çağırmasını isteyebilirsiniz. Ekin
meta veriler (başlık ve açıklama gibi) veya yalnızca meta veriler de güncellenebilir.
Bu örnekte, dosya içeriğinin ve meta verilerin aynı anda güncellenmesi gösterilmektedir:
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)
İçerik Siliniyor
Google Sitesinden bir sayfayı veya öğeyi kaldırmak için öncelikle içerik girişini alın, ardından istemcinin Delete()
yöntemini çağırın.
client.Delete(content_entry)
Ayrıca, Delete()
yöntemine içerik girişinin edit
bağlantısını iletebilir ve/veya silme işlemini zorunlu kılabilirsiniz:
# force=True sets the If-Match: * header instead of using the entry's ETag. client.Delete(content_entry.GetEditLink().href, force=True)
ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.
Ekleri İndirme
Her attachment
girişi, dosya içeriklerini indirmek için kullanılabilecek bir içerik src
bağlantısı içerir.
Sites istemcisi, dosyaya şu bağlantıdan erişmek ve dosyayı indirmek için yardımcı bir yöntem içerir: DownloadAttachment()
.
İlk bağımsız değişkeni için bir gdata.sites.data.ContentEntry
veya indirme URI'si, eki kaydetmek için de bir dosya yolu kabul eder
olarak ayarlayacağım.
Bu örnek, belirli bir ek girişini getirir (self
bağlantısını sorgulayarak) ve dosyayı belirtilen yola indirir:
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!'
Ekin içerik türüne uygun bir dosya uzantısı belirtmek uygulama geliştiriciye bağlıdır. İçerik türü
entry.content.type
adresinde bulunabilir.
Bazı durumlarda (ör. uygulamanız Google App Engine'de çalışıyorsa) dosyayı diske indiremeyebilirsiniz.
Bu tür durumlarda, dosya içeriğini getirmek ve bellekte depolamak için _GetFileContent()
kullanın.
Bu örnek indirme, anıya yapılan bir ektir.
try: file_contents = client._GetFileContent(attachment.content.src) # TODO: Do something with the file contents except gdata.client.RequestError, e: raise e
EKL Feed'i
Paylaşım İzinlerine (EKL'ler) Genel Bakış
EKL feed'indeki her EKL girişi, belirli bir varlığın erişim rolünü temsil eder: Kullanıcı, kullanıcı grubu, alan adı, veya varsayılan erişim (herkese açık site). Girişler yalnızca açık erişime sahip varlıklar için gösterilir; bir giriş gösterilir "Erişimi Olan Kişiler"deki her bir e-posta adresi için Google Sites arayüzünün paylaşım ekranındaki paneli açın. Bu nedenle, alan yöneticileri bir siteye erişimleri vardır.
Roller
Rol öğesi, bir öğenin sahip olabileceği erişim düzeyini temsil eder. gAcl:role
öğesinin dört olası değeri vardır:
- reader: Görüntüleyen (salt okuma erişimine eşdeğerdir).
- writer — bir ortak çalışan (okuma/yazma erişimine eşdeğerdir).
- owner — genellikle site yöneticisi (okuma/yazma erişimine eşdeğer)
Kapsamlar
Kapsam öğesi, bu erişim düzeyine sahip olan varlığı temsil eder. gAcl:scope
öğesinin dört olası türü vardır:
- user — bir e-posta adresi değeri (ör. "user@gmail.com").
- group — bir Google Grubu e-posta adresi, ör. "grup@alan.com".
- alanadi: Bir G Suite alan adı (ör. "alanadi.com").
- default: "Varsayılan" türünde yalnızca bir olası kapsam vardır ve değer yoktur.
(örn.
<gAcl:scope type="default">
). Bu kapsam, herhangi bir kullanıcının varsayılan olarak sahip olduğu erişimi kontrol eder yayınlayabilirsiniz.
Not: Alanların değeri gAcl:role
olamaz.
"sahip" olarak ayarla yalnızca okuyucu veya yazar olabilirler.
EKL feed'ini alma
EKL feed'i, bir sitenin paylaşım izinlerini kontrol etmek için kullanılabilir ve GetAclFeed()
yöntemi kullanılarak getirilebilir.
Aşağıdaki örnekte şu anda SitesClient
nesnesinde ayarlanmış olan sitenin EKL feed'i getirilir.
ve izin girişlerini yazdırır:
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)
Başarılı bir sorgudan sonra feed
, aşağıdakileri içeren bir gdata.sites.data.AclFeed
nesnesi olur:
gdata.sites.data.AclEntry
girişi.
SiteFeed'deki girişlerle çalışıyorsanız her SiteEntry
, kendi EKL feed'inin bir bağlantısını içerir.
Örneğin, bu snippet kullanıcının Site feed'indeki ilk siteyi getirir ve EKL feed'ini sorgular:
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())
Site paylaşma
Not: Belirli paylaşım EKL'leri, yalnızca alan yapılandırılmışsa mümkün olabilir tıklayın.
API'yi kullanarak bir Google Sitesi paylaşmak için istediğinizgdata.sites.gdata.AclEntry
gdata.acl.data.AclScope
ve gdata.acl.data.AclRole
değerleri. Bkz.
Olası AclScope
için EKL feed'ine Genel Bakış bölümü
ve AclRoles
değerleridir.
Bu örnek, 'kullanici@example.com' kullanıcısına Site'de okuma izinleri verir:
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)
Grup ve Alan düzeyinde paylaşım
Bir siteyi tek bir kullanıcıyla paylaşmaya benzer şekilde, bir siteyi bir
Google grubu veya G Suite alanı. Gerekli scope
değerleri aşağıda listelenmiştir.
Bir grup e-posta adresiyle paylaşma:
scope = gdata.acl.data.AclScope(value='group_name@example.com', type='group')
Alanın tamamıyla paylaşma:
scope = gdata.acl.data.AclScope(value='example.com', type='domain')
Alan düzeyinde paylaşım yalnızca G Suite alanlarında ve yalnızca sitenin barındırıldığı alan için desteklenir. Örneğin http://sites.google.com/a/alanadi1.com/siteA, Sitenin tamamını alanadi2.com ile paylaşamaz, yalnızca alanadi1.com ile paylaşabilir. Aşağıdakiler bir G Suite alanında barındırılmayan (ör. http://sites.google.com/site/siteB) alan adı davet edemez.
Paylaşım izinlerini değiştirme
Bir sitedeki mevcut bir paylaşım izni için önce söz konusu AclEntry
öğesini getirin, izni değiştirin
ve ardından sunucudaki EKL'yi değiştirmek için istemcinin Update()
yöntemini çağırın.
Bu örnekte, Site paylaşma bölümündeki önceki acl_entry
değiştiriliyor.
'kullanici@example.com' adresini güncelleyerek bir yazar olmak (ortak çalışan):
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)
ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.
Paylaşım izinleri kaldırılıyor
Bir paylaşım iznini kaldırmak için önce AclEntry
öğesini alın, ardından istemcinin Delete()
yöntemini çağırın.
client.Delete(acl_entry)
Ayrıca, Delete()
yöntemini acl girişinin edit
bağlantısını iletebilir ve/veya silme işlemini zorunlu kılabilirsiniz:
# force=True sets the If-Match: * header instead of using the entry's ETag. client.Delete(acl_entry.GetEditLink().href, force=True)
ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.
Özel Konular
Tekrar yayın veya giriş alma
Daha önce aldığınız bir feed'i veya girişi almak isterseniz şunu söyleyerek verimliliği artırabilirsiniz: sunucunun listeyi veya girişi, yalnızca son almanızdan sonra değişmişse göndermesini.
Bu tür koşullu alma işlemi yapmak için GetEntry()
öğesine bir ETag değeri iletin. Örneğin, mevcut bir entry
nesneniz varsa:
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
GetEntry()
, gdata.client.NotModified
istisnasını atarsa giriş
ETag, sunucudaki sürümle eşleşir. Böylece en güncel kopyaya sahip olursunuz.
Ancak başka bir istemci/kullanıcı değişiklik yaptıysa yeni giriş entry
içinde döndürülür.
Hiçbir istisna da dikkate alınmayacak.
ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.