Geliştirici Kılavuzu: Python

Blogger Data API, istemci uygulamaların Blogger içeriğini Google Veri API'sı feed'leri biçiminde görüntülemesine ve güncellemesine olanak tanır.

İstemci uygulamanız, yeni blog yayınları oluşturmak, mevcut blog yayınlarını düzenlemek veya silmek ve belirli ölçütlerle eşleşen blog yayınlarını sorgulamak için Blogger Data API'yi kullanabilir.

Bu belgede, Blogger Data API'nin özellikleri hakkında biraz arka planın yanı sıra Python istemci kitaplığının kullanıldığı temel Data API etkileşimlerine dair örnekler verilmiştir. Kitaplığın kullandığı temel protokol hakkında daha fazla bilgi edinmek istiyorsanız bu geliştirici kılavuzunun Protokol bölümünü inceleyin.

İçindekiler

Kitle

Bu belge, Blogger ile etkileşim kurabilecek Python istemci uygulamaları yazmak isteyen programcılar için hazırlanmıştır.

Bu belgede, Google Veri API'leri protokolünün temelini oluşturan genel fikirleri anladığınız varsayılır.

Genel Blogger Data API referans bilgileri için Protokol başvuru kılavuzu'na bakın.

Başlarken

İstemci kitaplığını oluşturma konusunda yardım almak için Başlangıç Kılavuzu'na bakın.

Python istemci kitaplığı, Python 2.2 veya daha yeni bir sürüm gerektirir. İstemci kitaplığını indirdikten sonra, ElementTree paketini de indirip yüklemeniz gerekir.

Blogger hesabı oluşturma

Test amacıyla bir Blogger hesabına kaydolmak isteyebilirsiniz. Blogger Google Hesaplarını kullanır. Dolayısıyla, zaten bir Google hesabınız varsa hazırsınız demektir.

Örnek kodu çalıştırma

Bu belgede gösterilen tüm örnek kodları içeren, eksiksiz ve çalışan bir örnek istemci, gdata-python-client/samples/blogger/ dizininin altındaki BloggerExample.py dosyasında mevcuttur.

Örnek istemci, Blogger Data API'nin kullanımını göstermek için sağlanan blogda çeşitli işlemler gerçekleştirir.

Örneği aşağıdaki bağımsız değişkenlerle çalıştırabilirsiniz:

python BloggerExample.py --email [email_address] --password [password]

Bu dokümandaki örnekleri kendi kodunuzda kullanmak için aşağıdaki import ifadelerine ihtiyacınız olacaktır:

from gdata import service
import gdata
import atom

Blogger hizmeti için kimlik doğrulama

Blogger Veri API'sını kullanarak hem genel hem de özel yayınlara erişebilirsiniz. Herkese açık feed'ler herhangi bir kimlik doğrulaması gerektirmez ancak salt okunurdur. Blogları değiştirmek istiyorsanız özel feed'ler istemeden önce müşterinizin kimlik doğrulaması yapması gerekir. Şu üç yaklaşımdan herhangi birini kullanarak kimlik doğrulaması yapabilir:OAuth kimlik doğrulaması, AuthSub proxy kimlik doğrulaması veya ClientLogin kullanıcı adı/şifre kimlik doğrulaması.

Genel olarak Google Veri API'leriyle kimlik doğrulama hakkında daha fazla bilgi edinmek için kimlik doğrulama belgelerine bakın.

Bu belgenin sonraki bölümlerindeki örneklerin çoğu, kimliği doğrulanmış bir GDataService örneğiniz olduğunu varsayar.

OAuth kimlik doğrulaması

Python GData kitaplığını kullanarak OAuth kimlik doğrulaması hakkındaki belgeler için lütfen Google Veri Protokolü İstemci Kitaplıklarında OAuth bölümüne bakın.

AuthSub proxy kimlik doğrulaması

AuthSub proxy kimlik doğrulaması, kullanıcılarının kimliklerini Google Hesaplarında doğrulaması gereken web uygulamaları tarafından kullanılır. Web sitesi operatörü ve istemci kodunun Blogger kullanıcısının kullanıcı adı ve şifresine erişimi yoktur. Bunun yerine istemci, istemcinin belirli bir kullanıcı adına işlem yapmasına olanak tanıyan özel AuthSub jetonları alır. Daha ayrıntılı bilgi için AuthSub dokümanlarına bakın.

Bir kullanıcı, uygulamanızı ilk kez ziyaret ettiğinde henüz kimliği doğrulanmamıştır. Bu durumda, bloglarına erişim isteğinizin kimliğini doğrulamak için bazı bilgiler ve kullanıcıyı bir Google sayfasına yönlendiren bir bağlantı görüntülemeniz gerekir. Python istemci kitaplığı, Google sayfasının URL'sini oluşturmak için bir işlev sağlar. Aşağıdaki kod, AuthSubRequest sayfasının URL'sini alır:

def GetAuthSubUrl():
  next = 'http://www.example.com/welcome.pyc'
  scope = 'http://www.blogger.com/feeds/'
  secure = False
  session = True
  blogger_service = service.GDataService()
  return blogger_service.GenerateAuthSubURL(next, scope, secure, session);

authSubUrl = GetAuthSubUrl();
print '<a href="%s">Login to your Google account</a>' % authSubUrl

GenerateAuthSubURL yöntemi aşağıdaki parametreleri alır (AuthSubRequest işleyicisi tarafından kullanılan sorgu parametrelerine karşılık gelir):

sonraki
Google'ın, kimlik doğrulama işleminden sonra kullanıcıyı yönlendirmesi gereken sayfanın URL'si.
kapsam
Uygulamanın Blogger feed'lerine erişmek için jeton istediğini gösterir. Kullanılacak kapsam dizesi http://www.blogger.com/feeds/ şeklindedir (tabii ki URL olarak kodlanmış).
güvenli
İstemcinin güvenli bir jeton isteyip istemediğini gösterir.
oturum sayısı
Döndürülen jetonun, çok kullanımlık (oturum) jetonuyla değiştirilip değiştirilemeyeceğini gösterir.

Yukarıdaki örnek, güvenli jeton istemeyen bir çağrıyı gösterir (secure değerinin değeri False). Sonuçta elde edilen istek URL'si şöyle görünebilir:

https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fwelcome.pyc

Kullanıcı, Google sitesinin bağlantısını izler ve Google Hesabının kimliğini doğrular.

Kullanıcı kimliğini doğruladıktan sonra, AuthSub sistemi kullanıcıyı AuthSubRequest URL'sinin next sorgu parametresinde belirttiğiniz URL'ye yönlendirir. AuthSub sistemi bu URL'ye, token sorgu parametresinin değeri olarak bir kimlik doğrulama jetonu ekler. Örneğin:

http://www.example.com/welcome.pyc?token=yourAuthToken

Jeton değerini URL'den almanın çeşitli yolları vardır. Örneğin:

import cgi

parameters = cgi.FieldStorage()
authsub_token = parameters['token']

Bu jeton değeri, tek kullanımlık bir AuthSub jetonunu temsil eder. Bu örnekte, session = True belirtildiğinden bu jeton, AuthSubSessionToken hizmetini çağıran UpgradeToSessionToken yöntemi kullanılarak AuthSub oturum jetonuyla değiştirilebilir:

blogger_service = service.GDataService()
blogger_service.auth_token = authsub_token
blogger_service.UpgradeToSessionToken()

Yani tek kullanımlık jetonunuzu UpgradeToSessionToken yöntemine geçirirsiniz ve AuthSub arayüzü bir oturum jetonu döndürür.

Böylece uygulamanız, Blogger ile sonraki etkileşimlerinde oturum jetonu değerini kullanabilir. İstemci kitaplığı, jetonu isteklerle birlikte otomatik olarak gönderir.

ClientLogin kullanıcı adı/şifre doğrulaması

İstemciniz bağımsız, tek kullanıcılı "yüklü" bir istemciyse (masaüstü uygulaması gibi) ClientLogin kimlik doğrulamasını kullanın. GDataService örneğinizde ProgrammaticLogin() yöntemini çağırmanız yeterlidir. Ardından Blogger ile olan sonraki tüm etkileşimler doğrulanır:

blogger_service = service.GDataService('user@example.com', 'secretPassword')
blogger_service.source = 'exampleCo-exampleApp-1.0'
blogger_service.service = 'blogger'
blogger_service.account_type = 'GOOGLE'
blogger_service.server = 'www.blogger.com'
blogger_service.ProgrammaticLogin()

Yukarıdaki snippet'te GDataService örneğinde üç özellik ayarladık. Birincisi, uygulamamızın companyName-applicationName-versionID biçimindeki adıdır. İkincisi, etkileşimde bulunmak istediğimiz hizmetin adı, üçüncüsü ise sunucunun adresidir.

account_type öğesinin açıkça GOOGLE olarak ayarlandığına dikkat edin. Bu parametrenin ayarlanmaması G Suite kullanıcılarının Blogger API'yi başarılı bir şekilde kullanmasını engeller.

Örnek istekler ve yanıtlar da dahil olmak üzere ClientLogin kimlik doğrulaması hakkında daha fazla bilgi edinmek için Yüklü Uygulamalar İçin Kimlik Doğrulaması dokümanlarına bakın.

Not: Belirli bir oturumdaki tüm istekler için aynı jetonu kullanın; her Blogger isteği için yeni bir jeton almayın.

Not: ClientLogin belgelerinde açıklandığı gibi, kimlik doğrulama isteği başarısız olabilir ve bir CAPTCHA sorgulaması isteğinde bulunabilir. Google'ın CAPTCHA testini göndermesini ve işlemesini istiyorsanız kullanıcıyı, ClientLogin belgelerinde belirtilen CAPTCHA işleme URL'si yerine https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger adresine gönderin.

Blog listesi alınıyor

Blogger Data API, belirli bir kullanıcının bloglarını listeleyen bir özet akışı sağlar. Bu özet akışı, "meta feed" olarak bilinir.

Aşağıdaki örnek kod, meta feed'i almak için kimliği doğrulanmış bir GDataService örneği kullanır ve ardından her bir blogun başlığını yazdırır.

def PrintUserBlogTitles(blogger_service):
  query = service.Query()
  query.feed = '/feeds/default/blogs'
  feed = blogger_service.Get(query.ToUri())

  print feed.title.text
  for entry in feed.entry:
    print "\t" + entry.title.text

Get yönteminin kullandığı URL'yi not edin. Bu, varsayılan meta feed URL'sidir. Kimliği doğrulanmış geçerli kullanıcı için blog listesini döndürür. Farklı bir kullanıcının feed'ine erişmek için meta feed URL'sindeki default yerine kullanıcı kimliğini ekleyebilirsiniz. Kullanıcı kimliği, kullanıcının profil URL'sinin sonundaki haneden oluşan dizedir.

Aşağıdaki kod snippet'i, feed'den bir blog kimliğinin nasıl çıkarılacağını gösterir. Yayınlar ve yorumlarda oluşturma, güncelleme ve silme işlemleri gerçekleştirmek için blog kimliğine ihtiyacınız vardır. Aşağıdaki snippet bir kullanıcı için alınan ilk blogu seçer.

blog_id = feed.entry[0].GetSelfLink().href.split("/")[-1]

BloggerExample.py örneğinde bir BloggerExample sınıfı oluşturulur ve blog kimliği, daha sonra kolay erişim için oluşturucuda ayarlanır. Bu belgede yer alan aşağıdaki örneklerin çoğu için blog_id değişken olarak aktarılır.

Yayın oluşturma

Blogger Data API, yeni blog girişleri oluşturmanıza ve yayınlamanıza, ayrıca giriş taslakları oluşturmanıza olanak tanır.

Not: Yayınlar için özel yazar ayarlama şu anda desteklenmemektedir. Tüm yeni yayınlar, kimliği doğrulanmış kullanıcı tarafından oluşturulmuş gibi görünür.

Blog yayını paylaşma

Yeni blog girişleri yayınlamak için Python istemci kitaplığını kullanabilirsiniz.

Öncelikle blog yayınını temsil edecek bir GDataEntry örneği oluşturun. Ardından, blog yayınının başlığını, içeriğini ve diğer özelliklerini ayarlayabilirsiniz. Son olarak, yayını eklemek için GDataService örneğini kullanın. Aşağıda yeni bir blog yayınının nasıl oluşturulacağını gösteren bir örnek verilmiştir:

def CreatePublicPost(blogger_service, blog_id, title, content):
  entry = gdata.GDataEntry()
  entry.title = atom.Title('xhtml', title)
  entry.content = atom.Content(content_type='html', text=content)
  return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id)

blogEntry = CreatePublicPost(blogger_service, blog_id,
    title='I have the answer', content='Eureka! It is 42!')

Taslak blog yayını oluşturma

Taslak yayınlar, herkese açık yayınlarla aynı şekilde oluşturulur ancak GDataEntry örneğinde draft uzantı öğesini ayarlamanız gerekir. Yukarıdaki blog yayını, aşağıda vurgulanan satırlar eklenerek taslak olarak oluşturulabilir:

def CreateDraftPost(blogger_service, blog_id, title, content):
  entry = gdata.GDataEntry()
  entry.title = atom.Title('xhtml', title)
  entry.content = atom.Content(content_type='html', text=content)

  control = atom.Control()
  control.draft = atom.Draft(text='yes')
  entry.control = control

  return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id)

draftEntry = CreateDraftPost(blogger_service, blog_id,
    title='I have the question',
    content='What do you get if you multiply six by nine?')

Mevcut bir taslak blog yayınını yayınlanmış bir yayına dönüştürmek için taslak yayını alıp taslak özelliğini no olarak ayarlayabilir ve ardından yayını güncelleyebilirsiniz. Sonraki iki bölümde, yayınları alma ve güncelleme konusunu ele alacağız.

Yayınlar alınıyor

Aşağıdaki bölümlerde, sorgu parametreleri olan ve olmayan blog yayınları listesinin nasıl alınacağı açıklanmaktadır.

Blogger genel özet akışını kimlik doğrulaması olmadan sorgulayabilirsiniz. Bu nedenle, herkese açık bir blogdan yayın almadan önce kimlik bilgileri ayarlamanız veya AuthSub kimlik doğrulaması yapmanız gerekmez.

Tüm blog yayınları alınıyor

Kullanıcının yayınlarını almak için blog-yayını feed URL'si ile GetFeed yöntemini çağırın:

def PrintAllPosts(blogger_service, blog_id):
  feed = blogger_service.GetFeed('/feeds/' + blog_id + '/posts/default')

  print feed.title.text
  for entry in feed.entry:
    print "\t" + entry.title.text
    print "\t" + entry.content.text
    print "\t" + entry.updated.text
  print

Sorgu parametrelerini kullanarak yayınları alma

Blogger Data API, belirtilen ölçütlere uyan bir dizi giriş isteğinde bulunmanıza olanak tanır (ör. belirli bir tarih aralığında yayınlanmış veya güncellenmiş blog yayınlarını talep etme). Bunun için bir Query örneği oluşturup Get() yöntemini çağırırsınız.

Örneğin, tarih aralığı sorgusu göndermek için Query örneğinin published_min ve published_min özelliklerini ayarlayın. Aşağıdaki kod snippet'i, belirtilen başlangıç zamanı ile bitiş zamanı arasında yayınlanan her blog yayınının başlığını ve içeriğini yazdırır:

def PrintPostsInDateRange(blogger_service, blog_id, start_time='2007-04-01', end_time='2007-04-25'):
  query = service.Query()
  query.feed = '/feeds/' + blog_id + '/posts/default'
  query.published_min = start_time
  query.published_max = end_time
  feed = blogger_service.Get(query.ToUri())

  print feed.title.text + " posts between " + start_time + " and " + end_time
  for entry in feed.entry:
    print "\t" + entry.title.text
    print "\t" + entry.content.text
    print "\t" + entry.updated.text
  print

Query nesnesinin, yayınları almak için kullanılan aynı feed sonrası URL'si kullanılarak oluşturulduğuna dikkat edin.

Blogger Data API aşağıdaki Query özelliklerini destekler:

kategoriler
Feed sonuçlarını filtrelemek için kategorileri (etiket olarak da bilinir) belirtir. Örneğin, http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie, hem Fritz hem de Laurie etiketlerine sahip girişleri döndürür. Python istemci kitaplığında bu kategori sorgusunu belirtmek için query.categories = ['Fritz','Laurie',] kullanabilirsiniz
max_results
Döndürülecek maksimum giriş sayısı.
yayımlanan_min, yayınlanan_maks.
Girişlerin yayınlanma tarihleriyle ilgili sınırlar
start_index
Alınacak ilk sonucun 1 tabanlı dizini (sayfalara ayırma için).
güncellenmiş_min., güncellenmiş_maks.
Giriş güncelleme tarihleriyle ilgili sınırlar Bu sorgu parametreleri, orderby parametresi updated olarak ayarlanmadığı sürece yoksayılır.

Sorgu parametreleri hakkında daha fazla bilgi için Blogger Data API Başvuru Kılavuzu'na ve Google Veri API'leri Başvuru Kılavuzu'na bakın.

Yayınlar güncelleniyor

Mevcut bir blog yayınını güncellemek için önce güncellemek istediğiniz girişi alır, ardından bu girişi değiştirirsiniz ve Put yöntemini kullanarak Blogger'a gönderirsiniz. Aşağıdaki kod snippet'i, girişi sunucudan zaten aldığınızı varsayarak blog girişinin başlığını değiştirir.

def UpdatePostTitle(blogger_service, entry_to_update, new_title='The REAL answer'):
  entry_to_update.title = atom.Title('xhtml', new_title)
  return blogger_service.Put(entry_to_update, entry_to_update.GetEditLink().href)

Yukarıdaki kod, yeni güncellenen yayının tamamını içeren bir GDataEntry döndürür. Diğer özellikleri güncellemek için Put yöntemini çağırmadan önce bunları GDataEntry örneğinde ayarlamanız yeterlidir.

Not: Yayınlarla ilişkili yazar verilerinin değiştirilmesi şu anda desteklenmemektedir.

Yayınlar siliniyor

Bir yayını silmek için yayının düzenleme URL'sini GDataService nesnenizde şu şekilde Delete yöntemine iletin:

def DeletePost(blogger_service, edit_link_href):
  blogger_service.Delete(edit_link_href)

Yorum sayısı

Blogger Data API, yorum oluşturulmasına, alınmasına ve silinmesine olanak tanır. Yorumların güncellenmesi desteklenmez (web arayüzünde de kullanılamaz).

Yorum oluşturma

Yorum yayınlamak için bir GDataEntry nesnesi oluşturun ve aşağıdaki gibi ekleyin:

def CreateComment(blogger_service, blog_id, post_id, comment_text='Mostly harmless'):
  feed_uri = '/feeds/' + blog_id + '/' + post_id + '/comments/default'

  entry = gdata.GDataEntry()
  entry.content = atom.Content(content_type='xhtml', text=comment_text)
  return blogger_service.Post(entry, feed_uri)

Not: Şu anda yalnızca kimliği doğrulanmış kullanıcıya ait bir bloga yorum gönderebilirsiniz.

Not: Yorumlar için özel yazar ayarlama şu anda desteklenmemektedir. Tüm yeni yorumlar, kimliği doğrulanmış kullanıcı tarafından oluşturulmuş gibi görünür.

Yorum alma

Belirli bir yayına ilişkin yorumları, yayının yorumlar içerik takibi URL'sinden alabilirsiniz:

def PrintAllComments(blogger_service, blog_id, post_id):
  feed_url = '/feeds/' + blog_id + '/' + post_id + '/comments/default'
  feed = blogger_service.Get(feed_url)

  print feed.title.text
  for entry in feed.entry:
    print "\t" + entry.title.text
    print "\t" + entry.updated.text
  print 

Blogun yorum feed'i URL'sini kullanarak tüm yayınlardaki yorumları alabilirsiniz:

http://www.blogger.com/feeds/blogID/comments/default

Yorumlar siliniyor

Bir yorumu silmek için yorumun düzenleme URL'sini GDataService nesnenizdeki şu şekilde Delete yöntemine iletin:

def DeleteComment(blogger_service, post_id, comment_id):
  feed_url = '/feeds/' + post_id + '/comments/default/' + comment_id
  blogger_service.Delete(feed_url)

Başa dön