Önemli: Google Data API 2.0 sürümüne yönelik desteği 30 Eylül 2024'te sonlandıracağız. İşlevselliğin etkinlenmemesi için Google Veri API'sinin 2.0 sürümünü kullanan uygulamalarınızı en son API sürümüne güncelleyin. En son sürüm için sol taraftaki gezinme çubuğundaki bağlantıları kullanın. Not: Bazı GET istekleri (ör. giriş gönderileri) feed URL'leri olarak desteklenmeye devam edecek olsa da bu istekler arasındaki davranış farklılıkları vardır. Ayrıntılı bilgi için Blogger Yardımı dokümanlarını inceleyin.
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ümanda, Blogger Data API'sinin özellikleri hakkında bilgi vermenin yanı sıra .NET istemci kitaplığını kullanan temel Data API etkileşimlerine dair örnekler de sunulmaktadır. 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 doküman, Blogger ile etkileşime geçebilecek .NET 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.
İstemci kitaplığı tarafından sağlanan sınıflar ve yöntemler hakkında referans bilgiler 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 bakın.
Başlarken
İstemci kitaplığını ayarlama konusunda yardım 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 tüm yamaları yüklemiş olmanız gerekir. İstemci kitaplığını indirdikten sonra, dağıtımın lib/Release
alt dizininde çalışmaya başlamak için ihtiyacınız olan DLL'leri bulabilirsiniz.
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 olarak çalışan bir örnek istemci, .NET istemci kitaplığı projesinde mevcuttur. Örnek, SVN deposunun Kaynak sekmesinde /trunk/clients/cs/samples/blogger/ConsoleSample.cs adresinde 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 blogspot URL'sinin başlangıcıdır.
Örnek istemci, Blogger Veri API'sinin 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 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. İki 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 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.
Sayfanızda aşağıdaki ASP köprüsünün tanımlandığını varsayalım:
<asp:HyperLink ID="GotoAuthSubLink" runat="server"/>
Ardından, uygulamanız için AuthSubRequest URL'sini oluşturmak üzere 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ğ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%2FRetrieveToken
Kullanıcı, Google'ın sitesinin bağlantısını 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. Bu nedenle jeton, ASP sayfasının Request.QueryString
nesnesinde değişken olarak erişilebilir. Kullanıcı şuna benzeyen 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ıtlı olmayan mod için) veya özel bir anahtarla (kayıtlı mod için) birlikte iletirsiniz 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 dokümanlarının "İstekleri imzalama" bölümüne bakın.
Ardından uygulamanız, Blogger ile sonraki etkileşimlerde oturum jetonu değerini kullanabilir. .NET istemci kitaplığına, her istekle birlikte Yetkilendirme üstbilgisini (oturum jetonunu içeren) otomatik olarak göndermesini söylemek 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 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
sınıfının yapıcısına iki parametre iletiyoruz. İ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 Service.RequestFactory
'ı, G Suite kullanıcılarının kimliğini doğrulamasına izin vermek için yalnızca GOOGLE
hesap türü kullanacak şekilde ayarladık.
Ö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 Service
nesnesi kullanılır ve ardından her blogun başlığı yazdırılı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'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.
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.
Aşağıdaki örneklerin tümü, kimliği doğrulanmış bir Service
nesnenizin olduğu varsayılı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 .NET istemci kitaplığını kullanabilirsiniz.
Öncelikle, 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ı nasıl yayınlayacağınıza dair bir örnek aşağıda 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 gönderi 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 çeşitli öğeleri (ör. yayın kimliği) 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 bakın.
Blog yayını taslağı 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ı, vurgulanmış 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 blog yayınını alarak, 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, 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'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 meta feed'ini almak için kullanılan getFeed
yöntemini çağırı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 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 FeedQuery
nesnesi oluşturup Service.Query()
yöntemine iletmeniz gerekir.
Ö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 aynı yayın feed'i URL'si kullanılarak oluşturulduğuna dikkat edin.
Blogger Veri API'si 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 (etiket olarak da bilinir) belirtin. Örneğin,
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
hemFritz
hem deLaurie
etiketlerini içeren girişleri döndürür. - max-results
- Döndürülecek maksimum giriş sayısı.
- orderby
- Girişlerin döndürüleceği sıra (ör.
lastmodified
(varsayılan),starttime
veyaupdated
). - 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
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ü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 girişin Update()
yöntemini kullanarak Blogger'a gönderirsiniz. Aşağıdaki kod snippet'i, girişi sunucudan zaten aldığınız varsayılarak bir 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 gönderinin 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 ayarlayın.
Not: Yayınlarla ilişkili yazar verilerinin değiştirilmesi şu anda desteklenmemektedir.
Yayınları silme
Bir yayını silmek için mevcut bir AtomEntry
nesnesinde Delete
yöntemini çağırın. Örneğin:
static void DeleteEntry(AtomEntry toDelete) { // Delete the edited entry if (toDelete != null) { toDelete.Delete(); } }
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 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ı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önderiye ait yorumları, gönderinin 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); } } }
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 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(); } }