Panduan Developer: Java

Penting: Ini adalah versi lama halaman ini. Untuk versi terbaru, gunakan link di menu navigasi sebelah kiri.

Blogger Data API memungkinkan aplikasi klien melihat dan memperbarui konten Blogger dalam bentuk feed Google Data API.

Aplikasi klien Anda dapat menggunakan Blogger Data API untuk membuat postingan blog baru, mengedit atau menghapus postingan blog yang ada, dan membuat kueri untuk postingan blog yang cocok dengan kriteria tertentu.

Selain memberikan latar belakang tentang kemampuan Blogger Data API, dokumen ini memberikan contoh interaksi Data API dasar menggunakan library klien Java. Jika Anda ingin memahami lebih lanjut protokol dasar yang digunakan library, lihat bagian Protokol dalam panduan developer ini.

Daftar Isi

Audiens

Dokumen ini ditujukan bagi programmer yang ingin menulis aplikasi klien Java yang dapat berinteraksi dengan Blogger.

Dokumen ini mengasumsikan bahwa Anda memahami ide umum di balik protokol Google Data API.

Untuk informasi referensi tentang class dan metode yang disediakan oleh library klien, lihat referensi API library klien Java. Untuk mengetahui informasi referensi umum Blogger Data API, lihat Panduan referensi protokol.

Memulai

Untuk mendapatkan bantuan dalam menyiapkan library klien, lihat Panduan Memulai.

Library klien Java memerlukan Java 1.5. Setelah mendownload library klien, Anda akan menemukan class yang diperlukan untuk memulai dalam file java/lib/gdataclient-1.0.jar.

Membuat akun Blogger

Sebaiknya Anda mendaftar ke akun Blogger untuk tujuan pengujian. Blogger menggunakan Akun Google, jadi jika Anda sudah memiliki akun Google, berarti Anda sudah siap.

Menjalankan kode contoh

Klien contoh yang berfungsi penuh, yang berisi semua kode contoh yang ditampilkan dalam dokumen ini, tersedia di distribusi library klien Java, di direktori gdata/java/sample/blogger/BloggerClient.java. Petunjuk build dan eksekusi disertakan dalam direktori yang sama dalam file README.txt.

Klien contoh melakukan beberapa operasi di blog yang disediakan untuk menunjukkan penggunaan Blogger Data API.

Untuk mengompilasi contoh dalam dokumen ini ke dalam kode Anda sendiri, Anda memerlukan pernyataan import berikut:

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

Mengautentikasi ke layanan Blogger

Anda dapat mengakses feed publik dan pribadi menggunakan Blogger Data API. Feed publik tidak memerlukan otentikasi, tetapi bersifat hanya baca. Jika ingin memodifikasi blog, klien Anda harus melakukan autentikasi sebelum meminta feed pribadi. Alat ini dapat melakukan autentikasi menggunakan salah satu dari dua pendekatan: autentikasi proxy AuthSub atau autentikasi nama pengguna/sandi ClientLogin.

Untuk mengetahui informasi selengkapnya tentang autentikasi dengan Google Data API secara umum, lihat dokumentasi autentikasi.

Sebagian besar contoh di bagian selanjutnya dari dokumen ini mengasumsikan bahwa Anda memiliki objek GoogleService yang diautentikasi.

Autentikasi proxy AuthSub

Autentikasi proxy AuthSub digunakan oleh aplikasi web yang perlu mengautentikasi penggunanya ke Akun Google. Operator situs dan kode klien tidak memiliki akses ke nama pengguna dan sandi pengguna Blogger. Sebagai gantinya, klien memperoleh token AuthSub khusus agar klien dapat bertindak atas nama pengguna tertentu. Untuk mengetahui informasi yang lebih mendetail, lihat dokumentasi AuthSub.

Ketika pengguna pertama kali mengunjungi aplikasi Anda, mereka belum diautentikasi. Dalam hal ini, Anda perlu menampilkan beberapa informasi dan link yang mengarahkan pengguna ke halaman Google untuk mengautentikasi permintaan Anda agar mendapatkan akses ke blog mereka. Library klien Java menyediakan fungsi untuk membuat URL halaman Google. Kode di bawah mengambil URL halaman AuthSubRequest:

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

Metode getRequestUrl mengambil parameter berikut (sesuai dengan parameter kueri yang digunakan oleh pengendali AuthSubRequest):

berikutnya
URL halaman tujuan pengalihan pengguna oleh Google setelah autentikasi.
cakupan
Menunjukkan bahwa aplikasi meminta token untuk mengakses feed Blogger. String cakupan yang akan digunakan adalah http://www.blogger.com/feeds/ (tentunya berenkode URL).
aman
Menunjukkan apakah klien meminta token aman.
session
Menunjukkan apakah token yang ditampilkan dapat ditukarkan dengan token multiguna (sesi).

Contoh di atas menunjukkan panggilan yang tidak meminta token aman (nilai secure adalah false). URL permintaan yang dihasilkan mungkin terlihat seperti ini:

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

Pengguna mengikuti link ke situs Google dan melakukan autentikasi ke Akun Google-nya.

Setelah pengguna melakukan autentikasi, sistem AuthSub akan mengalihkan mereka ke URL yang Anda tentukan dalam parameter kueri next dari URL AuthSubRequest. Sistem AuthSub menambahkan token autentikasi ke URL tersebut, sebagai nilai parameter kueri token. Contoh:

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

Nilai token ini mewakili token AuthSub sekali pakai. Dalam contoh ini, sejak session = true ditentukan, token ini dapat ditukarkan dengan token sesi AuthSub dengan memanggil layanan AuthSubSessionToken, sebagai berikut, dengan urlFromAuthSub adalah URL tempat AuthSub menambahkan token:

String token = AuthSubUtil.getTokenFromReply(urlFromAuthSub);
String sessionToken = AuthSubUtil.exchangeForSessionToken(token, null);

Artinya, Anda meneruskan token sekali pakai ke metode exchangeForSessionToken, beserta null (untuk mode tidak terdaftar) atau kunci pribadi (untuk mode terdaftar), dan antarmuka AuthSub akan menampilkan token sesi. Untuk mengetahui informasi selengkapnya tentang aplikasi terdaftar dan kunci pribadi, lihat bagian "Permintaan penandatanganan" dalam dokumentasi AuthSub.

Aplikasi Anda kemudian dapat menggunakan token sesi dalam interaksi berikutnya dengan Blogger. Untuk memberi tahu library klien Java agar otomatis mengirim token sesi dengan setiap permintaan, panggil metode setAuthSubToken objek GoogleService:

GoogleService.setAuthSubToken(sessionToken, null);

Setelah itu, library klien secara otomatis mengirimkan token bersama setiap permintaan.

Autentikasi nama pengguna/sandi ClientLogin

Gunakan autentikasi ClientLogin jika klien Anda adalah klien "terinstal" satu pengguna mandiri (seperti aplikasi desktop). Cukup panggil metode setUserCredentials pada objek GoogleService Anda dan semua interaksi berikutnya dengan Blogger akan diautentikasi:

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

Dalam cuplikan di atas, kita meneruskan dua parameter ke konstruktor GoogleService. Parameter pertama adalah nama layanan yang ingin kita libatkan. Parameter kedua adalah nama aplikasi dalam bentuk companyName-applicationName-versionID.

Untuk informasi selengkapnya tentang autentikasi ClientLogin, termasuk contoh permintaan dan respons, lihat dokumentasi Autentikasi untuk Aplikasi yang Terinstal.

Catatan: Gunakan token yang sama untuk semua permintaan dalam sesi tertentu; jangan dapatkan token baru untuk setiap permintaan Blogger.

Catatan: Seperti yang dijelaskan dalam dokumentasi ClientLogin, permintaan autentikasi mungkin gagal dan meminta tantangan CAPTCHA. Jika Anda ingin Google mengeluarkan dan menangani tantangan CAPTCHA, arahkan pengguna ke https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (bukan ke URL penanganan CAPTCHA yang diberikan dalam dokumentasi ClientLogin).

Mengambil daftar blog

Blogger Data API menyediakan feed yang mencantumkan blog untuk pengguna tertentu; feed tersebut dikenal sebagai "metafeed".

Kode contoh berikut menggunakan objek GoogleService yang diautentikasi untuk mengambil metafeed, lalu mencetak setiap judul blog.

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

Catat URL yang digunakan oleh metode getFeed. Ini adalah URL feed meta default. URL ini menampilkan daftar blog untuk pengguna yang saat ini diautentikasi. Untuk mengakses feed bagi pengguna yang berbeda, Anda dapat menempatkan ID pengguna sebagai pengganti default di URL feed meta. ID pengguna adalah string digit di akhir URL profil pengguna.

Membuat postingan

Blogger Data API memungkinkan Anda membuat dan memublikasikan entri blog baru, serta membuat draf entri.

Catatan: Menetapkan penulis kustom untuk postingan saat ini tidak didukung. Semua postingan baru akan muncul seolah-olah dibuat oleh pengguna yang saat ini diautentikasi.

Memublikasikan postingan blog

Anda dapat menggunakan library klien Java untuk memublikasikan entri blog baru.

Pertama, buat objek Entry untuk mewakili postingan blog. Kemudian, Anda dapat menetapkan judul, konten, dan atribut lain untuk postingan blog tersebut. Terakhir, gunakan objek GoogleService untuk menyisipkan postingan. Berikut contoh cara memublikasikan postingan blog baru:

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

Metode insert menggunakan URL postingan layanan sebagai parameter. Kemudian, metode tersebut akan menampilkan entri seperti yang disimpan oleh Blogger. Entri yang ditampilkan adalah entri yang sama dengan yang Anda kirim, tetapi juga berisi berbagai elemen yang ditambahkan oleh Blogger, seperti ID postingan.

Jika permintaan Anda gagal karena alasan tertentu, Blogger dapat menampilkan kode status yang berbeda. Untuk mengetahui informasi tentang kode status, lihat dokumen referensi protokol Google Data API.

Membuat draf postingan blog

Postingan draf dibuat dengan cara yang sama seperti postingan publik, tetapi Anda perlu menyetel atribut draft dari objek Entry. Anda dapat membuat postingan blog seperti di atas sebagai draf dengan menambahkan baris yang ditandai:

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

Anda dapat mengubah postingan blog draf yang ada menjadi postingan yang dipublikasikan dengan mengambil postingan draf, menetapkan atribut draf ke salah, lalu memperbarui postingan. Kita akan membahas cara mengambil dan memperbarui postingan dalam dua bagian berikutnya.

Mengambil postingan

Bagian berikut menjelaskan cara mengambil daftar postingan blog, dengan dan tanpa parameter kueri.

Anda dapat melakukan kueri feed publik Blogger tanpa autentikasi. Oleh karena itu, Anda tidak perlu memanggil metode setUserCredentials atau melakukan autentikasi AuthSub sebelum mengambil postingan dari blog publik.

Mengambil semua postingan blog

Untuk mengambil postingan pengguna, panggil metode getFeed yang sama dengan yang digunakan untuk mengambil feed meta blog, tetapi kali ini kirim URL feed postingan blog:

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

Mengambil postingan menggunakan parameter kueri

Blogger Data API memungkinkan Anda meminta sekumpulan entri yang cocok dengan kriteria yang ditentukan, seperti meminta postingan blog yang dipublikasikan atau diperbarui dalam rentang tanggal tertentu. Untuk melakukannya, buat objek Query dan teruskan ke metode GoogleService.getQuery.

Misalnya, untuk mengirim kueri rentang tanggal, gunakan metode setPublishedMin dan setPublishedMax dari objek Query. Cuplikan kode berikut mencetak judul setiap postingan blog yang dipublikasikan antara waktu mulai dan waktu berakhir tertentu:

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

Perhatikan bahwa objek Query dibuat menggunakan URL feed postingan yang sama dengan yang digunakan untuk mengambil postingan.

Blogger Data API mendukung metode Query berikut:

addCategoryFilter
Tentukan kategori (disebut juga label) untuk memfilter hasil feed. Misalnya, http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie menampilkan entri dengan label Fritz dan Laurie.
setMaxResults
Tetapkan jumlah maksimum entri yang akan ditampilkan.
setPublishedMin, setPublishedMax
Tetapkan batasan pada tanggal publikasi entri.
setStartIndex
Menetapkan indeks berbasis 1 dari hasil pertama yang akan diambil (untuk paging).
setUpdatedMin, setUpdatedMax
Tetapkan batas pada tanggal pembaruan entri. Parameter kueri ini diabaikan kecuali jika parameter orderby ditetapkan ke updated.

Catatan: Saat ini tidak ada penyetel untuk parameter kueri orderby. Namun, Anda tetap dapat menggunakan metode Query.addCustomParameter() jika perlu menetapkannya.

Untuk mengetahui informasi selengkapnya tentang parameter kueri, lihat Panduan Referensi Data API Blogger dan Panduan Referensi Google Data API.

Memperbarui postingan

Untuk memperbarui postingan blog yang sudah ada, pertama-tama ambil entri yang ingin diperbarui, lalu ubah entrinya, kemudian kirimkan ke Blogger menggunakan metode update. Cuplikan kode berikut mengubah judul entri blog, dengan asumsi bahwa Anda telah mengambil entri tersebut dari server.

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

Kode di atas menampilkan Entry yang berisi seluruh postingan yang baru diperbarui. Untuk memperbarui properti lainnya, cukup tetapkan properti tersebut dalam objek Entry sebelum memanggil update.

Catatan: Mengubah data penulis yang terkait dengan postingan saat ini tidak didukung.

Menghapus postingan

Untuk menghapus postingan, teruskan URL edit postingan ke metode delete pada objek GoogleService Anda, seperti ini:

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

Komentar

Blogger Data API memungkinkan untuk membuat, mengambil, dan menghapus komentar. Memperbarui komentar tidak didukung (juga tidak tersedia di antarmuka web).

Membuat komentar

Untuk memposting komentar, buat objek Entry dan sisipkan seperti berikut:

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

Catatan: Saat ini, Anda hanya dapat memposting komentar ke blog milik pengguna terautentikasi.

Catatan: Menetapkan penulis kustom untuk komentar saat ini tidak didukung. Semua komentar baru akan muncul seolah-olah dibuat oleh pengguna yang saat ini diautentikasi.

Mengambil komentar

Anda dapat mengambil komentar untuk postingan tertentu dari URL feed komentar postingan:

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

Anda juga bisa mendapatkan komentar dari semua postingan menggunakan URL feed komentar blog:

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

Menghapus komentar

Untuk menghapus komentar, teruskan URL edit komentar ke metode delete pada objek GoogleService Anda seperti ini:

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

Kembali ke atas