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 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 Java 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 Java istemci uygulamaları yazmak isteyen programcılara yöneliktir.

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 Java istemci kitaplığı API referansı'nı inceleyin. 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.

Java istemci kitaplığı için Java 1.5 gerekir. İstemci kitaplığını indirdikten sonra, başlamak için ihtiyacınız olan 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. 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, eksiksiz çalışan bir örnek istemci, Java istemci kitaplığı dağıtımında, gdata/java/sample/blogger/BloggerClient.java dizini altında bulunmaktadır. Derleme ve yürütme talimatları aynı dizinde, README.txt dosyasında bulunur.

Ö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 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 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 edinmek için kimlik doğrulama belgelerine bakın.

Bu belgenin sonraki bölümlerindeki örneklerin çoğu, kimliği doğrulanmış bir GoogleService nesneniz olduğunu varsayar.

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. Java istemci kitaplığı, Google sayfasının URL'sini oluşturacak 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ğ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 değerinin 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%2Fwelcome.html

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. Ö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 yana, AuthSubSessionToken hizmetini çağırarak bu jeton bir AuthSub oturum jetonuyla değiştirilebilir. Burada, urlFromAuthSub, AuthSub'ın 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ı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 jetonunu kullanabilir. Java istemci kitaplığına her istekte oturum jetonunu otomatik olarak göndermesini bildirmek 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 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 nesnenizde setUserCredentials yöntemini çağırmanız yeterlidir. Ardından Blogger ile olan sonraki 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 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.

Ö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 GoogleService nesnesi kullanır ve ardından her bir 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ö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.

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 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, gönderiyi eklemek için GoogleService nesnesini kullanın. Yeni bir blog yayınının nasıl yayınlanacağına ilişkin 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ığı ş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 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 yukarıdaki gibi bir blog yayı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 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 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 feed'ini alırken kullanılan getFeed yöntemini çağırın, ancak bu sefer blog-yayını feed 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, 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 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 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 etiketlerine sahip girişleri döndürür.
setMaxResults
Döndürülecek maksimum giriş sayısını ayarlayın.
setPublishedMin, setPublishedMax
Girişlerin yayınlanma tarihleriyle ilgili sınırları belirleyin.
setStartIndex
Alınacak ilk sonucun 1 tabanlı dizinini ayarlayın (sayfalama için).
setUpdatedMin, setUpdatedMax
Giriş güncelleme tarihlerinin sınırlarını belirleyin. Bu sorgu parametreleri, orderby parametresi updated olarak ayarlanmadığı sürece yoksayılır.

Not: Şu anda orderby sorgu parametresi için belirleyici yok. Ancak bunu ayarlamanız gerekiyorsa Query.addCustomParameter() yöntemini kullanabilirsiniz.

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ır, ardından bu girişi değiştirirsiniz ve update yöntemini kullanarak 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.

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 işlevini çağırmadan önce bunları Entry 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 yayının düzenleme URL'sini GoogleService nesnenizde şu şekilde delete yöntemine iletin:

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

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 Entry nesnesi oluşturun ve bunu 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ı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 özet akışı 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();
}

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 yorumun düzenleme URL'sini GoogleService nesnenizdeki şu şekilde delete yöntemine iletin:

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

Başa dön