Python Kılavuzu

Ö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.

Başa dön

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)

Başa dön

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.

Başa dön

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 uriparametresi 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.

Başa dön

İç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.

Başa dö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.

Başa dö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:

  1. Varsa page_name. a-z, A-Z, 0-9, -, _ koşulunu karşılamalıdır.
  2. title, sayfa adı yoksa null olmamalıdır. Normalleştirme, boşlukları kısaltıp "-" olarak daraltmak ve a-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.

Başa dön



İç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)

Başa dön



İç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.

Başa dö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

Başa dön

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.

Başa dö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.

Başa dön