Geliştirici Kılavuzu: .NET

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) veya rss).
/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 hem Fritz hem de Laurie 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 veya updated).
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 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 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();
  }
}

Başa dön