Geliştirici Kılavuzu: Java

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 Java istemci kitaplığı kullanılarak gerçekleştirilen temel Data API etkileşimlerine dair örnekler 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 Java 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 Java 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.

Java istemci kitaplığı için Java 1.5 gerekir. İstemci kitaplığını indirdikten sonra, başlamak için ihtiyaç duyduğunuz sınıfları java/lib/gdataclient-1.0.jar dosyasında 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 dokümanda gösterilen tüm örnek kodu içeren tam çalışan örnek istemci, Java dizininin dağıtım bölümünde gdata/java/sample/blogger/BloggerClient.java dizininin altında bulunabilir. Derleme ve yürütme talimatları aynı dosyada README.txt dosyasına eklenir.

Ö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 import ifadelerine ihtiyacınız vardır:

import com.google.gdata.client.*;
import com.google.gdata.data.*;
import com.google.gdata.util.*;
import java.io.IOException;
import java.net.URL;

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. Şu üç yaklaşımdan birini kullanarak kimlik doğrulaması yapabilir: OAuth kimlik doğrulaması, 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.

Bu dokümanın sonraki bölümlerinde verilen örneklerin çoğu, kimliği doğrulanmış bir GoogleService nesnesine sahip olduğunuzu varsayar.

OAuth kimlik doğrulaması

Java GData kitaplığını kullanarak OAuth kimlik doğrulaması hakkında bilgi için lütfen Google Veri Protokolü İstemci Kitaplıklarındaki OAuth bölümüne bakın.

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. Java istemci kitaplığı, Google sayfasının URL'sini oluşturmak için bir işlev sağlar. Aşağıdaki kod, AuthSubRequest sayfasının URL'sini alır:

String next = "http://www.example.com/welcome.html";
String scope = "http://www.blogger.com/feeds/";
boolean secure = false;
boolean session = true;
String authSubLogin = AuthSubUtil.getRequestUrl(next, scope, secure, session);

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%2Fwelcome.html

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. Örnek:

http://www.example.com/welcome.html?token=yourAuthToken

Bu jeton değeri, tek kullanımlık bir AuthSub jetonunu temsil eder. Bu örnekte, session = true belirtildiğinden bu jeton, AuthSubSessionToken hizmeti aşağıdaki gibi çağrılarak bir AuthSub oturum jetonuyla değiştirilebilir: Burada urlFromAuthSub, AuthSub'ın eklendiği URL'dir:

String token = AuthSubUtil.getTokenFromReply(urlFromAuthSub);
String sessionToken = AuthSubUtil.exchangeForSessionToken(token, 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.

Ardından uygulamanız, Blogger ile olan sonraki etkileşimlerde oturum jetonunu kullanabilir. Java istemci kitaplığına, isteğin her bir istekle birlikte oturum jetonunu otomatik olarak göndermesini belirtmek için GoogleService object'ssetAuthSubToken yöntemini çağırın:

GoogleService.setAuthSubToken(sessionToken, null);

Ardından istemci kitaplığı jetonu, her istekle birlikte otomatik olarak gönderir.

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. GoogleService nesnenizde setUserCredentials yöntemini çağırmanız yeterlidir. Blogger ile olan tüm etkileşimlerin kimliği doğrulanır:

GoogleService myService = new GoogleService("blogger", "exampleCo-exampleApp-1");
myService.setUserCredentials("user@example.com", "secretPassword");

Yukarıdaki snippet'te, GoogleService oluşturucuya iki parametre iletiyoruz. İlk parametre, etkileşimde bulunmak istediğimiz hizmetin adıdır. İkinci parametre, companyName-applicationName-versionID biçimindeki uygulamamızın adıdır.

Ö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ış GoogleService nesnesini kullanır ve ardından her blogun başlığını yazdırır.

public static void printUserBlogs(GoogleService myService)
    throws ServiceException, IOException {

  // Request the feed
  final URL feedUrl = new URL("http://www.blogger.com/feeds/default/blogs");
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
  }
}

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.

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şleri yayınlamak için Java istemci kitaplığını kullanabilirsiniz.

İlk olarak, blog yayınını temsil edecek bir Entry 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 GoogleService nesnesini kullanın. Yeni bir blog yayınının nasıl yayınlanacağına dair bir örneği aşağıda bulabilirsiniz:

public static Entry createPost(
    GoogleService myService, String blogID, String title,
    String content, String userName)
    throws ServiceException, IOException {
  // Create the entry to insert
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));

  // Ask the service to insert the new entry
  URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  return myService.insert(postUrl, myEntry);
}

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 Entry nesnesinin draft özelliğini ayarlamanız gerekir. Vurgulanan satırı ekleyerek taslak olarak yukarıdakine benzer bir blog yayını oluşturabilirsiniz:

public static Entry createPost(GoogleService myService, String blogId,
    String title, String content, String userName,
    Boolean isDraft)
    throws ServiceException, IOException {
  // Create the entry to insert
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));
  myEntry.setDraft(isDraft);

  // Ask the service to insert the new entry
  URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  return myService.insert(postUrl, myEntry);
}

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. Dolayısıyla herkese açık bir blogdan yayın almadan önce setUserCredentials yöntemini çağırmanı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:

public static void printAllPosts(
    GoogleService myService, String blogId)
    throws ServiceException, IOException {
  // Request the feed
  URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
  }
  System.out.println();
}

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 Query nesnesi oluşturur ve bunu GoogleService.getQuery yöntemine geçirirsiniz.

Örneğin, tarih aralığı sorgusu göndermek için Query nesnesinin setPublishedMin ve setPublishedMax yöntemlerini kullanı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:

public static void printDateRangeQueryResults(
    GoogleService myService, String blogId,
    DateTime startTime, DateTime endTime)
    throws ServiceException, IOException {
  // Create query and submit a request
  URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  Query myQuery = new Query(feedUrl);
  myQuery.setPublishedMin(startTime);
  myQuery.setPublishedMax(endTime);
  Feed resultFeed = myService.query(myQuery, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText() +
      " posts between " + startTime + " and " + endTime);
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
    System.out.println("\t" + entry.getUpdated().toStringRfc822());
  }
  System.out.println();
}

Query nesnesinin, yayınları almak için kullanılan yayın feed'i URL'si kullanılarak oluşturulduğuna dikkat edin.

Blogger Data API'sı aşağıdaki Query yöntemlerini destekler:

KategoriKategoriFiltresi ekle
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.
setMaxResults
Döndürülecek maksimum giriş sayısını belirleyin.
setYayınlananMin, setPublishMax
Giriş yayın tarihleri için sınırları belirleyin.
setStartIndex
Alınan ilk sonucun 1 tabanlı dizinini (sayfalara ayırma için) ayarlayın.
setUpdatedMin, setUpdatedMax
Giriş güncelleme tarihleri için sınırları ayarlayın. orderby parametresi updated olarak ayarlanmadığı sürece bu sorgu parametreleri yoksayılır.

Not: Şu anda orderby sorgu parametresi için ayarlanmış bir parametre yoktur. Ancak bunu ayarlamanız gerekirse Query.addCustomParameter() yöntemini kullanabilirsiniz.

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 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.

public static Entry updatePostTitle(
    GoogleService myService, Entry entryToUpdate, String newTitle)
    throws ServiceException, IOException {
  entryToUpdate.setTitle(new PlainTextConstruct(newTitle));
  URL editUrl = new URL(entryToUpdate.getEditLink().getHref());
  return myService.update(editUrl, entryToUpdate);
}

Yukarıdaki kod yeni güncellenen yayının tamamını içeren bir Entry döndürür. Diğer özellikleri güncellemek için update çağrısı yapmadan önce söz konusu mülkleri Entry 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 yayının düzenleme URL'sini GoogleService nesnenizdeki delete yöntemine aktarın. Örneğin:

public static void deletePost(
    GoogleService myService, String editLinkHref)
    throws ServiceException, IOException {
  URL deleteUrl = new URL(editLinkHref);
  myService.delete(deleteUrl);
}

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 Entry nesnesi oluşturun ve bu nesneyi aşağıdaki gibi ekleyin:

public static Entry createComment(
    GoogleService myService, String blogID, String postId,
    String commentText)
    throws ServiceException, IOException {
  // Build the comment feed URI
  String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
  URL feedUrl = new URL(commentsFeedUri);

  // Create a new entry for the comment and submit it to the GoogleService
  Entry myEntry = new Entry();
  myEntry.setContent(new PlainTextConstruct(commentText));
  return myService.insert(feedUrl, myEntry);
}

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ı, yorum feed'i URL'sinden alabilirsiniz:

public static void printAllComments(
    GoogleService myService, String blogID, String postId)
    throws ServiceException, IOException {
  // Build comment feed URI and request comments on the specified post
  String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
  URL feedUrl = new URL(commentsFeedUri);
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Display the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" +
        ((TextContent) entry.getContent()).getContent().getPlainText());
    System.out.println("\t" + entry.getUpdated().toStringRfc822());
  }
  System.out.println();
}

Blog'un yorum feed'i URL'sini kullanarak da tüm yayınlarınızın yorumlarını öğrenebilirsiniz:

http://www.blogger.com/feeds/blogID/comments/default

Yorumları silme

Bir yorumu silmek için yorumun düzenleme URL'sini GoogleService nesnenizdeki delete yöntemine şu şekilde iletin:

public static void deleteComment(GoogleService myService, String editLinkHref)
    throws ServiceException, IOException {
  URL deleteUrl = new URL(editLinkHref);
  myService.delete(deleteUrl);
}

Başa dön