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. Temel alınan güvenlik ihlalinin neden protokolü için Protokol bölümüne bakın. inceleyebilirsiniz.
İç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.
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 için bkz. Başlangıç Kılavuzu.
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 Blogger hesabına kaydolmanız önerilir. Blogger Google Hesaplarını kullanır. Bu nedenle 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 istemci, gdata-python-client/samples/blogger/
dizininde bulunan BloggerExample.py
dosyasında mevcuttur.
Ö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 dokümandaki örnekleri kendi kodunuzda kullanmak için
şu import
ifadeleri:
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 dokümanlarına göz atı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ındaki dokümanlar için lütfen OAuth'taki Google Veri Protokolü İstemci Kitaplıkları.
AuthSub proxy kimlik doğrulaması
AuthSub proxy kimlik doğrulaması, kullanıcılarının Google Hesaplarıyla kimlik doğrulaması yapması gereken web uygulamaları tarafından kullanılır. Web sitesi operatörü ve istemci kodun Blogger kullanıcısının kullanıcı adı ve şifresine erişimi yok; Bunun yerine müşteri, müşterinin işlem yapmasını sağlayan özel AuthSub jetonları alır ekleyebilirsiniz. Daha ayrıntılı bilgi için AuthSub belgelerine bakın.
Bir kullanıcı uygulamanızı ilk ziyaret ettiğinde henüz kimlik doğrulaması yapılmış. 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'in URL'sini alır sayfa:
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/
şeklindedir (tabii ki URL olarak kodlanmış). - güvenli
- İstemcinin güvenli bir jeton isteyip istemediğini belirtir.
- oturum
- Döndürülen jetonun, çok kullanımlık (oturum) jetonuyla değiştirilip değiştirilemeyeceğini gösterir.
Yukarıdaki örnekte, güvenli jeton istemeyen bir çağrı gösterilmektedir (secure
değeri False
). Bu işlem sonucunda 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, 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öntemini kullanır ve AuthSub arayüzü,
oturum jetonudur.
Uygulamanız, daha sonra ve Blogger ile etkileşimleriniz olsun. İstemci kitaplığı jetonu otomatik olarak gönderir bu verileri takip edebilirsiniz.
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. Sadece
GDataService
cihazınızda ProgrammaticLogin()
yöntemi
ve bundan sonra Blogger ile olan tüm etkileşimler
kimlik doğrulaması yapılmış:
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. İlki, 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'si.
ClientLogin kimlik doğrulaması hakkında daha fazla bilgi edinin. görmek istiyorsanız Yüklenenler İçin Kimlik Doğrulama Uygulamalar belgeleri.
Not: Şuradaki tüm istekler için aynı jetonu kullan: belirli bir süre boyunca yeni bir jeton almazsınız.
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 testini düzenlemesini ve bu soruyu yanıtlamasını istiyorsanız
kullanıcıyı
https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
.
(ClientLogin içerisinde verilen CAPTCHA işleme URL'si yerine)
belgeleri).
Blog listesi alınıyor
Blogger Data API'sı, belirli bir blog'a ait blog'ları listeleyen yayın sağlar. user; "metafeed" 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önteminin kullandığı 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ıya ait feed'e erişmek için meta feed URL'sinde default
yerine kullanıcının kimliğini girebilirsiniz. Kullanıcı kimliği rakam dizesidir
bulunur.
Aşağıdaki kod snippet'inde, feed'den blog kimliğinin nasıl ayıklanacağı gösterilmektedir. Oluşturma, güncelleme ve silme işlemlerini gerçekleştirmek için blog kimliğine ihtiyacınız vardır işlemler hakkında bilgi edindiniz. Aşağıdaki snippet ilk blogu seçer bir kullanıcı için alındı.
blog_id = feed.entry[0].GetSelfLink().href.split("/")[-1]
BloggerExample.py
örneğinde BloggerExample
sınıfı oluşturulur ve blog kimliği kolay erişim için oluşturucuda ayarlanır
daha sonra yapalım. Bu belgede yer alan aşağıdaki örneklerin çoğunda
blog_id
değişken olarak geçirilir.
Yayın oluşturma
Blogger Data API, aşağıdaki gibi yeni blog girişleri oluşturmanıza ve yayınlamanıza olanak tanır: aynı zamanda giriş taslaklarını da oluşturabilirsiniz.
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. İşte
yeni bir blog yayınının nasıl yayınlanacağına ilişkin örnek:
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ı taslak olarak
vurgulanan satırlar:
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. Sonraki iki bölümde, gönderileri alma ve güncelleme konularını 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 genel özet akışını kimlik doğrulaması olmadan sorgulayabilirsiniz. Bu nedenle, almadan önce kimlik bilgisi ayarlamanız veya AuthSub kimlik doğrulaması yapmanız gerekmez. herkese açık bir blogdan yayın paylaşabilirsiniz.
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). Bunun için bir Query
örneği oluşturup ardından
Get()
yöntemini çağırın.
Ö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 her blog yayınının başlığını ve içeriğini yazdırır.
belirtilen başlangıç zamanı ve bitiş zamanı arasında yayınlanı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 aynı gönderi kullanılarak oluşturulduğuna dikkat edin
yayınları almak için kullanılan özet akışı URL'si.
Blogger Data API, şu Query
API'lerini destekler:
özellikler:
- 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
, hemFritz
hem deLaurie
etiketlerine sahip girişleri döndürür. Python istemci kitaplığında bu kategori sorgusunu belirtmek içinquery.categories = ['Fritz','Laurie',]
kullanabilirsiniz.
- max_results
- Döndürülecek maksimum giriş sayısı.
- published_min, published_max
- 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
orderby
parametresiupdated
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üncelleniyor
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,GDataEntry
yeni güncellenmiş bir yayın oluşturun. 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 siliniyor
Bir yayını silmek için yayının düzenleme URL'sini Delete
yöntemine iletin.
GDataService
nesnenizde şunun gibi:
def DeletePost(blogger_service, edit_link_href): blogger_service.Delete(edit_link_href)
Yorumlar
Blogger Data API, yorum oluşturulmasına, alınmasına ve silinmesine olanak tanır. Yorumların güncellenmesi desteklenmez (bu özellik web'de de kullanılamaz) arayüz).
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 an için yalnızca yorum yayınlayabilirsiniz. kimliği doğrulanmış kullanıcıya ait bir blog olabilir.
Not: Yorumlar için özel bir yazar ayarlamak şu anda desteklenmiyor. 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
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 Delete
cihazına iletin
yöntemini GDataService
nesnenizde şu şekilde kullanın:
def DeleteComment(blogger_service, post_id, comment_id): feed_url = '/feeds/' + post_id + '/comments/default/' + comment_id blogger_service.Delete(feed_url)