Geliştirici Kılavuzu: Python

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

İstemci uygulamanız Blogger Data API'yi kullanarak yeni blog yayınları oluşturabilir, mevcut blog yayınlarını düzenleyebilir veya silebilir, ayrıca belirli ölçütlere uyan blog yayınlarını sorgular.

Bu belgede, Blogger Data API'nin işlevleriyle ilgili temel bilgilerin yanı sıra Python istemci kitaplığı kullanılarak gerçekleştirilen temel Data API etkileşimlerine dair örnekler sağlanmaktadır. Kitaplığın kullandığı temel protokol hakkında daha fazla bilgi edinmek isterseniz bu geliştirici kılavuzunun Protokol bölümünü inceleyin.

İçindekiler

Kitle

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

Bu belgede, Google Veri API'leri protokolünün arkasındaki genel fikirleri anladığınız varsayılmaktadır.

Genel Blogger Data API referans bilgileri için Protokol referans kılavuzuna bakın.

Başlarken

İstemci kitaplığını ayarlama konusunda yardım almak için Başlangıç Kılavuzu'na göz atın.

Python istemci kitaplığı için Python 2.2 veya daha yeni bir sürüm gerekir. İ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, yani bir Google hesabınız varsa hâlâ hazırsınız demektir.

Örnek kodu çalıştırma

Bu dokümanda gösterilen tüm örnek kodu içeren tam çalışan örnek istemci, BloggerExample.py dosyasının altındaki gdata-python-client/samples/blogger/ dizininde yer alır.

Ö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 vardır:

from gdata import service
import gdata
import atom

Blogger hizmetinde kimlik doğrulaması

Blogger Data API'yi kullanarak hem herkese açık hem de gizli feed'lere erişebilirsiniz. Herkese açık feed'ler kimlik doğrulama gerektirmez ancak salt okunurdur. Bloglarda değişiklik yapmak istiyorsanız müşterinizin, özel feed istemeden önce kimliğini doğrulaması gerekir. Şu üç yaklaşımdan birini kullanarak kimlik doğrulaması yapabilir:OAuth kimlik doğrulaması, AuthSub proxy kimlik doğrulaması veya ClientLogin kullanıcı adı/şifresi kimlik doğrulaması.

Genel olarak Google Veri API'leri ile kimlik doğrulama hakkında daha fazla bilgi edinmek için kimlik doğrulama belgelerini inceleyin.

Bu dokümanın sonraki bölümlerinde verilen örneklerin çoğu, kimliği doğrulanmış GDataService örneğinizin olduğunu varsayar.

OAuth kimlik doğrulaması

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

AuthSub proxy kimlik doğrulaması

AuthSub proxy kimlik doğrulaması, kullanıcılarının Google Hesaplarında kimliklerini doğrulaması gereken web uygulamaları tarafından kullanılır. Web sitesi operatörü ve istemci kodu, Blogger kullanıcısının kullanıcı adı ve şifresine erişemez. 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 belgelerine bakın.

Bir kullanıcı uygulamanızı ilk ziyaret ettiğinde kimliği henüz doğrulanmamıştır. Bu durumda, kullanıcıların 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östermeniz 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şleyici tarafından kullanılan sorgu parametrelerine karşılık gelir):

sonraki
Kimlik doğrulamasından sonra Google'ın kullanıcıyı yönlendirmesi gereken sayfanın URL'si.
kapsam
Uygulamanın Blogger feed'lerine erişmek için jeton istediğini belirtir. Kullanılacak kapsam dizesi http://www.blogger.com/feeds/ (elbette URL kodlamalı).
güvenli
İstemcinin güvenli bir jeton isteyip istemediğini belirtir.
oturum sayısı
İade edilen jetonun çok kullanımlı (oturum) jetonuyla değiştirilip değiştirilemeyeceğini belirtir.

Yukarıdaki örnekte, güvenli jeton istemeyen bir çağrı gösterilmektedir (secure değeri False'tir). Oluşturulan 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'ın sitesindeki bağlantıyı takip eder ve kendi 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. Örnek:

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ği için bu jeton, AuthSubSessionToken hizmetini çağıran UpgradeToSessionToken yöntemi kullanılarak bir AuthSub oturum jetonuyla değiştirilebilir:

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

Diğer bir deyişle, tek kullanımlık jetonunuzu UpgradeToSessionToken yöntemine geçirirsiniz ve AuthSub arayüzü bir oturum jetonu döndürür.

Uygulamanız, daha sonra Blogger ile yapılan etkileşimlerde oturum jetonu değerini kullanabilir. İstemci kitaplığı jetonu, isteklerle birlikte otomatik olarak gönderir.

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

İstemciniz tek kullanıcılı, yüklü bir istemci (masaüstü uygulaması gibi) ise ClientLogin kimlik doğrulamasını kullanın. GDataService örneğinizde ProgrammaticLogin() yöntemini çağırmanız yeterlidir. Bundan sonra Blogger ile olan tüm etkileşimlerin kimliği 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 belirledik. Birincisi, uygulamamızın companyName-applicationName-versionID biçimindeki adıdır. İkincisi, etkileşimde bulunmak istediğimiz hizmetin adıdır; üçüncüsü sunucunun adresidir.

account_type politikasının açıkça GOOGLE şeklinde ayarlandığına dikkat edin. Bu parametre ayarlanmazsa G Suite kullanıcılarının Blogger API'yi başarılı bir şekilde kullanması engellenir.

Örnek istekler ve yanıtlar dahil ClientLogin kimlik doğrulaması hakkında daha fazla bilgi edinmek için Yüklü Uygulamalar İçin Kimlik Doğrulama dokümanı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 dokümanlarında açıklandığı gibi kimlik doğrulama isteği başarısız olabilir ve bir CAPTCHA doğrulaması talep edebilir. Google'ın CAPTCHA testini yapmasını ve işlemesini istiyorsanız kullanıcıyı https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (ClientLogin dokümanlarında belirtilen CAPTCHA işleme URL'si yerine) gönderin.

Blog listesi alma

Blogger Data API, belirli bir kullanıcıya ait blogları listeleyen bir feed sağlar. Bu feed "metafeed."

Aşağıdaki örnek kod, meta feed'i almak için kimliği doğrulanmış GDataService örneği kullanır ve ardından her bir blog'un 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öntemi tarafından kullanılan URL'ye dikkat edin. Bu, varsayılan meta feed URL'sidir; kimliği doğrulanmış kullanıcıya ait blogların listesini döndürür. Farklı bir kullanıcının feed'ine erişmek için kullanıcının kimliğini meta feed URL'sine default yerine yerleştirebilirsiniz. Kullanıcının kimliği, kullanıcının profil URL'sinin sonundaki dize dizesidir.

Aşağıdaki kod snippet'i, blog kimliğinin feed'den nasıl çıkarılacağını gösterir. Yayın ve yorumlarda oluşturma, güncelleme ve silme işlemleri gerçekleştirmek için blog kimliğine ihtiyacınız olacaktır. Aşağıdaki snippet, 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 daha sonra kolay erişim için oluşturucuda blog kimliği ayarlanır. Bu belgede yer alan aşağıdaki örneklerin çoğu için blog_id bir değişken olarak iletilir.

Yayın oluşturma

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

Not: Yayınlar için özel yazar ayarlanması ş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ı yayınlama

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

Önce 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. Yeni bir blog yayınının nasıl yayınlanacağına dair bir örneği aşağıda bulabilirsiniz:

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 draft uzantı öğesini GDataEntry örneğinde ayarlamanız gerekir. Yukarıdaki blog yayını, 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?')

Taslak yayını alıp taslak özelliğini no olarak ayarlayıp yayını güncelleyerek mevcut bir taslak blog yayınını yayınlanmış bir yayına dönüştürebilirsiniz. Sonraki iki bölümde yayınları alma ve güncelleme konularını ele alacağız.

Yayınlar alınıyor

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

Blogger herkese açık feed'lerini kimlik doğrulaması olmadan sorgulayabilirsiniz. Bu nedenle, herkese açık bir blogdan yayın almadan önce kimlik bilgisi 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'i URL'siyle 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, belirli bir kriterle eşleşen bir dizi giriş (örneğin, belirli bir tarih aralığında yayınlanmış veya güncellenmiş blog yayınları için istekte bulunmanız) talep etmenize olanak tanır. Bunu yapmak için bir Query örneği oluşturur ve ardından 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 yayın 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 (etiketler olarak da bilinir) belirtir. Örneğin, http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie hem Fritz hem de Laurie etiketine sahip girişleri döndürür. Bu kategori sorgusunu Python istemci kitaplığında belirtmek için query.categories = ['Fritz','Laurie',]
maks_sonuç
Döndürülecek maksimum giriş sayısı.
yayınlanan_minimum, yayınlanan_maks
Giriş yayın tarihleriyle ilgili sınırlar.
başlangıç_dizini
Alınan ilk sonucun 1 tabanlı dizini (sayfalara ayırma için).
updated_min, updated_max
Giriş güncelleme tarihleriyle ilgili sınırlar. orderby parametresi updated olarak ayarlanmadığı sürece bu sorgu parametreleri yoksayılır.

Sorgu parametreleri hakkında daha fazla bilgi için Blogger Data API Referans Kılavuzu ve Google Veri API'leri Referans Kılavuzu'na göz atın.

Yayınlar güncelleniyor

Mevcut bir blog yayınını güncellemek için önce güncellemek istediğiniz girişi alın, değiştirin ve ardından Put yöntemini kullanarak Blogger'a gönderin. 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 çağrısı yapmadan önce bunları GDataEntry örneğinde ayarlamanız yeterlidir.

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

Yayınları silme

Bir yayını silmek için yayının düzenleme URL'sini GDataService nesnenizdeki Delete yöntemine aktarın. Örneğin:

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

Yorumlar

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

Yorum oluşturma

Yorum yayınlamak için GDataEntry nesnesi oluşturup 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ının sahip olduğu bir blogda yorum yayınlayabilirsiniz.

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

Yorumları alma

Belirli bir yayının yorumlarını, yorum feed'i 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 

Blog'un yorum feed'i URL'sini kullanarak da tüm yayınlarınızın yorumlarını öğrenebilirsiniz:

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

Yorumları silme

Bir yorumu silmek için yorumun düzenleme URL'sini GDataService nesnenizdeki Delete yöntemine şu şekilde 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