Bu belgede, Google Data API ("GData") sorguları göndermek ve döndürülen yanıtları yorumlamak için Java istemci kitaplığının nasıl kullanılacağı açıklanmaktadır.
Google, veri API'leri olan hizmetlerle etkileşim kurmak için çeşitli programlama dillerinde bir dizi istemci kitaplığı sağlar. Bu kitaplıkları kullanarak GData istekleri oluşturabilir, bunları bir hizmete gönderebilir ve yanıt alabilirsiniz.
Bu belgede, Java istemci kitaplığının kullanımıyla ilgili bazı genel bilgilerin yanı sıra yaygın kullanımlara dair bir dizi örnek verilmektedir.
Bu istemci kitaplığını kullanmak için Java 1.5'i çalıştırmanız gerekir.
Java istemci kitaplığını indirin.
Bu kılavuzdaki örneklerde Google Takvim API'si ele alınmaktadır ancak bu kılavuz, Takvim API'sinin kullanımıyla ilgili doğru veya güncel bir kılavuz değildir. Java istemci kitaplığını belirli bir hizmetin Data API'siyle kullanma hakkında bilgi için hizmete özel dokümanlara bakın. Örneğin, Takvim ile çalışıyorsanız Calendar Data API Geliştirici Kılavuzu'nu okuyun.
İçindekiler
Kitle
Bu belge, GData hizmetleriyle etkileşim kurabilen istemci uygulamaları yazmak isteyen Java programcıları için hazırlanmıştır.
Bu belgede, Google Veri API'leri protokolünün temel kavramlarını bildiğiniz varsayılmaktadır. Ayrıca Java ile programlama yapmayı bildiğiniz de 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ına (Javadoc biçiminde) bakın.
Bu belge, sırayla okunacak şekilde tasarlanmıştır. Her örnek, önceki örneklerin üzerine kurulmuştur.
Veri modeline genel bakış
Java istemci kitaplığı, Google Veri API'leri tarafından kullanılan öğeleri temsil etmek için bir dizi sınıf kullanır. Örneğin, <atom:feed>
öğesine karşılık gelen bir Feed sınıfı vardır. Bu sınıf, giriş oluşturma, çeşitli alt öğelerin değerlerini alma ve ayarlama gibi yöntemlere sahiptir. <atom:entry>
öğesine karşılık gelen bir Entry sınıfı da vardır. Google Veri API'lerinde tanımlanan her öğenin kendi sınıfı yoktur. Ayrıntılar için referans belgelerine bakın.
Kitaplık, Atom içeriğini otomatik olarak ayrıştırabilir ve Atom öğelerinin değerlerini uygun nesnelere yerleştirebilir. Örneğin, getFeed
yöntemi bir feed alır, ayrıştırır ve sonuç değerleriyle bir Feed nesnesi döndürür.
Bir feed'i veya girişi bir hizmete göndermek için Feed veya Entry nesnesi oluşturur, ardından nesneyi otomatik olarak XML'ye çevirmek ve göndermek için bir kitaplık yöntemi (ör. insert
yöntemi) çağırırsınız.
Tercih ederseniz XML'yi kendiniz ayrıştırabilir ve/veya oluşturabilirsiniz. Bunu yapmanın en kolay yolu Rome gibi uygun bir üçüncü taraf kitaplığı kullanmaktır.
Google Data API'nin XML söz dizimi genişletilebilir olduğu gibi, ilgili nesne modeli de genişletilebilir. Örneğin, istemci kitaplığı Google Veri ad alanında tanımlanan öğelere karşılık gelen sınıflar sağlar.
Eğitim ve örnekler
Aşağıdaki örneklerde, Java istemci kitaplığı kullanılarak çeşitli Data API isteklerinin nasıl gönderileceği gösterilmektedir.
Bu örnekler, daha somut hale getirmek için belirli bir hizmetle (Google Takvim) nasıl etkileşimde bulunulacağını gösterir. Bu örnekleri diğer hizmetlerde kullanabilmeniz için Takvim'in diğer Google hizmetlerinden farklı olduğu yerleri vurgulayacağız. Takvim hakkında daha fazla bilgi için Google Calendar Data API belgelerine bakın.
İstemcinizi oluşturma ve çalıştırma
Bu belgedeki örnekleri derlemek için aşağıdaki içe aktarma ifadelerini kullanmanız gerekir:
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;
Feed isteğinde bulunma
Google Calendar Data API belgesinde açıklandığı gibi, Calendar'a aşağıdaki HTTP isteğini göndererek bir Takvim feed'i isteğinde bulunabilirsiniz:
GET http://www.google.com/calendar/feeds/userID/private/full
Elbette userID
yerine kullanıcının e-posta adresini girmeniz gerekir. Ayrıntılar için Takvim dokümanına bakın. Bunun yerine, Takvim ile etkileşim kurmak için özel varsayılan URL'yi (Takvim dokümanında açıklandığı gibi) kullanabilirsiniz. Ancak bu dokümanda, kullanıcı kimliğini içeren özel tam özet akışı URL'si kullanılacaktır.
Ayrıca uygun kimlik doğrulama bilgilerini de sağlamanız gerekir. Bu örnek ile Takvim dokümanındaki ilk örnek arasındaki temel farklar şunlardır: (1) Bu örnekte kimlik doğrulama yer alır ve (2) bu örnekte Takvim'e özgü CalendarService sınıfı yerine daha genel olan GoogleService sınıfı kullanılır.
Burada kullandığımız kimlik doğrulama sisteminin ("Yüklü Uygulamalar İçin Google Kimlik Doğrulaması" olarak bilinir) yalnızca masaüstü istemcileri gibi yüklü istemci uygulamalarında kullanıma uygun olduğunu, web uygulamalarında kullanıma uygun olmadığını unutmayın. Kimlik doğrulama hakkında daha fazla bilgi için Google Hesabı Kimlik Doğrulaması belgesine bakın.
Java istemci kitaplığını kullanarak takvim feed'i istemek için "liz@gmail.com" e-posta adresine ve "mypassword" şifresine sahip bir kullanıcı için aşağıdaki kodu kullanın:
// 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);
GoogleService
sınıfı, bir GData hizmetine istemci bağlantısını (kimlik doğrulama ile) temsil eder. İstemci kitaplığını kullanarak bir hizmete sorgu göndermeyle ilgili genel prosedür aşağıdaki adımlardan oluşur:
- Uygun URL'yi edinin veya oluşturun.
- Bir hizmete veri gönderiyorsanız (örneğin, yeni bir giriş ekliyorsanız) ham verileri istemci kitaplığı sınıflarını kullanarak nesnelere dönüştürün. (Bu adım, bu örnekte yaptığımız gibi yalnızca feed isteğinde bulunuyorsanız geçerli değildir.)
- Hizmet adını (ör. Takvim için
"cl"
) ve uygulamanızın adını (companyName-applicationName-versionID
biçiminde) ayarlayarak yeni birGoogleService
örneği oluşturun. - Uygun kimlik bilgilerini ayarlayın.
- Kitaplığın döndürülen feed'leri doğru şekilde ayrıştırabilmesi için istemci kitaplığına feed'in hangi uzantıları kullanacağını belirtin.
- İsteği göndermek ve sonuçları almak için bir yöntemi çağırın.
setUserCredentials
yöntemi, istemcinizin sorguyu gönderdiği kullanıcının kimliğini ve şifresini belirtir. Bu belgedeki örneklerde "Yüklü Uygulamalar İçin Kimlik Doğrulama" kimlik doğrulama sistemi kullanılmaktadır. Kimlik doğrulama sistemleri hakkında daha fazla bilgi için Google Hesabı Kimlik Doğrulaması dokümanlarına bakın.
Kimlik bilgilerini ayarladıktan sonra declareExtensions
yöntemini çağırarak feed'in hangi uzantıları kullanacağını belirtirsiniz. Bu durumda, feed'in bir etkinlik feed'i olduğunu ve dolayısıyla Etkinlik türü tarafından tanımlanan uzantıları kullanacağını belirtiyoruz.
Bir feed'in tamamını istemek için getFeed
yöntemini çağırırsınız. Bu yöntem bir URL alır ve o URL'de bulunan feed'in tamamını döndürür. Daha ayrıntılı sorguların nasıl gönderileceğini bu belgenin ilerleyen bölümlerinde göstereceğiz.
GoogleService
sınıfının diğer yöntemleri gibi getFeed
de kimlik doğrulamayı ve yönlendirmeleri gerektiği gibi işler.
Yeni öğe ekleme
Yeni bir takvim etkinliği oluşturmak için aşağıdaki kodu kullanabilirsiniz:
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);
URL'yi ayarladıktan sonra bir EventEntry
nesnesi oluştururuz. EventEntry
, BaseEntry
soyut temel sınıfından türetilir. Bu sınıf, <atom:entry>
öğesini temsil eden Entry
sınıfının da üst sınıfıdır.
EventEntry
sınıfı bir Etkinlik türünü temsil eder. Daha fazla bilgi için Türler belgesine bakın. Takvim dışındaki hizmetler için döndürülen girişi bir EventEntry
nesnesi yerine bir Entry
nesnesine atayabilirsiniz.
Giriş başlığı, metni çeşitli biçimlerde (düz metin, HTML veya XHTML) tutan bir sınıf olan TextConstruct
'dır. Giriş içeriği, XML ve ikili veriler dahil olmak üzere düz metin veya diğer içerik biçimlerini barındırabilen bir sınıf olan Content
nesnesiyle temsil edilir. (Ancak setContent
yöntemi TextConstruct
değerini de kabul edebilir.)
Her yazar ad, URI ve e-posta adresi olarak gösterilir. (Bu örnekte URI'yi dahil etmiyoruz.) Girişin getAuthors().add
yöntemini çağırarak girişe yazar ekleyebilirsiniz.
Önceki örnekte oluşturduğumuz GoogleService
nesnesini kullanıyoruz. Bu durumda, çağrılacak yöntem insert
'dır. Bu yöntem, belirtilen ekleme URL'sine bir öğe gönderir.
Hizmet, yeni oluşturulan girişi döndürür. Bu giriş, sunucu tarafından oluşturulan ek öğeler (ör. giriş için düzenleme URL'si) içerebilir.
HTTP durum kodları istisna olarak döndürülür.
Yukarıdaki kod, POST http://www.google.com/calendar/feeds/liz@gmail.com/private/full
göndermeye (uygun kimlik doğrulama ile) ve Etkinlik türünde bir giriş sağlamaya eşdeğerdir.
Belirli bir girişi isteme
Aşağıdaki kod, önceki örnekte eklediğiniz belirli girişi istemenize olanak tanır.
Bu örnekler dizisi bağlamında, takvim zaten eklenen girişi döndürdüğü için bu girişi almak gerçekten gerekli değildir. Ancak bir girişin URI'sini bildiğiniz her durumda aynı teknik uygulanabilir.
URL entryUrl = new URL(insertedEntry.getSelfLink().getHref()); EventEntry retrievedEntry = myService.getEntry(entryUrl, EventEntry.class);
Eklenen giriş, girişin URL'sini içeren bir Link
nesnesi döndüren bir yönteme (getSelfLink
) sahiptir. Link
sınıfında, URL'yi String
olarak döndüren bir getHref
yöntemi bulunur. Bu yöntemden bir URL nesnesi oluşturabiliriz.
Ardından, girişi almak için hizmetin getEntry
yöntemini çağırmamız yeterlidir.
EventEntry.class
parametresini getEntry
olarak verdiğimizi unutmayın. Bu, hizmetin yalnızca düz bir giriş yerine özellikle bir Etkinlik döndürmesini beklediğimizi gösterir. Takvim dışındaki hizmetler için bunun yerine Entry.class
iletebilirsiniz.
Yukarıdaki kod, GET http://www.google.com/calendar/feeds/liz@gmail.com/private/full/entryID
değerinin uygun kimlik doğrulamasıyla Takvim'e gönderilmesine eşdeğerdir.
Girişleri arama
Tam metin aramasından ilk eşleşmeyi almak için aşağıdaki kodu kullanın:
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(); }
Bu örnekte, çoğunlukla bir URL'nin yanı sıra ilişkili sorgu parametrelerinden oluşan bir Query
nesnesi oluşturularak başlanır. Standart GData sorgu parametrelerinin her birinin bir ayarlayıcı yöntemi vardır. Ayrıca, addCustomParameter
yöntemini kullanarak belirli bir hizmet için özel sorgu parametreleri de ayarlayabilirsiniz.
Query
oluşturulduktan sonra, sorgu sonuçlarını içeren bir feed döndüren hizmetin query
yöntemine iletilir. Alternatif bir yaklaşım, URL'yi kendiniz oluşturmak (feed URL'sine sorgu parametreleri ekleyerek) ve ardından getFeed
yöntemini çağırmak olabilir. Ancak query
yöntemi, URL'yi kendiniz oluşturmak zorunda kalmamanız için yararlı bir soyutlama katmanı sağlar.
Feed'in getEntries
yöntemi, feed'deki girişlerin listesini döndürür. getEntries().size
ise feed'deki girişlerin sayısını döndürür.
Bu durumda, sorgu herhangi bir sonuç döndürürse eşleşen ilk sonucu bir Entry
nesnesine atarız. Ardından, girişin başlığını almak ve metne dönüştürmek için Entry
sınıfının getTitle().getPlainText
yöntemini kullanırız.
Yukarıdaki kod, Takvim'e GET http://www.google.com/calendar/feeds/liz@gmail.com/private/full?q=Tennis
göndermeye eşdeğerdir.
Kategoriye göre sorgulama
Not: Google Takvim, etiketleri etkinliklerle ilişkilendirmediği için bu örnek Takvim ile çalışmaz.
Önceki tam metin aramasıyla eşleşen ve belirli bir kategoride olan veya belirli bir etikete sahip tüm girişlerden oluşan bir feed'i almak için aşağıdaki kodu kullanın:
Category myCategory = new Category("by_liz"); CategoryFilter myCategoryFilter = new CategoryFilter(myCategory); myQuery.addCategoryFilter(myCategoryFilter); Feed myCategoryResultsFeed = myService.query(myQuery, Feed.class);
Category
sınıfı, kategori filtresinde kullanılacak bir kategoriyi temsil eder. Query.CategoryFilter
sınıfı birden fazla kategori içerebilir ancak bu durumda yalnızca bir kategori içeren bir filtre oluşturuyoruz.
Ardından, bu filtreyi önceki örnekteki tam metin sorgu dizesini hâlâ içeren mevcut sorguya ekliyoruz.
Sorguyu hizmete göndermek için yine query
yöntemini kullanırız.
Takvim'de kategori aramasına izin verilseydi yukarıdaki kod, Takvim'e GET http://www.google.com/calendar/feeds/liz@gmail.com/private/full/-/by_liz?q=Tennis
göndermeye eşdeğer olurdu.
Öğe güncelleme
Mevcut bir öğeyi güncellemek için aşağıdaki kodu kullanın. Bu örnekte, daha önce alınan girişin başlığını eski metninden ("Darcy ile tenis") "Önemli toplantı" olarak değiştiriyoruz.
retrievedEntry.setTitle(new PlainTextConstruct("Important meeting")); URL editUrl = new URL(retrievedEntry.getEditLink().getHref()); EventEntry updatedEntry = myService.update(editUrl, myEntry);
Öncelikle, daha önce getirdiğimiz giriş için yeni bir başlık belirleriz. Ardından, getEditLink
yöntemini kullanarak girişin düzenleme URL'sini alırız. Ardından, güncellenen girişi göndermek için hizmetin update
yöntemini çağırırız.
Hizmet, bu girişin yeni sürümüne ait yeni bir URL de dahil olmak üzere güncellenmiş girişi döndürür. (Giriş sürümleri hakkında daha fazla bilgi için protokol referans belgesinin Optimistic concurrency (İyimser eşzamanlılık) bölümüne bakın.)
Yukarıdaki kod, orijinal girişi değiştirmek için yeni girişle (Atom biçiminde) birlikte hizmete PUT http://www.google.com/calendar/feeds/liz@gmail.com/private/full/entryID
göndermeye kabaca eşdeğerdir.
Öğe silme
Güncellenen girişi silmek için aşağıdaki kodu kullanın:
URL deleteUrl = new URL(updatedEntry.getEditLink().getHref()); myService.delete(deleteUrl);
Silme için kullanılacak URL, düzenleme URL'siyle aynıdır. Bu nedenle, update
yerine delete
yöntemini çağırmamız dışında bu örnek, önceki örneğe çok benzer.
Yukarıdaki kod, hizmete DELETE http://www.google.com/calendar/feeds/liz@gmail.com/private/full/entryID
göndermeye kabaca eşdeğerdir.
Referans
İstemci kitaplığı tarafından sağlanan sınıflar ve yöntemler hakkında referans bilgileri için Java istemci kitaplığı API referansına (Javadoc biçiminde) bakın.