Dokumen ini menjelaskan cara menggunakan library klien Java untuk mengirim kueri Google Data API ("GData") dan menafsirkan respons yang ditampilkan.
Google menyediakan serangkaian library klien, dalam berbagai bahasa pemrograman, untuk berinteraksi dengan layanan yang memiliki API data. Dengan menggunakan library ini, Anda dapat membuat permintaan GData, mengirimkannya ke layanan, dan menerima respons.
Dokumen ini memberikan beberapa informasi umum tentang penggunaan library klien Java, beserta serangkaian contoh penggunaan umum.
Untuk menggunakan library klien ini, Anda harus menjalankan Java 1.5.
Contoh dalam panduan ini merujuk ke Google Calendar API, tetapi panduan ini bukan panduan yang akurat atau terbaru untuk menggunakan Calendar API. Untuk mengetahui informasi tentang penggunaan library klien Java dengan Data API layanan tertentu, lihat dokumentasi khusus layanan. Misalnya, jika Anda bekerja dengan Kalender, baca Panduan Developer Calendar Data API.
Daftar Isi
Audiens
Dokumen ini ditujukan untuk programmer Java yang ingin menulis aplikasi klien yang dapat berinteraksi dengan layanan GData.
Dokumen ini mengasumsikan bahwa Anda memahami ide umum di balik protokol Google Data API. Selain itu, Anda dianggap telah mengetahui cara memprogram di Java.
Untuk informasi referensi tentang class dan metode yang disediakan oleh library klien, lihat referensi API library klien Java (dalam format Javadoc).
Dokumen ini dirancang untuk dibaca secara berurutan; setiap contoh dibangun berdasarkan contoh sebelumnya.
Ringkasan model data
Library klien Java menggunakan serangkaian class untuk merepresentasikan elemen yang digunakan oleh Google Data API. Misalnya, ada class Feed, yang sesuai dengan elemen <atom:feed>
; class ini memiliki metode untuk membuat entri, mendapatkan dan menetapkan nilai berbagai sub-elemen, dan sebagainya. Ada juga class Entry, yang sesuai dengan elemen <atom:entry>
. Tidak setiap elemen yang ditentukan di Google Data API memiliki class-nya sendiri; untuk mengetahui detailnya, lihat dokumentasi referensi.
Library dapat secara otomatis mengurai konten Atom dan menempatkan nilai elemen Atom ke dalam objek yang sesuai. Misalnya, metode getFeed
mendapatkan feed, menguraikannya, dan menampilkan objek Feed dengan nilai yang dihasilkan.
Untuk mengirimkan feed atau entri ke layanan, Anda membuat objek Feed atau Entry, lalu memanggil metode library (seperti metode insert
) untuk menerjemahkan objek secara otomatis ke XML dan mengirimkannya.
Anda dapat mengurai dan/atau membuat XML sendiri jika mau; cara termudah untuk melakukannya adalah dengan library pihak ketiga yang sesuai seperti Rome.
Seperti sintaksis XML Google Data API yang dapat diperluas, model objek yang sesuai juga dapat diperluas. Misalnya, library klien menyediakan class yang sesuai dengan elemen yang ditentukan dalam namespace Data Google.
Tutorial dan contoh
Contoh berikut menunjukkan cara mengirim berbagai permintaan Data API menggunakan library klien Java.
Untuk membuatnya lebih konkret, contoh ini menunjukkan cara berinteraksi dengan layanan tertentu: Google Kalender. Kami akan menunjukkan tempat-tempat yang membuat Kalender berbeda dari layanan Google lainnya, untuk membantu Anda menyesuaikan contoh ini agar dapat digunakan dengan layanan lain. Untuk mengetahui informasi selengkapnya tentang Kalender, lihat dokumentasi Google Calendar Data API.
Membangun dan menjalankan klien
Untuk mengompilasi contoh dalam dokumen ini, Anda harus menggunakan pernyataan impor berikut:
import com.google.gdata.client.*; import com.google.gdata.client.calendar.*; import com.google.gdata.data.*; import com.google.gdata.data.extensions.*; import com.google.gdata.util.*; import java.net.URL;
Meminta feed
Seperti yang dijelaskan dalam dokumen Google Calendar Data API, Anda dapat meminta feed Kalender dengan mengirim permintaan HTTP berikut ke Kalender:
GET http://www.google.com/calendar/feeds/userID/private/full
Tentu saja, Anda harus mengganti userID
dengan alamat email pengguna; lihat dokumen Kalender untuk mengetahui detailnya. Sebagai gantinya, Anda dapat menggunakan URL default khusus untuk berinteraksi dengan Kalender (seperti yang dijelaskan dalam dokumen Kalender), tetapi dalam dokumen ini, kita akan menggunakan URL feed lengkap pribadi, yang berisi ID pengguna.
Anda juga harus memberikan autentikasi yang sesuai. Perbedaan utama antara contoh ini dan contoh pertama dalam dokumen Kalender adalah (1) contoh ini mencakup autentikasi, dan (2) contoh ini menggunakan class GoogleService yang lebih umum, bukan class CalendarService khusus Kalender.
Perhatikan bahwa sistem autentikasi yang kita gunakan di sini (dikenal sebagai "Autentikasi Google untuk Aplikasi yang Diinstal") hanya cocok untuk digunakan dalam aplikasi klien yang diinstal seperti klien desktop, bukan untuk digunakan dalam aplikasi web. Untuk mengetahui informasi selengkapnya tentang autentikasi, lihat dokumentasi Autentikasi Akun Google.
Untuk meminta feed Kalender menggunakan library klien Java, bagi pengguna dengan alamat email "liz@gmail.com" dan sandi "mypassword", gunakan kode berikut:
// Set up the URL and the object that will handle the connection: URL feedUrl = new URL("http://www.google.com/calendar/feeds/liz@gmail.com/private/full"); GoogleService myService = new GoogleService("cl", "exampleCo-exampleApp-1"); myService.setUserCredentials("liz@gmail.com", "mypassword"); // Mark the feed as an Event feed: new EventFeed().declareExtensions(myService.getExtensionProfile()); // Send the request and receive the response: Feed myFeed = myService.getFeed(feedUrl, Feed.class);
Class GoogleService
mewakili koneksi klien (dengan autentikasi) ke layanan GData. Prosedur umum untuk mengirim kueri ke layanan menggunakan library klien terdiri dari langkah-langkah berikut:
- Dapatkan atau buat URL yang sesuai.
- Jika Anda mengirim data ke layanan (misalnya, jika Anda menyisipkan entri baru), ubah data mentah menjadi objek menggunakan class library klien. (Langkah ini tidak berlaku jika Anda hanya meminta feed, seperti yang kami lakukan dalam contoh ini.)
- Buat instance
GoogleService
baru, tetapkan nama layanan (seperti"cl"
untuk Kalender) dan nama aplikasi Anda (dalam bentukcompanyName-applicationName-versionID
). - Tetapkan kredensial yang sesuai.
- Tunjukkan kepada library klien ekstensi yang akan digunakan feed, sehingga library dapat mem-parsing feed yang ditampilkan dengan benar.
- Panggil metode untuk mengirim permintaan dan menerima hasil apa pun.
Metode setUserCredentials
menentukan ID dan sandi pengguna yang atas nama pengguna tersebut klien Anda mengirimkan kueri. Contoh dalam dokumen ini menggunakan sistem autentikasi "Autentikasi untuk Aplikasi yang Diinstal". Untuk mengetahui informasi selengkapnya tentang sistem autentikasi, lihat dokumentasi Autentikasi Akun Google.
Setelah menetapkan kredensial, Anda menunjukkan ekstensi mana yang akan digunakan feed dengan memanggil metode declareExtensions
. Dalam hal ini, kita menyatakan bahwa feed adalah feed Peristiwa, dan dengan demikian akan menggunakan ekstensi yang ditentukan oleh jenis Peristiwa.
Untuk meminta seluruh feed, Anda memanggil metode getFeed
, yang mengambil URL dan menampilkan seluruh feed yang ditemukan di URL tersebut. Kami akan menunjukkan cara mengirim kueri yang lebih spesifik nanti dalam dokumen ini.
Seperti metode lain dari class GoogleService
, getFeed
menangani autentikasi dan pengalihan sesuai kebutuhan.
Menyisipkan item baru
Untuk membuat acara kalender baru, Anda dapat menggunakan kode berikut:
URL postUrl = new URL("http://www.google.com/calendar/feeds/liz@gmail.com/private/full"); EventEntry myEntry = new EventEntry(); myEntry.setTitle(new PlainTextConstruct("Tennis with Darcy")); myEntry.setContent(new PlainTextConstruct("Meet for a quick lesson.")); Person author = new Person("Elizabeth Bennet", null, "liz@gmail.com"); myEntry.getAuthors().add(author); DateTime startTime = DateTime.parseDateTime("2006-04-17T15:00:00-08:00"); DateTime endTime = DateTime.parseDateTime("2006-04-17T17:00:00-08:00"); When eventTimes = new When(); eventTimes.setStartTime(startTime); eventTimes.setEndTime(endTime); myEntry.addTime(eventTimes); // Send the request and receive the response: EventEntry insertedEntry = myService.insert(postUrl, myEntry);
Setelah menetapkan URL, kita membuat objek EventEntry
; EventEntry
berasal dari class dasar abstrak BaseEntry
, yang juga merupakan class induk untuk class Entry
, yang merepresentasikan elemen <atom:entry>
.
Class EventEntry
merepresentasikan jenis Peristiwa; untuk mengetahui informasi selengkapnya, lihat dokumen Jenis. Untuk layanan selain Kalender, Anda dapat menetapkan entri yang ditampilkan ke objek Entry
, bukan objek EventEntry
.
Judul entri adalah TextConstruct
, sebuah class yang menyimpan teks dalam berbagai bentuk (teks biasa, HTML, atau XHTML). Konten entri diwakili oleh objek Content
, yaitu class yang dapat menyimpan teks biasa atau bentuk konten lainnya, termasuk XML dan data biner. (Namun, metode setContent
juga dapat menerima TextConstruct
.)
Setiap penulis ditampilkan sebagai nama, URI, dan alamat email. (Dalam contoh ini, kita tidak menyertakan URI.) Anda menambahkan penulis ke entri dengan memanggil metode getAuthors().add
entri.
Kita menggunakan objek GoogleService
yang sama dengan yang kita buat dalam contoh sebelumnya. Dalam hal ini, metode yang akan dipanggil adalah insert
, yang mengirimkan item ke URL penyisipan yang ditentukan.
Layanan ini menampilkan entri yang baru dibuat, yang mungkin berisi elemen tambahan yang dihasilkan server, seperti URL pengeditan untuk entri.
Kode status HTTP ditampilkan sebagai pengecualian.
Kode di atas setara dengan mengirim POST http://www.google.com/calendar/feeds/liz@gmail.com/private/full
(dengan autentikasi yang tepat) dan memberikan entri dalam bentuk jenis Peristiwa.
Meminta entri tertentu
Kode berikut memungkinkan Anda meminta entri spesifik yang Anda sisipkan dalam contoh sebelumnya.
Dalam konteks rangkaian contoh ini, pengambilan entri tersebut sebenarnya tidak diperlukan, karena Kalender telah menampilkan entri yang dimasukkan; tetapi teknik yang sama dapat diterapkan kapan pun Anda mengetahui URI untuk suatu entri.
URL entryUrl = new URL(insertedEntry.getSelfLink().getHref()); EventEntry retrievedEntry = myService.getEntry(entryUrl, EventEntry.class);
Entri yang disisipkan memiliki metode, getSelfLink
, yang menampilkan objek Link
yang menyertakan URL entri. Class Link
memiliki metode getHref
yang menampilkan URL sebagai String
, yang dapat kita gunakan untuk membuat objek URL.
Kemudian, kita hanya perlu memanggil metode getEntry
layanan untuk mendapatkan entri.
Perhatikan bahwa kita memberikan EventEntry.class
sebagai parameter ke getEntry
, yang menunjukkan bahwa kita secara khusus mengharapkan layanan menampilkan Peristiwa, bukan hanya entri biasa. Untuk layanan selain Kalender, Anda mungkin hanya meneruskan Entry.class
.
Kode di atas setara dengan mengirim GET http://www.google.com/calendar/feeds/liz@gmail.com/private/full/entryID
ke Kalender, dengan autentikasi yang tepat.
Menelusuri entri
Untuk mengambil kecocokan pertama dari penelusuran teks lengkap, gunakan kode berikut:
Query myQuery = new Query(feedUrl); myQuery.setFullTextQuery("Tennis"); Feed myResultsFeed = myService.query(myQuery, Feed.class); if (myResultsFeed.getEntries().size() > 0) { Entry firstMatchEntry = myResultsFeed.getEntries().get(0); String myEntryTitle = firstMatchEntry.getTitle().getPlainText(); }
Contoh ini dimulai dengan membuat objek Query
, yang sebagian besar terdiri dari URL dan parameter kueri terkait. Setiap parameter kueri GData standar memiliki metode penyetel. Anda juga dapat menetapkan parameter kueri kustom untuk layanan tertentu, menggunakan metode addCustomParameter
.
Setelah membuat Query
, kita meneruskannya ke metode query
layanan, yang menampilkan feed yang berisi hasil kueri. Pendekatan alternatifnya adalah membuat URL sendiri (dengan menambahkan parameter kueri ke URL feed), lalu memanggil metode getFeed
, tetapi metode query
memberikan lapisan abstraksi yang berguna sehingga Anda tidak perlu membuat URL sendiri.
Metode getEntries
feed menampilkan daftar entri dalam feed; getEntries().size
menampilkan jumlah entri dalam feed.
Dalam hal ini, jika kueri menampilkan hasil apa pun, kita akan menetapkan hasil yang cocok pertama ke objek Entry
. Kemudian, kita menggunakan metode getTitle().getPlainText
class Entry
untuk mengambil judul entri dan mengonversinya menjadi teks.
Kode di atas setara dengan mengirim GET http://www.google.com/calendar/feeds/liz@gmail.com/private/full?q=Tennis
ke Kalender.
Mengirim kueri menurut kategori
Catatan: Google Kalender tidak mengaitkan label dengan acara, jadi contoh ini tidak berfungsi dengan Kalender.
Untuk mengambil feed yang terdiri dari semua entri yang cocok dengan penelusuran teks lengkap sebelumnya dan yang berada dalam kategori tertentu atau memiliki label tertentu, gunakan kode berikut:
Category myCategory = new Category("by_liz"); CategoryFilter myCategoryFilter = new CategoryFilter(myCategory); myQuery.addCategoryFilter(myCategoryFilter); Feed myCategoryResultsFeed = myService.query(myQuery, Feed.class);
Tentu saja, class Category
mewakili kategori yang akan digunakan dalam filter kategori. Class Query.CategoryFilter
dapat berisi beberapa kategori, tetapi dalam kasus ini kita membuat filter dengan hanya satu kategori.
Kemudian, kita menambahkan filter tersebut ke kueri yang ada, yang masih berisi string kueri teks lengkap dari contoh sebelumnya.
Kita kembali menggunakan metode query
untuk mengirim kueri ke layanan.
Jika Kalender mengizinkan penelusuran kategori, kode di atas akan setara dengan mengirim GET http://www.google.com/calendar/feeds/liz@gmail.com/private/full/-/by_liz?q=Tennis
ke Kalender.
Memperbarui item
Untuk memperbarui item yang ada, gunakan kode berikut. Dalam contoh ini, kita mengubah judul entri yang sebelumnya diambil dari teks lamanya ("Tennis with Darcy") menjadi "Important meeting".
retrievedEntry.setTitle(new PlainTextConstruct("Important meeting")); URL editUrl = new URL(retrievedEntry.getEditLink().getHref()); EventEntry updatedEntry = myService.update(editUrl, myEntry);
Pertama, kita menetapkan judul baru untuk entri yang kita ambil sebelumnya. Kemudian, kita mendapatkan URL pengeditan untuk entri, menggunakan metode getEditLink
. Kemudian, kita memanggil metode update
layanan untuk mengirim entri yang diperbarui.
Layanan menampilkan entri yang diperbarui, termasuk URL baru untuk versi baru entri ini. (Untuk mengetahui informasi selengkapnya tentang versi entri, lihat bagian Konkurensi optimis dalam dokumen referensi protokol.)
Kode di atas kurang lebih setara dengan mengirim PUT http://www.google.com/calendar/feeds/liz@gmail.com/private/full/entryID
ke layanan, beserta entri baru (dalam format Atom) untuk menggantikan entri asli.
Menghapus item
Untuk menghapus entri yang diperbarui, gunakan kode berikut:
URL deleteUrl = new URL(updatedEntry.getEditLink().getHref()); myService.delete(deleteUrl);
URL yang digunakan untuk penghapusan sama dengan URL pengeditan, jadi contoh ini sangat mirip dengan contoh sebelumnya, kecuali tentu saja kita memanggil metode delete
, bukan update
.
Kode di atas kurang lebih setara dengan mengirim DELETE http://www.google.com/calendar/feeds/liz@gmail.com/private/full/entryID
ke layanan.
Referensi
Untuk informasi referensi tentang class dan metode yang disediakan oleh library klien, lihat referensi API library klien Java (dalam format Javadoc).