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 .NET istemci kitaplığı kullanılarak gerçekleştirilen temel Data API etkileşimlerine dair örnekler de 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 .NET 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.
İstemci kitaplığı tarafından sağlanan sınıflar ve yöntemler hakkında referans bilgiler için .NET istemci kitaplığı API referansına bakın. 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.
.NET istemci kitaplığını kullanmak için .NET 1.1 çalışma zamanı gerekir ve tüm yamalarda da güncel olmanız gerekir. İstemci kitaplığını indirdikten sonra, kullanmaya başlamanız gereken DLL'leri dağıtımın lib/Release
alt dizininde bulabilirsiniz.
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 belgede gösterilen tüm örnek kodu içeren, tam olarak çalışan bir örnek istemci .NET istemci kitaplığı projesinde mevcuttur. Örnek, SVN deposunun Kaynak sekmesindeki /trunk/clients/cs/samples/blogger/ConsoleSample.cs konumunda bulunur.
Bu örneği derleyip çalıştırmadan önce username
, password
, blogName
ve postId
değerlerini uygun değerlerle güncelleyin. username
ve password
değerleri, Blogger'a giriş yapmak için kullanılan kimlik bilgilerini temsil eder. blogName
değeri, blog'unuzun blogspot URL'sinin başlangıcıdır.
Örnek istemci, Blogger Data API'nin kullanımını göstermek için sağlanan blogda çeşitli işlemler gerçekleştirir.
Bu dokümandaki örnekleri kendi kodunuzla derlemek için aşağıdaki using
ifadelerine ihtiyacınız vardır:
using Google.GData.Client; using System.Net; using System.Xml; using System.Text.RegularExpressions;
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. İki yaklaşımdan birini kullanarak kimlik doğrulaması yapabilir: 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.
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.
Sayfanızda aşağıdaki ASP köprüsü tanımlanmıştır:
<asp:HyperLink ID="GotoAuthSubLink" runat="server"/>
Ardından, uygulamanızın AuthSubRequest URL'sini oluşturmak için aşağıdaki şekilde bir .NET istemci kitaplığı çağrısı yapın:
GotoAuthSubLink.Text = "Login to your Google Account"; GotoAuthSubLink.NavigateUrl = AuthSubUtil.getRequestUrl("http://www.example.com/RetrieveToken", "http://www.blogger.com/feeds/", false, true);
getRequestUrl
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%2FRetrieveToken
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. Bu nedenle, jetona ASP sayfası Request.QueryString
nesnesinde değişken olarak erişilebilir. Kullanıcı şunun gibi bir URL'ye yönlendirilir:
http://www.example.com/RetrieveToken?token=yourAuthToken
Bu jeton değeri, tek kullanımlık bir AuthSub jetonunu temsil eder. Bu örnekte, session = true
belirtildiği için bu jeton aşağıdaki gibi bir AuthSub oturum jetonuyla değiştirilebilir:
SessionsessionToken = AuthSubUtil.exchangeForSessionToken(Request.QueryStringtoken, null);
Yani, tek kullanımlık jetonunuzu exchangeForSessionToken
yöntemine, null
(kayıtsız mod için) veya özel anahtara (kayıtlı mod için) geçirirsiniz ve AuthSub arayüzü bir oturum jetonu döndürür. Kayıtlı uygulamalar ve özel anahtarlar hakkında daha fazla bilgi için AuthSub belgelerinin "İmzalama istekleri" bölümüne bakın.
Uygulamanız, daha sonra Blogger ile yapılan etkileşimlerde oturum jetonu değerini kullanabilir. .NET istemci kitaplığının her istekte Yetkilendirme başlığını (oturum jetonunu içeren) otomatik olarak göndermesini belirtmek için aşağıdakileri yapın:
GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("blogger", "BloggerSampleApp"); authFactory.Token = SessionsessionToken.ToString(); Service service = new Service(authFactory.ApplicationName); service.RequestFactory = authFactory;
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. Hizmet nesnenizin kimlik bilgilerini aşağıdaki gibi ayarlayın:
Service service = new Service("blogger", "exampleCo-exampleApp-1"); service.Credentials = new GDataCredentials("user@example.com", "secretPassword"); GDataGAuthRequestFactory factory = (GDataGAuthRequestFactory) service.RequestFactory; factory.AccountType = "GOOGLE";
Yukarıdaki snippet'te, Service
oluşturucuya iki parametre iletiyoruz. İlk parametre, etkileşimde bulunmak istediğimiz
hizmetin adıdır. İkinci parametre, uygulamamızın companyName-applicationName-versionID biçimindeki adıdır. G Suite kullanıcıları için doğru kimlik doğrulaması sağlamak amacıyla Service.RequestFactory
öğesini yalnızca GOOGLE
hesap türü kullanacak şekilde de ayarladık.
Ö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ış Service
nesnesini kullanır ve ardından her blogun başlığını yazdırır.
query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs"); AtomFeed feed = null; try { feed = service.Query(query); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine("Blog Title: " + entry.Title.Text); } }
getFeed
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.
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.
Aşağıdaki örneklerin tümü, kimliği doğrulanmış Service
nesnesine sahip olduğunuzu varsayar.
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şlerini yayınlamak için .NET istemci kitaplığını kullanabilirsiniz.
İlk olarak, blog yayınını temsil edecek bir AtomEntry
nesnesi 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 Service
nesnesini kullanın. Yeni bir blog yayınının nasıl
yayınlanacağına dair bir örneği aşağıda bulabilirsiniz:
AtomEntry newPost = new AtomEntry(); newPost.Title.Text = "Marriage!"; newPost.Content = new AtomContent(); newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" + "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" + "<p>He is the last man on earth I would ever desire to marry.</p>" + "<p>Whatever shall I do?</p>" + "</div>"; newPost.Content.Type = "xhtml"; Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);
Insert
yöntemi, hizmetin yayın URL'sini parametre olarak alır.
Ardından yöntem, girişi Blogger tarafından depolandığı haliyle döndürür. Döndürülen giriş, gönderdiğiniz girişle aynıdır ancak Blogger tarafından eklenen yayın kimliği gibi çeşitli öğeler de içerir.
İsteğiniz herhangi bir nedenle başarısız olursa Blogger farklı bir durum kodu döndürebilir. Durum kodları hakkında bilgi için Google Data API protokolü başvuru dokümanına bakın.
Taslak blog yayını oluşturma
Taslak yayınlar, herkese açık yayınlarla aynı şekilde oluşturulur ancak AtomEntry
nesnesinin draft
özelliğini ayarlamanız gerekir. Yukarıdaki blog yayını, vurgulanan satır eklenerek taslak olarak oluşturulabilir:
AtomEntry newPost = new AtomEntry(); newPost.Title.Text = "Marriage!"; newPost.Content = new AtomContent(); newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" + "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" + "<p>He is the last man on earth I would ever desire to marry.</p>" + "<p>Whatever shall I do?</p>" + "</div>"; newPost.Content.Type = "xhtml"; newPost.IsDraft = true; Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);
Taslak yayını alıp taslak özelliğini yanlış 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 meta verisini almak amacıyla kullanılan getFeed
yöntemini kullanın ancak bu kez blog yayını feed'i URL'sini gönderin:
query.Uri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); feed = service.Query(query); Console.WriteLine(feed.Title.Text); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine("Entry Title: " + entry.Title.Text); }
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 FeedQuery
nesnesi oluşturur ve bunu Service.Query()
yöntemine geçirirsiniz.
Örneğin, tarih aralığı sorgusu göndermek için FeedQuery
nesnesinin MinPublication
ve MaxPublication
üyelerini 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ı yazdırır:
FeedQuery query = new FeedQuery(); query.Uri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); query.MinPublication = new DateTime(2006, 1, 1); query.MaxPublication = new DateTime(2007, 4, 12); AtomFeed feed = service.Query(query); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine(" Entry Title: " + entry.Title.Text); }
FeedQuery
nesnesinin, yayınları almak için kullanılan yayın feed'i URL'si kullanılarak oluşturulduğuna dikkat edin.
Blogger Data API aşağıdaki sorgu parametrelerini destekler:
- alt
- Döndürülecek feed türü (ör.
atom
(varsayılan) veyarss
). - /category
- Feed sonuçlarını filtrelemek için kategorileri (etiketler olarak da bilinir) belirtin. Örneğin,
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
hemFritz
hem deLaurie
etiketine sahip girişleri döndürür. - maks. sonuç
- Döndürülecek maksimum giriş sayısı.
- CANNOT TRANSLATE
- Girişlerin döndürüleceği sıralama (ör.
lastmodified
(varsayılan),starttime
veyaupdated
). - yayınlanan-min, yayınlanan-maksimum
- Giriş yayın tarihleriyle ilgili sınırlar.
- başlangıç dizini
- Alınan ilk sonucun 1 tabanlı dizini (sayfalara ayırma için).
- güncellenmiş-min, güncellenmiş-maksimum
- Giriş güncelleme tarihleriyle ilgili sınırlar.
orderby
parametresiupdated
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 giriş Update()
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.
static AtomEntry EditEntry(AtomEntry toEdit) { // Edit the entry by changing the Title and calling Update(). if (toEdit != null) { toEdit.Title.Text = "Marriage Woes!"; toEdit = toEdit.Update(); } return toEdit; }
Yukarıdaki kod yeni güncellenen yayının tamamını içeren bir AtomEntry
döndürür. Diğer özellikleri güncellemek için Update()
çağrısı yapmadan önce söz konusu mülkleri AtomEntry
nesnesinde ayarlamanız yeterlidir.
Not: Yayınlarla ilgili yazar verilerinin değiştirilmesi şu anda desteklenmemektedir.
Yayınları silme
Bir yayını silmek için Delete
yöntemini mevcut bir AtomEntry
nesnesinde çağırın. Örneğin:
static void DeleteEntry(AtomEntry toDelete) { // Delete the edited entry if (toDelete != null) { toDelete.Delete(); } }
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 bir AtomEntry
nesnesi oluşturun ve bu nesneyi aşağıdaki gibi ekleyin:
AtomEntry comment; comment = new AtomEntry(); comment.Title.Text = "This is my first comment"; comment.Content.Content = "This is my first comment"; Uri commentPostUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/" + entryId + "/comments/default"); postedComment = service.Insert(commentPostUri, comment);
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ı, yorumların yorum feed'i URL'sinden alabilirsiniz:
static void ListEntryComments(Service service, Uri commentUri) { if (commentUri != null) { // Retrieve all comments on a blog entry FeedQuery query = new FeedQuery(); query.Uri = commentUri; AtomFeed feed = service.Query(query); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine(" Comment Title: " + entry.Title.Text); } } }
Blog'un yorum feed'ini kullanarak tüm yayınlardan yorumları da alabilirsiniz URL:
http://www.blogger.com/feeds/blogID/comments/default
Yorumları silme
Bir yorumu silmek için mevcut bir yorum AtomEntry
nesnesinde Delete()
yöntemini şu şekilde çağırın:
static void DeleteComment(AtomEntry commentEntry) { if (commentEntry != null) { // Delete the comment. commentEntry.Delete(); } }