Önemli: Bu doküman 2012'den önce yazılmıştır. Bu dokümanda açıklanan kimlik doğrulama seçenekleri (OAuth 1.0, AuthSub ve ClientLogin) 20 Nisan 2012 itibarıyla resmi olarak kullanımdan kaldırıldı ve artık kullanılamıyor. En kısa sürede OAuth 2.0'a geçmenizi öneririz.
Google Sites Data API, istemci uygulamalarının Google Sites'teki içeriğe erişmesine, bu içeriği yayınlamasına ve değiştirmesine olanak tanır. Müşteri uygulamanız, son etkinliğin listesini isteyebilir, düzeltme geçmişini getirebilir ve ekleri indirebilir.
Bu kılavuz, Sites Data API'nin özellikleri hakkında biraz arka plan sağlamanın yanı sıra, Python istemci kitaplığını kullanarak API ile etkileşim kurma hakkında örnekler sağlar. İstemci kitaplığını oluşturma konusunda yardım almak için Google Data Python İstemci Kitaplığı'nı Kullanmaya Başlama bölümüne bakın. Python istemci kitaplığının klasik Sites API ile etkileşime geçmek için kullandığı temel protokol hakkında daha fazla bilgi edinmek istiyorsanız lütfen protokol kılavuzuna bakın.
Kitle
Bu doküman, Google Data Python İstemci Kitaplığı'nı kullanarak Google Sites ile etkileşimde bulunan istemci uygulamaları yazmak isteyen geliştiricilere yöneliktir.
Başlarken
Python istemci kitaplığını kullanmak için Python 2.2 veya sonraki bir sürümü ve DependencyModules wiki sayfasında listelenen modüllere ihtiyacınız vardır. İstemci kitaplığını indirdikten sonra, istemciyi yükleme ve kullanma konusunda yardım almak için Google Veri Python Kitaplığı'nı Kullanmaya Başlama bölümüne bakın.
Sana Özel'i çalıştırma
Tam çalışma örneği, projenin Mercurial deposunun samples/sites
alt dizininde (/samples/sites/sites_example.py) bulunmaktadır.
Ö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 klasik Sites API'sinin nasıl kullanıldığını gösteren çeşitli işlemler gerçekleştirmesine olanak tanır. Bu nedenle, belirli işlemleri (ör. içerik değiştirme) gerçekleştirmek için kimlik doğrulaması yapmanız gerekir. Program ayrıca AuthSub, OAuth veya ClientLogin aracılığıyla kimlik doğrulama yapmanızı ister.
Bu kılavuzda yer alan örnekleri kendi kodunuza dahil etmek 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'sine istemci bağlantısını temsil eden bir SitesClient
nesnesi de 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. Şu biçimde olmalıdır: company-applicationname-version
Not: Rehberin geri kalanında, client
değişkeninde bir SitesClient
nesnesi oluşturduğunuz varsayılmaktadı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, bir sitenin izinlerine ve gerçekleştirmeye çalıştığınız işleme bağlı olarak özel ve herkese açık feed'lere erişim sağlar. Örneğin, herkese açık bir Sitenin içerik feed'ini okuyabilir ancak güncelleme yapamayabilirsiniz. Bu durum, kimliği doğrulanmış istemci gerektirir. Bu işlem, ClientLogin kullanıcı adı/şifre kimlik doğrulaması, AuthSub veya OAuth aracılığıyla yapılabilir.
AuthSub, OAuth ve ClientLogin hakkında daha fazla bilgi için lütfen Google Data API'leri Kimlik Doğrulamasına Genel Bakış başlıklı makaleyi inceleyin.
Web uygulamaları için AuthSub
Web Uygulamaları için AuthSub Kimlik Doğrulaması, Google veya G Suite hesaplarında kullanıcılarının kimliğini doğrulaması gereken istemci uygulamaları tarafından kullanılmalıdır. Operatörün, Google Sites kullanıcısının kullanıcı adına ve şifresine erişmesi gerekmez. Yalnızca bir AuthSub jetonu gerekir.
AuthSub'u web uygulamanıza dahil etme talimatlarını görüntüleme
Tek kullanımlık jeton isteme
Kullanıcı, uygulamanızı ilk kez ziyaret ettiğinde kimliğini doğrulamalıdır. Geliştiriciler genellikle kullanıcının kimliğini doğrulamak ve dokümanları için erişim isteğinde bulunmak üzere kullanıcıyı AuthSub onay sayfasına yönlendiren bir metin ve bağlantı yazdırır. Google Data Python istemci kitaplığı, bu URL'yi oluşturmak için generate_auth_sub_url()
işlevini sunar. 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 birkaç parametre alır (AuthSubRequest işleyicisi tarafından kullanılan sorgu parametrelerine karşılık gelir):
- Sonraki URL: Kullanıcı hesabına giriş yapıp erişim izni verdikten sonra Google'ın yönlendireceği URL. 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
olarak gösterilmiştir. - session, tek kullanımlık jetonun daha sonra bir oturum jetonuyla değiştirilip değiştirilmeyeceğini belirten ikinci bir boole değeridir; yukarıdaki örnekte
True
Oturum jetonuna geçme
AuthSub'u Google Data API istemci 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 süreli oturum jetonunu başarıyla edindikten sonra, daha sonra kullanmak üzere bu jetonu veritabanınızda saklayın. Uygulamanızı her çalıştırdığınızda kullanıcıyı AuthSub'a geri göndermeniz gerekmez.
İstemcide mevcut bir jeton ayarlamak için client.auth_token = gdata.gauth.AuthSubToken(TOKEN_STR)
değerini 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, tüm veri isteklerinin dijital olarak imzalanması ve alanınızın kaydedilmesi gerektiği açısından AuthSub'un güvenli ve kayıtlı modunu kullanmaya benzer.
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 geçme
Google Data API istemci kitaplıklarıyla OAuth'ı kullanma başlıklı makaleyi inceleyin.
İpucu: Uygulamanız bir OAuth erişim jetonunu başarıyla aldıktan sonra, daha sonra kullanmak üzere geri çağırmak için bu jetonu veritabanınızda depolayın. Uygulamanızın her çalıştırmasında kullanıcıyı OAuth üzerinden geri göndermeniz gerekmez.
İ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, kullanıcılarının kimliğini Google Hesaplarıyla doğrulaması gereken yüklü veya mobil uygulamalar tarafından kullanılmalıdır. İlk çalıştırmada, uygulamanız kullanıcıdan kullanıcı adını/şifresini ister. Sonraki isteklerde bir kimlik doğrulama jetonuna referans verilir.
ClientLogin'i yüklü uygulamanıza dahil etme talimatlarını görüntüleme
ClientLogin'i kullanmak için GDClient
'dan devralınan SitesClient
nesnesinin ClientLogin()
yöntemini çağırın. İstemcinizin adına istek gönderdiği kullanıcının e-posta adresini ve şifresini belirtin. Ö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, kimlik doğrulama jetonunu daha sonra kullanmak üzere veritabanınızda saklayın. Uygulamanızı her çalıştırdığınızda kullanıcıdan şifresini istemeniz gerekmez. Daha fazla bilgi için Kimlik doğrulama jetonunu geri çağırma başlıklı makaleyi inceleyin.
ClientLogin'u Python uygulamalarınızda kullanma hakkında daha fazla bilgi için ClientLogin'u Google Data API istemci kitaplıklarıyla kullanma başlıklı makaleyi inceleyin.
Site Feed'i
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 sitenin tamamını oluşturmak ve/veya kopyalamak için de kullanılabilir.
Listeleme siteleri
Kullanıcının erişebildiği siteleri listelemek için istemcinin GetSiteFeed()
yöntemini kullanın. Yöntem, alternatif bir site feed'i URI'si belirtmek için kullanabileceğiniz isteğe bağlı bir uri
bağımsız değişkeni alır. Varsayılan olarak GetSiteFeed()
, istemci nesnesinde ayarlanan site adını ve alanını kullanır. İstemci nesnenizde bu değerleri ayarlama hakkında daha fazla bilgi için Başlarken bölümüne bakın.
Kimliği doğrulanmış kullanıcının site listesini getirme örneğini 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'te sitenin başlığı, site adı, kopyalandığı site ve acl feed'i URI'si gösterilir.
Yeni site oluşturma
Not: Bu özellik yalnızca G Suite alanlarında kullanılabilir.
Yeni siteler, kitaplığın CreateSite()
yöntemi çağrılarak hazırlanabilir.
GetSiteFeed()
yardımcısına benzer şekilde CreateSite()
,
isteğe bağlı uri
bağımsız değişkenini de kabul eder. Bu bağımsız değişkeni alternatif bir site feed'i URI'si belirtmek için kullanabilirsiniz (siteyi SitesClient
nesnenizde ayarlanan alan dışında farklı bir alan altında oluşturulması durumunda).
"Seçenek listesi" temasıyla yeni bir site oluşturup başlık ve (isteğe bağlı) açıklama sağlamayla ilgili bir örneği burada görebilirsiniz:
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şturur.
Bu durumda sitenin URL'si https://sites.google.com/a/example2.com/title-for-my-site olur.
Site başarıyla oluşturulursa sunucu, sunucu tarafından eklenen öğelerle doldurulmuş bir gdata.sites.data.SiteEntry
nesnesiyle yanıt verir: sitenin bağlantısı, sitenin EKL feed'inin bağlantısı, 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. Yeni site oluşturma bölümünde oluşturulan sitenin kopyasını oluşturma örneğini burada bulabilirsiniz:
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. Google Sites ayarları sayfasında "Bu siteyi şablon olarak yayınla" ayarı işaretliyse site şablondur.
- Kaynak sitede sahip olarak listelenmiş olmanız koşuluyla, başka bir alandaki bir siteyi kopyalayabilirsiniz.
Sitenin meta verilerini güncelleme
Bir sitenin başlığını veya özetini güncellemek için söz konusu siteyi içeren bir SiteEntry
'ye ihtiyacınız vardır. Bu örnekte, önce bir SiteEntry
almak ve ardından başlığını, açıklamasını ve kategori etiketini değiştirmek için GetEntry()
yöntemi kullanılmaktadı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'ini getirme
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.
Kitaplığın 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()
çağrısı, gdata.sites.data.ActivityEntry
öğelerinin listesini içeren bir gdata.sites.data.ActivityFeed
nesnesi döndürür. Her etkinlik girişi, Site'de yapılan bir değişiklikle ilgili bilgileri içerir.
Düzeltme Geçmişi Alınıyor
Not: Bu feed'e erişmek için sitenin iş ortağı veya sahibi olmanız gerekir. İstemciniz AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulaması yapmalı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, belirli bir içerik girişine ait düzeltmeleri almak için kullanılabilir. Yöntem, gdata.sites.data.ContentEntry
, içerik girişinin tam URI'si veya içerik girişi kimliğini kabul eden isteğe bağlı bir uri
parametresi alır.
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()
çağrısı, gdata.sites.data.RevisionEntry
öğelerinin listesini içeren bir gdata.sites.data.RevisionFeed
nesnesi döndürür. Her düzeltme girişi, ilgili düzeltmedeki içerik, sürüm numarası ve yeni sürümün ne zaman oluşturulduğu gibi bilgileri içerir.
İçerik feed'i
İçerik feed'ini alma
Not: Sitenin paylaşım izinlerine bağlı olarak, içerik feed'i kimlik doğrulama gerektirebilir veya gerekmeyebilir. Site herkese açık değilse istemciniz bir AuthSub, OAuth veya ClientLogin jetonu kullanarak kimlik doğrulaması yapmalıdır. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.
İçerik feed'i, bir sitenin en son içeriğini döndürür. lib'in GetContentFeed()
yöntemi çağrılarak erişilebilir. Bu yöntem, özelleştirilmiş bir sorgunun iletilmesi için isteğe bağlı bir uri
dize parametresi alır.
Aşağıda, içerik feed'inin tamamını getirme ve bazı ilginç öğeleri yazdırma örneği 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, gdata.sites.data.ContentEntry
listesini içeren bir gdata.sites.data.ContentFeed
olur. Her giriş, kullanıcının Sitesindeki farklı bir sayfayı/öğeyi temsil eder ve bu girişin türüne özel öğeler içerir. Her giriş türünde kullanılabilen bazı özellikler hakkında daha iyi fikir edinmek için örnek uygulamaya bakın.
İçerik feed'i sorgu örnekleri
Standart Google Data API sorgu parametrelerinden bazılarını ve klasik Sites API'ye özgü parametreleri kullanarak içerik feed'inde arama yapabilirsiniz. Daha ayrıntılı bilgi ve desteklenen parametrelerin tam listesi için Başvuru Kılavuzu'na bakın.
Not: Bu bölümdeki örneklerde, içerik feed'inin temel URI'sini oluşturmak için gdata.sites.client.MakeContentFeedUri()
yardımcı yöntemi kullanılmaktadır.
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şi 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 kind
değerini virgülle ayırın. Örneğin, bu snippet filecabinet
ve listpage
girişlerini döndürür:
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, http://sites.google.com/domainName/siteName/path/to/the/page
adresinde bulunan sayfayı döndürür:
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şi kimliğini biliyorsanız (ör. aşağıdaki örnekte "1234567890") tüm alt girişlerini (varsa) getirmek için parent
parametresini kullanabilirsiniz:
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 Referans Kılavuzu'na bakın.
İçerik Oluşturma
Not: Bir site için içerik oluşturmadan önce sitenizi istemcide ayarladığınızdan emin olun.client.site = "siteName"
CreatePage()
kullanılarak yeni içerikler (web sayfaları, liste sayfaları, dosya dolapları, duyuru sayfaları vb.) oluşturulabilir.
Bu yöntemin ilk bağımsız değişkeni, oluşturulacak sayfanın türü, ardından başlık ve HTML içeriği olmalıdır.
Desteklenen düğüm türlerinin listesi için Referans Kılavuzu'ndaki kind
parametresine bakın.
Yeni öğe/sayfa oluşturma
Bu örnekte, üst düzeyin altına yeni bir webpage
oluşturulur, sayfa gövdesi için bazı XHTML'ler eklenir ve başlık başlığı "Yeni Web Sayfası Başlığı" olarak ayarlanır:
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şturulduğunda doldurulan daha karmaşık giriş türleri (ör. sütun başlıkları içeren bir listpage
) oluşturmak için gdata.sites.data.ContentEntry
öğesini manuel olarak oluşturmanız, ilgilendiğiniz özellikleri doldurmanız ve client.Post()
öğesini çağırmanız gerekir.
Özel URL yolları altında öğe/sayfa oluşturma
Varsayılan olarak, önceki örnek http://sites.google.com/domainName/siteName/new-webpage-title
URL'si altında oluşturulur ve "Yeni Web Sayfası Başlığı" sayfa başlığına sahiptir. Yani başlık, URL için new-webpage-title
olarak normalleştirilir.
Bir sayfanın URL yolunu özelleştirmek için içerik girişinde page_name
özelliğini ayarlayabilirsiniz. CreatePage()
yardımcısı bunu isteğe bağlı bir anahtar kelime bağımsız değişkeni olarak sağlar.
Bu örnekte, "Dosya Depolama" başlığıyla yeni bir filecabinet
sayfası oluşturulur, ancak page_name
özelliğini belirterek sayfayı http://sites.google.com/domainName/siteName/files
(http://sites.google.com/domainName/siteName/file-storage
yerine) URL'si altında oluşturur.
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, -, _
koşulunu karşılamalıdır. title
, sayfa adı yoksa null olmamalıdır. Normalleştirme, boşlukları kısaltıp "-" olarak daraltmak vea-z, A-Z, 0-9, -, _
ile eşleşmeyen karakterleri kaldırmaktır.
Alt sayfa 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 içerik girişinin tam öz kimliğini temsil eden bir dize olabilir.
Bu örnekte, announcementpage
öğeleri için içerik feed'i sorgulanmakta 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'te olduğu gibi API, dosya dolabı sayfasına veya üst sayfaya ek yüklemeyi destekler. Ekler, üst sayfaya
yüklenmelidir. 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 başlıklı makaleyi inceleyin.
İstemci kitaplığının UploadAttachment()
yöntemi, ekleri yükleme arayüzünü sağlar.
Ekler yükleniyor
Bu örnekte, kullanıcının içerik feed'inde bulunan ilk filecabinet
öğesine bir PDF dosyası yüklenir.
Ek, "Yeni Çalışan El Kitabı" başlığı ve "İK paketi" (isteğe bağlı) açıklamasıyla oluşturulur.
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 sunucudaki kopyasını içerir.
Klasöre ek yükleme
Google Sites'teki dosya dolaplarında klasörler desteklenir. UploadAttachment()
, filecabinet
klasörüne ek yüklemek için kullanabileceğiniz folder_name
ek bir anahtar kelime bağımsız değişkeni sağlar. 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 örnekte, bir dosya yolu yerine UploadAttachment()
nesnesine gdata.data.MediaSource
nesnesi aktarıldığını unutmayın. Ayrıca bir içerik türü de iletmez. Bunun yerine, içerik türü MediaSource nesnesinde belirtilir.
Web ekleri
Web ekleri, özel ek türleridir. Temel olarak, web'deki diğer dosyaların filecabinet
listelemelerinize ekleyebileceğiniz bağlantılarıdır. Bu özellik, Google Sites kullanıcı arayüzündeki "URL ile dosya ekle" yükleme yöntemine benzer.
Not: Web ekleri yalnızca filecabinet
altında oluşturulabilir. Bu dosyalar diğer sayfa türlerine yüklenemez.
Bu örnekte, kullanıcının içerik feed'inde bulunan ilk filecabinet
öğesinin altına bir web eki oluşturulur.
Başlığı ve (isteğe bağlı) açıklaması sırasıyla "GoogleLogo" ve "güzel renkler" olarak ayarlanmıştır.
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ı, filecabinet
içindeki "http://www.google.com/images/logo.gif" adresindeki resmi işaret eden bir bağlantı oluşturur.
İçerik güncelleme
Sayfanın meta verilerini ve/veya HTML içeriğini güncelleme
İstemcinin Update()
yöntemi kullanılarak herhangi bir giriş türünün meta verileri (title, pageName vb.) ve sayfa içeriği düzenlenebilir.
Aşağıda, bir listpage
öğesinin aşağıdaki değişikliklerle güncellenmesine ilişkin bir örnek verilmiştir:
- Başlık "Güncellenen Başlık" olarak değiştirilir.
- 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 eki içeriği ve meta verileriyle değiştirme
Yeni dosya içeriğiyle yeni bir MediaSource
nesnesi oluşturup istemcinin Update()
yöntemini çağırarak bir eki değiştirebilirsiniz. Ekteki meta veriler (ör. başlık ve açıklama) veya yalnızca meta veriler de güncellenebilir.
Bu örnekte, dosya içeriği ve meta verilerinin aynı anda nasıl güncelleneceği 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 Silme
Bir sayfayı veya öğeyi Google sitesinden kaldırmak için önce içerik girişini alın, ardından istemcinin Delete()
yöntemini çağırın.
client.Delete(content_entry)
Ayrıca, içerik girişinin edit
bağlantısını Delete()
yöntemine iletebilir ve/veya silme işlemini zorlayabilirsiniz:
# 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 indirme
Her attachment
girişi, dosya içeriğini indirmek için kullanılabilecek bir içerik src
bağlantısı içerir.
Sites istemcisi, dosyaya bu 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, ikinci bağımsız değişkeni için de eki kaydedilecek bir dosya yolu kabul eder.
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!'
Ekteki içeriğin türüne uygun bir dosya uzantısı belirtmek uygulama geliştiricisinin sorumluluğundadır. İçerik türünü entry.content.type
bölümünde bulabilirsiniz.
Bazı durumlarda dosyayı diske indiremeyebilirsiniz (ör. uygulamanız Google App Engine'da çalışıyorsa).
Bu tür durumlarda, dosya içeriğini almak ve bellekte depolamak için _GetFileContent()
işlevini kullanın.
Bu örnekte, bir ek belleğe indirilmektedir.
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 izinlerine (ACL'ler) genel bakış
ACL feed'indeki her ACL girişi, belirli bir öğenin (kullanıcı, kullanıcı grubu, alan veya varsayılan erişim (herkese açık site)) erişim rolünü temsil eder. Girişler yalnızca açıkça erişime sahip olan varlıklar için gösterilir. Google Sites arayüzünün paylaşım ekranındaki "Erişimi Olan Kişiler" panelinde her e-posta adresi için bir giriş gösterilir. Bu nedenle, bir siteye dolaylı erişimleri olsa bile alan yöneticileri gösterilmez.
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ğer).
- yazar: Ortak çalışan (okuma/yazma erişimine eşdeğer).
- 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:
- kullanıcı: E-posta adresi değeri (ör. "kullanıcı@gmail.com").
- group — bir Google Grubu e-posta adresi, ör. "grup@alan.com".
- alanadi: Bir G Suite alan adı (ör. "alanadi.com").
- default: "default" türündeki tek olası kapsamın değeri yoktur (ör.
<gAcl:scope type="default">
). Bu kapsam, herkese açık bir sitede herhangi bir kullanıcının varsayılan olarak sahip olduğu erişimi kontrol eder.
Not: Alanların gAcl:role
değeri "sahip" erişimi olarak ayarlanamaz. Yalnızca okuyucu veya yazar olabilirler.
EKL feed'ini alma
ACL 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 ayarlanan sitenin EKL feed'i getirilir ve izin girişleri yazdırılı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
, gdata.sites.data.AclEntry
öğelerinin listesini içeren bir gdata.sites.data.AclFeed
nesnesi olur.
SiteFeed'deki girişlerle çalışıyorsanız her SiteEntry
, ACL feed'inin 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 ACL'leri yalnızca alan bu tür izinlere izin verecek şekilde yapılandırılmışsa (ör. G Suite alanları için alanın dışında paylaşım etkinleştirilmişse) kullanılabilir.
API'yi kullanarak bir Google Sites sitesini paylaşmak için istediğiniz gdata.acl.data.AclScope
ve gdata.acl.data.AclRole
değerleriyle gdata.sites.gdata.AclEntry
oluşturun. Olası AclScope
ve AclRoles
değerleri için EKL feed'ine Genel Bakış bölümüne bakın.
Şu ö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 Google grubu veya G Suite alanıyla paylaşabilirsiniz. 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ı ve yalnızca sitenin barındırıldığı alan için desteklenir. Örneğin, http://sites.google.com/a/alanim1.com/siteA, sitenin tamamını yalnızca alan1.com ile paylaşabilir, alan2.com ile paylaşamaz. G Suite alanında barındırılmayan siteler (ö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 istediğiniz şekilde 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
'mizi değiştirerek "kullanici@example.com"u yazar (ortak çalışan) olarak güncelliyoruz:
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)
E-etiketler hakkında daha fazla bilgi için Google Veri API'leri referans kılavuzuna bakın.
Paylaşım izinlerini kaldırma
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, acl girişinin edit
bağlantısını Delete()
yöntemine iletebilir ve/veya silme işlemini zorlayabilirsiniz:
# 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
Bir feed'i veya girişi tekrar alma
Daha önce aldığınız bir feed'i veya girişi almak istiyorsanız sunucuya, listeyi veya girişi yalnızca son aldığınızdan beri değiştiyse göndermesini söyleyerek verimliliği artırabilirsiniz.
Bu tür koşullu getirme işlemini yapmak için GetEntry()
öğesine bir ETag değeri gönderin. Ö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ı atarsa girişin ETag'i sunucudaki sürümle eşleşir. Bu durumda 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 ve herhangi bir istisna uygulanmaz.
E-etiketler hakkında daha fazla bilgi için Google Veri API'leri referans kılavuzuna bakın.