Önemli: Bu, sayfanın eski bir sürümüdür. En son sürüm için sol taraftaki gezinme çubuğundaki bağlantıları kullanın.
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 .NET 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şimde bulunabilecek .NET 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.
İstemci kitaplığı tarafından sağlanan sınıflar ve yöntemler hakkında referans bilgileri için .NET istemci kitaplığı API referansı bölümüne bakın. Blogger Data API ile ilgili genel referans bilgileri için Protokol referans kılavuzuna göz atın.
Başlarken
İstemci kitaplığını oluşturma konusunda yardım almak için Başlangıç Kılavuzu'na bakın.
.NET istemci kitaplığını kullanmak için .NET 1.1 çalışma zamanına ihtiyacınız vardır ve ayrıca tüm yamalarda güncel durumda olmanız gerekir. İstemci kitaplığını indirdikten sonra, dağıtımın lib/Release
alt dizininde kullanmaya başlamak için gereken DLL'leri bulabilirsiniz.
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
.NET istemci kitaplığı projesinde, bu belgede gösterilen tüm örnek kodları içeren, eksiksiz çalışan bir örnek istemci mevcuttur. Örnek, SVN deposunun Kaynak sekmesinde /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, blogunuzun blogger 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 belgedeki örnekleri kendi kodunuzda 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 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 iki yaklaşımdan birini kullanarak kimlik doğrulaması yapabilir: 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.
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.
Aşağıdaki ASP köprüsünün sayfanızda tanımlandığını varsayalım:
<asp:HyperLink ID="GotoAuthSubLink" runat="server"/>
Ardından, uygulamanızın AuthSubRequest URL'sini oluşturmak için aşağıdaki gibi 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ş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
öğesinin 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%2FRetrieveToken
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. Bu nedenle, ASP sayfasının Request.QueryString
nesnesinde değişken olarak jetona erişilebilir. Kullanıcı şuna benzer 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ğinden beri, bu jeton aşağıdaki şekilde 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 anahtar (kayıtlı mod için) ile birlikte ilettiğinizde 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.
Böylece uygulamanız, Blogger ile sonraki etkileşimlerinde oturum jetonu değerini kullanabilir. .NET istemci kitaplığına, her istekle birlikte Yetkilendirme başlığını (oturum jetonunu içerir) otomatik olarak göndermesini bildirmek 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 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. 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 iletiriz. İlk parametre, etkileşim kurmak istediğimiz hizmetin adıdır. İkinci parametre, uygulamamızın companyName-applicationName-versionID biçimindeki adıdır. Ayrıca, G Suite kullanıcılarına düzgün bir kimlik doğrulama seçeneği sunmak için Service.RequestFactory
parametresi yalnızca GOOGLE
hesap türü kullanılacak şekilde ayarlanmıştır.
Ö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 Service
nesnesi 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ö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.
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.
Aşağıdaki örneklerin tümü, kimliği doğrulanmış bir Service
nesneniz olduğunu varsayar.
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 .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. Aşağıda yeni bir blog yayınının nasıl
yayınlanacağına ilişkin bir örnek verilmiştir:
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ığı şekilde 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 öğeleri 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 edinmek için Google Data API protokolü referans belgesine göz atı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 false 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, yayınların alınmasını ve güncellenmesini 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 meta feed'ini alırken kullanılan getFeed
yöntemini çağırın, ancak bu sefer blog-yayını feed 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, 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 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'in türü (ör.
atom
(varsayılan) veyarss
). - /category
- Feed sonuçlarını filtrelemek için kategorileri (etiket olarak da bilinir) belirtin. Örneğin,
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
, hemFritz
hem deLaurie
etiketlerine sahip girişleri döndürür. - max-results
- Döndürülecek maksimum giriş sayısı.
- sıralama ölçütü
- Girişlerin döndürüleceği sıra; örneğin
lastmodified
(varsayılan),starttime
veyaupdated
. - yayınlanan-minimum, yayınlanmış-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
parametresiupdated
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ırsınız, ardından bu girişi değiştirirsiniz ve ardından girişin Update()
yöntemini kullanarak bu girişi 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.
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()
işlevini çağırmadan önce bunları AtomEntry
nesnesinde 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 mevcut bir AtomEntry
nesnesinde Delete
yöntemini şu şekilde çağırın:
static void DeleteEntry(AtomEntry toDelete) { // Delete the edited entry if (toDelete != null) { toDelete.Delete(); } }
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 AtomEntry
nesnesi oluşturun ve 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ı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:
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); } } }
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 mevcut bir yorum AtomEntry
nesnesinde aşağıdaki gibi Delete()
yöntemini çağırın:
static void DeleteComment(AtomEntry commentEntry) { if (commentEntry != null) { // Delete the comment. commentEntry.Delete(); } }