Geliştirici Kılavuzu: Python

Blogger Data API, istemci uygulamalarının Blogger içeriğini Google Data API 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çütlere uyan blog yayınlarını sorgulamak için Blogger Veri API'sini kullanabilir.

Bu doküman, Blogger Veri API'sinin özellikleri hakkında bilgi vermenin yanı sıra Python istemci kitaplığını kullanarak temel Veri API etkileşimlerine dair örnekler sunar. Kitaplığın kullandığı temel protokol hakkında daha fazla bilgi edinmek istiyorsanız bu geliştirici kılavuzunun Protokol bölümüne göz atın.

İçindekiler

Kitle

Bu doküman, Blogger ile etkileşime geçebilecek Python istemci uygulamaları yazmak isteyen programcılara yöneliktir.

Bu dokümanda, Google Veri API'leri protokolünün temel fikirlerini anladığınız varsayılmaktadır.

Blogger Data API ile ilgili genel referans bilgileri için Protokol referans kılavuzuna bakın.

Başlarken

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

Python istemci kitaplığı için Python 2.2 veya sonraki bir sürüm gerekir. İstemci kitaplığını indirdikten sonra ElementTree paketini de indirip yüklemeniz gerekir.

Blogger hesabı oluşturma

Test amacıyla Blogger hesabına kaydolmanız önerilir. 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, tam çalışan bir örnek istemciyi gdata-python-client/samples/blogger/ dizininin altındaki BloggerExample.py dosyasında bulabilirsiniz.

Örnek istemci, Blogger Veri API'sinin 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 belgedeki ö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ğrulama

Blogger Data API'yi kullanarak hem herkese açık hem de özel feed'lere erişebilirsiniz. Herkese açık feed'ler için kimlik doğrulama gerekmez ancak bunlar salt okunurdur. Blogları değiştirmek istiyorsanız istemcinizin gizli feed'ler istemeden önce kimliğini doğrulaması gerekir. Üç 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 için kimlik doğrulama belgelerine bakın.

Bu dokümanın sonraki bölümlerindeki örneklerin çoğu, kimliği doğrulanmış bir GDataService örneğiniz olduğunu varsaymaktadır.

OAuth kimlik doğrulaması

Python GData kitaplığını kullanarak OAuth kimlik doğrulaması hakkında dokümanlar için lütfen Google Veri Protokolü İstemci Kitaplıklarında OAuth başlıklı makaleyi inceleyin.

AuthSub proxy kimlik doğrulaması

AuthSub proxy kimlik doğrulaması, kullanıcılarının Google Hesaplarında kimliğini 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ına ve şifresine erişemez. Bunun yerine, istemci 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 kez 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şleyicisi tarafından kullanılan sorgu parametrelerine karşılık gelir):

sonraki
Google'ın kimlik doğrulamasından 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/'tir (elbette URL kodlamalıdır).
güvenli
İstemcinin güvenli bir jeton isteyip istemediğini belirtir.
oturum
Döndürülen 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'dır). Bunun sonucunda oluşan istek URL'si şu şekilde 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 sitesine giden bağlantıyı takip eder ve Google Hesabı'nda kimlik doğrulaması yapar.

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, token sorgu parametresinin değeri olarak bu URL'ye bir kimlik doğrulama jetonu ekler. Örneğin:

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

URL'den jeton değerini almak için birkaç yöntem 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 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 iletirsiniz ve AuthSub arayüzü bir oturum jetonu döndürür.

Ardından uygulamanız, Blogger ile sonraki 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 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 yapılan tüm sonraki etkileşimler için kimlik doğrulaması yapılı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. Bunlardan ilki, companyName-applicationName-versionID şeklindeki uygulamamızın adıdır. İkincisi, etkileşim kurmak istediğimiz hizmetin adı, üçüncüsü ise sunucunun adresidir.

account_type değerinin açıkça GOOGLE olarak ayarlandığını unutmayın. 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 için Yüklü Uygulamalar için Kimlik Doğrulama dokümanlarını inceleyin.

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

Not: ClientLogin dokümanlarında açıklandığı gibi, kimlik doğrulama isteği başarısız olabilir ve CAPTCHA istemi istenebilir. Google'ın CAPTCHA sorgusunu gönderip işlemesini istiyorsanız kullanıcıyı https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (ClientLogin dokümanlarında verilen CAPTCHA işleme URL'si yerine) adresine yönlendirin.

Blog listesini alma

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

Aşağıdaki örnek kodda, meta feed'i almak için kimliği doğrulanmış bir GDataService sınıfı örneği kullanılmakta ve ardından her blogun başlığı yazdırılmaktadı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'yi not edin. Bu, varsayılan meta feed URL'sidir. O anda kimliği doğrulanmış kullanıcının bloglarının listesini döndürür. Farklı bir kullanıcının feed'ine erişmek için meta feed URL'sinde default yerine kullanıcının kimliğini girebilirsiniz. Kullanıcının kimliği, kullanıcının profil URL'sinin sonundaki rakamlardan oluşan dizedir.

Aşağıdaki kod snippet'inde, feed'den blog kimliğinin nasıl ayıklanacağı gösterilmektedir. Yayınlar ve yorumlarla ilgili oluşturma, güncelleme ve silme işlemlerini 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 daha sonra kolayca erişilebilmesi için blog kimliği, kurucuda ayarlanır. Bu dokümanda yer alan aşağıdaki örneklerin çoğunda blog_id bir değişken olarak iletilir.

Yayın oluşturma

Blogger Veri API'si, 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 bir yazar ayarlama özelliği şu anda desteklenmiyor. Tüm yeni gönderiler, 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.

Ö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. Yeni bir blog yayını yayınlama örneğini 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!')

Blog yayını taslağı oluşturma

Taslak yayınlar, herkese açık yayınlarla aynı şekilde oluşturulur ancak GDataEntry örneğinde draft uzantı öğesini ayarlamanız gerekir. Vurgulanan satırlar eklenerek yukarıdaki blog yayını 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 blog yayınını alıp taslak özelliğini no olarak ayarlayarak ve ardından yayını güncelleyerek mevcut bir taslak blog yayınını yayınlanmış bir yayına dönüştürebilirsiniz. Yayınları alma ve güncelleme konusunu sonraki iki bölümde ele alacağız.

Yayınları alma

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

Blogger'daki herkese açık bir feed'i kimlik doğrulaması yapmadan sorgulayabilirsiniz. Bu nedenle, herkese açık bir blogdan yayın almadan önce kimlik bilgilerini ayarlamanız veya AuthSub kimlik doğrulaması yapmanız gerekmez.

Tüm blog yayınlarını alma

Kullanıcının yayınlarını almak için blog yayını feed'i URL'sini kullanarak 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 gönderileri alma

Blogger Data API, belirli ölçütlere uyan bir giriş grubu istemenize olanak tanır (ör. belirli bir tarih aralığında yayınlanan veya güncellenen blog yayınlarını isteme). Bunu yapmak 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, gönderileri almak için kullanılan aynı gönderi feed'i URL'si kullanılarak oluşturulduğuna dikkat edin.

Blogger Data API aşağıdaki Query mülklerini 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 etiketlerini içeren 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ı.
published_min, published_max
Giriş yayınlanma tarihlerinin sınırları.
start_index
Alınacak ilk sonucun 1 tabanlı dizini (sayfalama için).
updated_min, updated_max
Giriş güncelleme tarihlerinin sınırları. orderby parametresi updated olarak ayarlanmazsa bu sorgu parametreleri yoksayılır.

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

Yayınları güncelleme

Mevcut bir blog yayınını güncellemek için önce güncellemek istediğiniz girişi alır, ardından girişi değiştirir ve Put yöntemini kullanarak Blogger'a gönderirsiniz. Aşağıdaki kod snippet'i, girişi sunucudan aldığınız varsayılarak bir 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 gönderinin tamamını içeren bir GDataEntry döndürür. Diğer özellikleri güncellemek için Put çağrısını yapmadan önce bunları GDataEntry örneğinde ayarlamanız yeterlidir.

Not: Yayınlarla ilişkili 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 iletin. Örneğin:

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

Yorumlar

Blogger Data API, yorum oluşturmanıza, almanıza ve silmenize olanak tanır. Yorumların güncellenmesi desteklenmez (ve web arayüzünde 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ının sahip olduğu bir bloga yorum gönderebilirsiniz.

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

Yorumları alma

Belirli bir gönderinin yorumlarını, gönderinin 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 

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

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

Yorumları silme

Bir yorumu silmek için yorumun düzenleme URL'sini GDataService nesnenizin 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