Geliştirici Kılavuzu: Java

Ö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ı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üman, Blogger Data API'nin özellikleri hakkında bilgi vermenin yanı sıra Java istemci kitaplığını kullanan temel Data API etkileşimlerine dair örnekler de sunar. Kitaplığın kullandığı temel protokol hakkında daha fazla bilgi edinmek istiyorsanız bu geliştirici kılavuzunun Protokol bölümüne göz atın.

İçindekiler

Kitle

Bu doküman, Blogger ile etkileşime geçebilecek Java 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 Java istemci kitaplığı API referansı bölümüne 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 için Başlangıç Kılavuzu'na bakın.

Java istemci kitaplığı için Java 1.5 gerekir. İstemci kitaplığını indirdikten sonra, java/lib/gdataclient-1.0.jar dosyasında çalışmaya başlamak için ihtiyacınız olan sınıfları 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, Java istemci kitaplığı dağıtımındaki gdata/java/sample/blogger/BloggerClient.java dizininde bulunabilir. Derleme ve yürütme talimatları, aynı dizindeki README.txt dosyasında yer alı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 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ğ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.

Bu dokümanın sonraki bölümlerindeki örneklerin çoğunda, kimliği doğrulanmış bir GoogleService nesnenizin olduğu varsayılır.

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

Kullanıcı, Google'ın sitesine giden bağlantıyı 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. Örneğin:

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ğrılarak AuthSub oturum jetonuyla değiştirilebilir. Aşağıdaki örnekte urlFromAuthSub, AuthSub'un jetonu eklediğ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ı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.

Uygulamanız, oturum jetonunu Blogger ile sonraki etkileşimlerde kullanabilir. Java istemci kitaplığına, oturum jetonunu her istekle otomatik olarak göndermesini söylemek için GoogleService nesnesinin setAuthSubToken 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 bağımsız, tek kullanıcılı "yüklü" bir istemciyse (masaüstü uygulaması gibi) ClientLogin kimlik doğrulamasını kullanın. GoogleService nesnenizin setUserCredentials yöntemini çağırmanız yeterlidir. Böylece, Blogger ile sonraki tüm etkileşimler için kimlik doğrulaması yapılır:

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

Yukarıdaki snippet'te, GoogleService yapıcısına iki parametre iletiyoruz. İlk parametre, etkileşim kurmak istediğimiz hizmetin adıdır. İkinci parametre, companyName-applicationName-versionID biçiminde uygulamamızın adıdır.

Ö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'e gönderin (ClientLogin dokümanlarında verilen CAPTCHA işleme URL'sine değil).

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 kod, meta feed'i almak için kimliği doğrulanmış bir GoogleService nesnesi 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'yi not edin. Bu, varsayılan meta feed URL'sidir. O anda 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 meta feed URL'sinde default yerine kullanıcının kimliğini koyabilirsiniz. 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.

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 Java istemci kitaplığını kullanabilirsiniz.

Öncelikle, 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ı yayınlama örneğini 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 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 Entry nesnesinin draft özelliğini ayarlamanız gerekir. Vurgulanan satırı ekleyerek yukarıdakine benzer bir blog yayınını taslak olarak 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 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 setUserCredentials yöntemini çağırmanız veya AuthSub kimlik doğrulamasını 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:

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 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 Query nesnesi oluşturup GoogleService.getQuery yöntemine iletmeniz gerekir.

Ö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 aynı yayın feed'i URL'si kullanılarak oluşturulduğuna dikkat edin.

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

addCategoryFilter
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 hem Fritz hem de Laurie etiketlerini içeren girişleri döndürür.
setMaxResults
Döndürülecek maksimum giriş sayısını ayarlayın.
setPublishedMin, setPublishedMax
Giriş yayınlanma tarihleri için sınırları ayarlayın.
setStartIndex
Alınacak ilk sonucun 1 tabanlı dizin değerini ayarlayın (sayfalama için).
setUpdatedMin, setUpdatedMax
Giriş güncelleme tarihlerinin sınırlarını ayarlayın. orderby parametresi updated olarak ayarlanmazsa bu sorgu parametreleri yoksayılır.

Not: Şu anda orderby sorgu parametresi için ayarlayıcı yoktur. Ancak bunu ayarlamanız gerekiyorsa Query.addCustomParameter() yöntemini kullanmaya devam edebilirsiniz.

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

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 gönderinin tamamını içeren bir Entry döndürür. Diğer özellikleri güncellemek için update işlevini çağırmadan önce bunları Entry 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 yayının düzenleme URL'sini GoogleService nesnenizdeki delete yöntemine iletin. Ö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, 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 Entry nesnesi oluşturun ve 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 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:

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();
}

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 yorumun düzenleme URL'sini GoogleService nesnenizin 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