Python Kılavuzu

Önemli: Bu belge 2012'den önce yazılmıştır. Bu belgede açıklanan kimlik doğrulama seçenekleri (OAuth 1.0, AuthSub ve ClientGiriş) 20 Nisan 2012 tarihinden itibaren resmi olarak kullanımdan kaldırılmıştır ve artık kullanılamamaktadır. En kısa sürede OAuth 2.0'a taşımanızı öneririz.

Google Sites Data API'sı, istemci uygulamaların bir Google Sitesi içindeki 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 etkinlik listesini isteyebilir, düzeltme geçmişini alabilir ve ekleri indirebilir.

Bu kılavuz, Sites Data API'nin özellikleriyle ilgili temel bilgilere ek olarak Python istemci kitaplığını kullanarak API ile etkileşim kurmayla ilgili örnekler sunar. İstemci kitaplığını oluşturma konusunda yardım 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şim kurmak için kullandığı temel protokol hakkında daha fazla bilgi edinmek istiyorsanız lütfen protokol kılavuzunu inceleyin.

Kitle

Bu belge, Google Veri Python İstemci Kitaplığı'nı kullanarak Google Sites ile etkileşimde bulunan istemci uygulamaları yazmak isteyen geliştiricilere yöneliktir.

Kullanmaya başlama

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 istemciyi yükleme ve kullanma konusunda yardım için Google Veri Python Kitaplığı'nı Kullanmaya Başlama bölümüne bakın.

Örneği çalıştırma

Projenin Mercurial deposunun samples/sites alt dizininde (/samples/sites/sites_example.py) tam bir çalışma örneği 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'nin nasıl kullanılacağını gösteren birkaç işlem 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ı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 da gerekir. Uygulamanızın adını ve sitenin web alanı adını (URL'sinden) geçirin:

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

G Suite alanında barındırılan bir Siteyle çalışmak için domain parametresini kullanarak alanı 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ı için kullanılması önerilir. Şu biçimde olmalıdır: company-applicationname-version

Not: Kılavuzun geri kalanında, client değişkeninde bir SitesClient nesnesi oluşturduğunuz varsayılmaktadır.

Klasik Sites API'sine kimlik doğrulama

Python istemci kitaplığı, genel veya özel feed'lerle çalışmak için kullanılabilir. Sites Data API, sitenin izinlerine ve gerçekleştirmeye çalıştığınız işleme bağlı olarak özel ve genel feed'lere erişim sağlar. Örneğin, herkese açık bir sitenin içerik feed'ini okuyabilir ancak bu sitede güncelleme yapamazsınız. Bu, kimliği doğrulanmış bir istemci gerektirir. Bu işlem ClientLogin kullanıcı adı/şifre kimlik doğrulaması, AuthSub veya OAuth aracılığıyla yapılabilir.

AuthSub, OAuth ve ClientLog hakkında daha fazla bilgi edinmek için lütfen Google Veri API'leri Kimlik Doğrulamasına Genel Bakış sayfasına göz atın.

Web uygulamaları için AuthSub

Web Uygulamaları İçin AuthSub Kimlik Doğrulaması, kullanıcılarının kimliğini Google veya G Suite hesaplarında 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'ı web uygulamanıza dahil etme talimatlarını görüntüleyin

Tek kullanımlık jeton isteyin

Kullanıcı, uygulamanızı ilk ziyaret ettiğinde kimliğini doğrulaması gerekir. Genellikle, geliştiriciler, kullanıcının kimliğini doğrulamak ve dokümanlarına erişim talep etmek için metnin bir kısmını ve kullanıcıyı AuthSub onay sayfasına yönlendiren bir bağlantıyı yazdırır. Google Data Python istemci kitaplığı, bu URL'yi oluşturmak için generate_auth_sub_url() adlı bir işlev sağlar. Aşağıdaki kod, AuthSubRequest sayfasına yönlendiren 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 alandaki kullanıcıların kimliğini doğrulamak istiyorsanız alan adını generate_auth_sub_url() hizmetine iletin:

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önlendirme yapacağı URL; yukarıdaki örnekte http://www.example.com/myapp.py
  • kapsamhttps://sites.google.com/feeds/
  • secure, jetonun güvenli ve kayıtlı modda kullanılıp kullanılmayacağını belirten bir boole; yukarıdaki örnekte True
  • session, tek kullanımlık jetonun daha sonra bir oturum jetonuyla değiştirilip değiştirilmeyeceğini gösteren ikinci bir boole; yukarıdaki örnekte True

Oturum jetonuna yükseltme

AuthSub'ı Google Veri API'si İstemci Kitaplıklarıyla Kullanma bölümüne bakın.

Oturum jetonu hakkında bilgi alma

AuthSub'ı Google Veri API'si İstemci Kitaplıklarıyla Kullanma bölümüne bakın.

Oturum jetonunu iptal etme

AuthSub'ı Google Veri API'si İstemci Kitaplıklarıyla Kullanma bölümüne bakın.

İpucu: Uygulamanız uzun süreli bir oturum jetonunu başarıyla edindikten sonra, bu jetonu daha sonra kullanmak üzere geri çağırmak için veritabanınızda depolayın. Uygulamanızın her çalıştırıldığında kullanıcıyı AuthSub'a geri göndermeniz gerekmez. İstemcide mevcut bir jetonu ayarlamak için client.auth_token = gdata.gauth.AuthSubToken(TOKEN_STR) kodunu kullanın.

Web uygulamaları veya yüklü/mobil uygulamalar için OAuth

OAuth, AuthSub'a alternatif olarak kullanılabilir ve web uygulamalarına yöneliktir. OAuth, tüm veri isteklerinin dijital olarak imzalanması ve alanınızı kaydetmeniz gerektiği açısından AuthSub'ın güvenli ve kayıtlı modunu kullanmaya benzer.

OAuth'u yüklü uygulamanıza dahil etme talimatlarını görüntüleyin

İstek jetonu getirme

Google Veri API'sı İstemci Kitaplıklarıyla OAuth'u Kullanma başlıklı makaleyi inceleyin.

İstek jetonunu yetkilendirme

Google Veri API'sı İstemci Kitaplıklarıyla OAuth'u Kullanma başlıklı makaleyi inceleyin.

Erişim jetonuna yükseltme

Google Veri API'sı İstemci Kitaplıklarıyla OAuth'u Kullanma başlıklı makaleyi inceleyin.

İpucu: Uygulamanız başarıyla bir OAuth erişim jetonu edindikten sonra, daha sonra kullanmak üzere geri çağırmak için bu jetonu veritabanınızda depolayın. Uygulamanızın her çalıştırıldığı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) kodunu kullanın.

Yüklü/mobil uygulamalar için ClientLog

ClientLogin, kullanıcılarının Google hesaplarında kimlik doğrulamasını gerektiren yüklü uygulamalar 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 başvurulur.

ClientGiriş'i yüklü uygulamanıza ekleme talimatlarını inceleyin

ClientLogin'i kullanmak için GDClient'dan devralınan SitesClient nesnesinin ClientLogin() yöntemini çağırın. İstemciniz adına istek gönderen 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 yetkilendirme jetonunu daha sonra kullanmak üzere geri çağırmak için veritabanınızda depolayın. Uygulamanızın her çalıştırıldığında kullanıcıdan şifresini istemeniz gerekmez. Daha fazla bilgi için Yetkilendirme jetonunu geri çağırma sayfasına göz atın.

Python uygulamalarınızda ClientGiriş kullanımı hakkında daha fazla bilgi edinmek için Google Veri API'si İstemci Kitaplıklarıyla ClientGiriş'i kullanma bölümüne bakın.

Başa dön

Site İçerik Takibi

Site feed'i, bir kullanıcının sahip olduğu veya görüntüleme iznine 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ı için bir sitenin tamamını oluşturmak ve/veya kopyalamak için de kullanılabilir.

Siteleri listeleme

Kullanıcının erişebildiği siteleri listelemek için istemcinin GetSiteFeed() yöntemini kullanın. Bu yöntem, isteğe bağlı bir bağımsız değişken (uri) alır. Bu bağımsız değişkeni alternatif bir site feed'i URI'si belirtmek için kullanabilirsiniz. Varsayılan olarak GetSiteFeed(), istemci nesnesinde ayarlanan site adını ve alanı 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 getirmek için bir örnek:

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.

Kitaplığın CreateSite() yöntemi çağırılarak yeni sitelerin temel hazırlığı yapılabilir. GetSiteFeed() yardımcısına benzer şekilde CreateSite(), isteğe bağlı bir bağımsız değişkeni (uri) de kabul eder. Bu bağımsız değişkeni alternatif bir site feed'i URI'si belirlemek için kullanabilirsiniz (siteyi SitesClient nesnenizde ayarlanandan farklı bir alan adı altında oluşturmanız 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 bulabilirsiniz:

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 adlı G Suite alanı kapsamı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 doldurulan bir gdata.sites.data.SiteEntry nesnesiyle yanıt verir: sitenin bağlantısı, sitenin EKL feed'ine bir bağlantı, 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 siteler oluşturma bölümünde oluşturulan sitenin kopyalanmasına ilişkin bir örnek aşağıda verilmiştir:

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ıya ait siteler ve site şablonları kopyalanabilir.
  • Site şablonları da kopyalanabilir. Site, Google Sites ayarlar sayfasında "Bu siteyi şablon olarak yayınla" ayarı işaretlenmişse bir şablondur.
  • Kaynak sitede sahip olarak listelenmeniz koşuluyla bir siteyi başka bir alandan kopyalayabilirsiniz.

Bir sitenin meta verilerini güncelleme

Bir sitenin başlığını veya özetini güncellemek için siteyi içeren SiteEntry özelliğine ihtiyacınız vardır. Bu örnekte, önce bir SiteEntry getirmek 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'i getiriliyor

Not: Bu feed'e erişebilmek için Site'nin ortak çalışanı veya sahibi olmanız gerekir. İstemcinizin bir AuthSub, OAuth veya ClientLog jetonu kullanarak kimlik doğrulaması yapması gerekir. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.

Bir Sitenin son etkinliklerini (değişiklikleri) etkinlik feed'ini getirerek getirebilirsiniz. Kitaplığın GetActivityFeed() yöntemi, şu 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 listesini içeren bir gdata.sites.data.ActivityFeed nesnesini döndürür. Her etkinlik girişi, Site'de yapılan değişiklik hakkında bilgi içerir.

Başa dön

Düzeltme Geçmişi Alınıyor

Not: Bu feed'e erişebilmek için Site'nin ortak çalışanı veya sahibi olmanız gerekir. İstemcinizin bir AuthSub, OAuth veya ClientLog jetonu kullanarak kimlik doğrulaması yapması gerekir. Sites hizmetinde kimlik doğrulama başlıklı makaleyi inceleyin.

Düzeltme yayını, herhangi bir içerik girişi için düzeltme geçmişi hakkında bilgi sağlar. GetRevisionFeed() yöntemi, belirli bir içerik girişi için düzeltmeleri getirmek amacıyla kullanılabilir. Bu yöntem gdata.sites.data.ContentEntry, bir 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 listesini içeren bir gdata.sites.data.RevisionFeed nesnesini döndürür. Her düzeltme girişi; ilgili düzeltmenin içeriği, 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 için kimlik doğrulama gerekebilir veya gerekmeyebilir. Site herkese açık değilse istemciniz bir AuthSub, OAuth veya ClientLog jetonu kullanarak kimlik doğrulaması yapmalıdır. Sites hizmetinde kimlik doğrulama sayfasına göz atın.

İçerik feed'i bir sitenin en son içeriğini döndürür. Bu öğeye, lib'in özelleştirilmiş bir sorgunun iletilmesi için isteğe bağlı uri dize parametresi alan GetContentFeed() yönteminin çağrılmasıyla erişilebilir.

İçerik feed'inin tamamını getirmeye ve bazı ilginç öğeleri yazdırmaya ilişkin bir örneği burada görebilirsiniz:

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.

Sonuçta elde edilen feed nesnesi, gdata.sites.data.ContentEntry listesini içeren bir gdata.sites.data.ContentFeed olur. Her giriş, kullanıcının Sitesi içindeki farklı bir sayfayı/öğeyi temsil eder ve giriş türüne özel öğeler içerir. Her giriş türünde kullanılabilen özelliklerden bazıları 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 özel parametreleri kullanarak içerik feed'inde arama yapabilirsiniz. Daha ayrıntılı bilgiler ve desteklenen parametrelerin tam listesi için Başvuru Kılavuzu'na göz atın.

Not: Bu bölümdeki örneklerde, içerik feed'inin temel URI'sını oluşturmak için gdata.sites.client.MakeContentFeedUri() yardımcı yöntemi kullanılmıştı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ş 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)

Sayfa yola göre alınıyor

Google Sitesi'ndeki bir sayfanın göreli yolunu biliyorsanız söz konusu sayfayı getirmek için path parametresini kullanabilirsiniz. Bu örnek, http://sites.google.com/domainName/siteName/path/to/the/page konumunda 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)

Bir üst sayfanın altındaki tüm girişleri alma

Bir sayfanın içerik giriş 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)

Ek 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, istemcide sitenizi ayarladığınızdan emin olun.
client.site = "siteName"

CreatePage() kullanılarak yeni içerik (web sayfaları, liste sayfaları, dosya dolabı sayfaları, 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 sayfanın HTML içeriği olmalıdır.

Desteklenen düğüm türlerinin listesi için Referans Kılavuzu'ndaki kind parametresine bakın.

Yeni öğeler / sayfalar oluşturma

Bu örnek, üst düzeyin altında yeni bir webpage oluşturur, sayfa gövdesi için bazı XHTML'ler 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 dosyası olarak içerir.

Oluşturma sırasında doldurulan daha karmaşık bir giriş türü (ör. sütun başlıklı bir listpage) oluşturmak için gdata.sites.data.ContentEntry öğesini manuel olarak oluşturmanız, ilgili özellikleri doldurmanız ve client.Post() yöntemini çağırmanız gerekir.

Özel URL yolları altında öğeler/sayfa oluşturma

Varsayılan olarak, önceki örnek http://sites.google.com/domainName/siteName/new-webpage-title URL'sinin 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 sunar.

Bu örnekte "Dosya Depolama" başlıklı yeni bir filecabinet sayfası oluşturulur, ancak page_name özelliğini belirterek sayfayı http://sites.google.com/domainName/siteName/files URL'si (http://sites.google.com/domainName/siteName/file-storage yerine) 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. page_name (varsa). a-z, A-Z, 0-9, -, _ şartını karşılamalıdır.
  2. title, sayfa adı yoksa boş olmamalıdır. Normalleştirmede, boşlukların kırpılıp "-" karakteri için daraltılması ve a-z, A-Z, 0-9, -, _ ile eşleşmeyen karakterleri kaldırmanız gerekir.

Alt sayfalar oluşturma

Bir üst sayfa altında alt sayfalar oluşturmak için CreatePage() öğesinin parent anahtar kelime bağımsız değişkenini kullanın. parent, içerik girişinin tam öz kimliğini temsil eden bir gdata.sites.gdata.ContentEntry veya dize olabilir.

Bu örnekte, içerik feed'i announcementpage sn. için sorgulanır ve bulunan ilk öğe 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 bu API da dosya dolabı sayfasına veya üst sayfaya ek yükleme işlemlerini destekler. Ekler bir üst sayfaya yüklenmelidir. Bu nedenle, yüklemeye çalıştığınız ContentEntry için üst bağlantı oluşturmanız gerekir. Daha fazla bilgi için Alt sayfalar oluşturma konusuna bakın.

İstemci kitaplığının UploadAttachment() yöntemi, eklerin yüklenmesi için arayüz sağlar.

Ekler yükleniyor

Bu örnek, kullanıcının içerik feed'inde bulunan ilk filecabinet öğesine bir PDF dosyası yükler. Ek, "Yeni Çalışan El Kitabı" başlığı ve (isteğe bağlı) bir açıklama, "İK paketi" ile 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 sunucuda oluşturulan ekin bir kopyasını içerir.

Klasöre ek yükleme

Google Sites'taki dosya dolapları klasörleri destekler. 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. Bu 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 dosya yolu yerine bir gdata.data.MediaSource nesnesini ilettiğine dikkat edin. Ayrıca 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. Esasen, filecabinet girişlerinize ekleyebileceğiniz web'deki diğer dosyaların 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. Diğer sayfa türlerine yüklenemezler.

Bu örnekte, kullanıcının içerik feed'inde bulunan ilk filecabinet öğesinin altında bir web eki oluşturulur. Başlığı ve (isteğe bağlı) açıklaması sırasıyla 'GoogleLogo' ve 'güzel renkler' olarak ayarlanı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' resmine işaret eden bir bağlantı oluşturur.

Başa dön



İçerik Güncelleniyor

Bir sayfanın meta verilerini ve/veya html içeriğini güncelleme

Herhangi bir giriş türündeki meta veri (title, pageName vb.) ve sayfa içeriği, istemcinin Update() yöntemi kullanılarak düzenlenebilir.

Aşağıda, aşağıdaki değişikliklerle bir listpage güncelleme örneği verilmiştir:

  • Başlık, "Güncellenmiş Başlık" olarak değiştirildi
  • Sayfanın HTML içeriği "Güncellenmiş HTML İçeriği" olarak güncellenir
  • Listenin ilk sütun başlığı "Sahip" olarak değiştirilir
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

Bir ekin dosya içeriğini, yeni dosya içeriğiyle yeni bir MediaSource nesnesi oluşturarak ve istemcinin Update() yöntemini çağırarak değiştirebilirsiniz. Ekin meta verileri (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)

Başa dön



İçerik Siliniyor

Bir sayfayı veya öğeyi Google Sites sitesinden 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öntemini 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.

Başa dön



Ekleri İndirme

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 ş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şken için bir gdata.sites.data.ContentEntry veya indirme URI'si ve ikinci bağımsız değişken için eki kaydetmek için 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!'

Ekin içerik türü için uygun bir dosya uzantısı belirlemek uygulama geliştiricisine bağlıdır. İçerik türünü entry.content.type adresinde bulabilirsiniz.

Bazı durumlarda (ör. uygulamanız Google App Engine'de çalışıyorsa) dosyayı diske indiremeyebilirsiniz. Bu tür durumlarda dosya içeriğini getirmek ve belleğe depolamak için _GetFileContent() kullanın.

İndirilen bu örnek, belleğe eklenen bir ektir.

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

İzin Paylaşımına (EKL'ler) Genel Bakış

EKL feed'indeki her EKL girişi; bir kullanıcı, kullanıcı grubu, alan ya da varsayılan erişim (herkese açık bir site) olmak üzere belirli bir varlığın erişim rolünü temsil eder. Girişler, yalnızca açık erişimi olan varlıklar için gösterilir. Google Sites kullanıcı 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şimi olsa bile alan yöneticileri gösterilmez.

Roller

Rol öğesi, bir varlığın 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şimidir).
  • writer — Ortak çalışan (okuma/yazma erişimine eşdeğerdir).
  • sahip - genellikle site yöneticisidir (okuma/yazma erişimine eşdeğerdir).

Kapsamlar

Kapsam öğesi, bu erişim düzeyine sahip varlığı temsil eder. Olası dört gAcl:scope öğesi türü vardır:

  • kullanıcı: Bir e-posta adresi değeridir (ör. "kullanici@gmail.com").
  • group: Bir Google Grubu e-posta adresi (ör. "grup@alanadi.com").
  • alan — bir G Suite alan adıdır, ör. "alanadi.com".
  • default: "default" türünde yalnızca bir olası kapsam vardır (ör.<gAcl:scope type="default">). Bu kapsam, herhangi bir kullanıcının herkese açık bir sitede varsayılan olarak sahip olduğu erişimi kontrol eder.

Not: Alanların gAcl:role değeri "sahip" olarak ayarlanamaz. Yalnızca okuyucu veya yazar olabilirler.

EKL feed'i alınıyor

EKL feed'i bir sitenin paylaşım izinlerini kontrol etmek için kullanılabilir ve GetAclFeed() yöntemi kullanılarak getirilebilir.

Aşağıdaki örnek, şu anda SitesClient nesnesinde bulunan sitenin EKL feed'ini getirir 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, gdata.sites.data.AclEntry listesini içeren gdata.sites.data.AclFeed nesnesi olur.

SiteFeed'deki girişlerle çalışıyorsanız her SiteEntry, kendi EKL özet akışının 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 EKL'lerin paylaşılması, yalnızca alan bu tür izinlere izin verecek şekilde yapılandırılmışsa (ör.G Suite alanları için alan dışında paylaşım etkinse vb.) mümkün olabilir.

API kullanarak bir Google Sites sitesi paylaşmak için istenen gdata.acl.data.AclScope ve gdata.acl.data.AclRole değerleriyle bir 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.

Bu örnek, "user@example.com" kullanıcısına Sitede 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ında paylaşabilirsiniz. Gerekli scope değerleri aşağıda listelenmiştir.

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ı için ve yalnızca sitenin barındırıldığı alan için desteklenir. Örneğin, http://sites.google.com/a/alan1.com/siteA, sitenin tamamını 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 davet edemez.

Paylaşım izinlerini değiştirme

Sitedeki mevcut bir paylaşım iznini kullanmak için önce söz konusu AclEntry öğesini getirin, izni istediğiniz gibi 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ştirilerek "kullanici@example.com" adresi, yazar (ortak çalışan) olarak güncellenmektedir:

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.

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 yalnızca listeyi veya girişi, yalnızca son aldığınız zamandan bu yana değiştiyse göndermesini söyleyerek verimliliği artırabilirsiniz.

Bu tür bir 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şin ETag'i sunucudaki sürümle eşleşir. Bu, en güncel kopyaya sahip olduğunuz anlamına gelir. Ancak, başka bir istemci/kullanıcı değişiklik yaparsa yeni giriş entry içinde döndürülür ve hiçbir istisna atlanmaz.

ETag'ler hakkında daha fazla bilgi için Google Veri API'leri başvuru kılavuzuna bakın.

Başa dön