ASP.NET ve Google Ajax Web Search ile arama sonuçlarını Deserialize etmek için yazdığım Serializable GoogleAjaxWebSearch sınıfı

Google 'ın bize sunduğu diğer hizmetlerden biri olan JSON yapısında web arama sonuçlarını döndüren "Google Ajax Web Search" servisi sayesinde Google arama sonuçlarını HTML parse etmek zorunda kalmıyoruz. Bu servisi ASP.NET ile kullanmak ve kolay olmasını istiyorsak Google 'dan gelen JSON tipindeki arama sonuçlarını deserializable etmemiz ve bu JSON verisine özel Serializble bir nesne yazmamız gerekiyor. Bu amaçla yazdığımım GoogleAjaxWebSearch sınıfını nasıl kullandığımızı ve JSON verisini nasıl deserializable ettiğimizi anlatacağım.

Normalde Google bize bu servisi kullanıcı (istemci) tarafında kullmamız için yapmış ama biz bunu sunucu tarafında yapmak da isteyebiliriz. Sunucu tarafında ASP.NET ve C# ile böyle bir kullanıma ihtayıcımız olduğunu farz ederek işlemlere başlayalım.

Bir deneme yaparak önce Google ajax web search nasıl çalışıyor öğrenelim. Tarayıcımızın adres satırına "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&hl=en&rsz=large&q=google%20ajax%20search" yazıp `enter` tuşuna basarsak uzun bir satır görürüz. Bu gördüğümüz, yaptığımız "google ajax search" aramasının JSON yapısıdaki sonuçlarını içeriyor. Bizim yapacağımız iş ise ASP.NET ile sunucu tarafında bu sonucu almak , JSON verisini deserializable etmek ve sonucu düzgün bir şekilde ekranda göstermek.

Yeni bir Web Site Project oluşturduktan (Visual Studio ya da Expression Web ile) sonra projeye yeni bir web form ekleyelim. Sonra buradan yazdığım GoogleAjaxWebSearch sınıfını içeren dosyayı indirip direk olarak projenin App_Code klasörüne kopyalayalım. Daha sonra eklediğimiz aspx sayfasının codebehind dosyasına aşağıdaki isim uzaylarını ekleyelim :

using System.Web.Script.Serialization; // deserialize işlemi için
using System.IO;  // input ve output işlemleri için
using System.Text;  // Encoding işlemleri için
using System.Net;  // HttpWebRequest,HttpWebResponse nesnelerini kullanmak için
using gwebjsonserializable; // GoogleAjaxWebSearch ismini verdiğim nesneyi kullanmak için
Birazdan kullanacağımız nesnelerle işlemlere artık başlayabiliriz. Yukarıdaki isim uzaylarınıda ekledikten sonra sayfanın Page_Load kısmına aşağıdaki kodu ekleyelim.

//Google'a istek yapmak ve cevap almak için
// kullanacağımız gerekli .net nesnelerini yaratıyoruz.
HttpWebRequest istek;   // internet üzerinden http protoklünden web isteği yapmak için
HttpWebResponse cevap;   // cevabı almak için
Encoding cevapKodlama;   // cevabı encode etmek için
StreamReader akis;   // cevabı okumak için
Uri ur;   // Url yaratmak için

// Google'a yollayacağımız  sorguyu gerekli parametreleri (URL arguments) ekleyerek aşağıdaki satırda oluşturuyoruz.
// Bu örnekte aradığımız şey: "google ajax search"
string google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&hl=en&rsz=large&q=" + Server.UrlEncode("google ajax search");
ur = new Uri(google);

// Burada hazırladığımız soruguyu Google'a yolluyoruz
istek = (HttpWebRequest)WebRequest.Create(ur);
// Google'dan gelen cevabı alıyoruz
cevap = (HttpWebResponse)istek.GetResponse();

cevapKodlama = Encoding.GetEncoding(cevap.CharacterSet);
// Google cevabını özel encode ayarıyla birikte okuyoruz.
akis = new StreamReader(cevap.GetResponseStream(), cevapKodlama);
// Burada Google'dan gelen işlenmemiş json verisini alıyoruz.
string json = akis.ReadToEnd();

// JSON verisini Deserialize etmek için JavaScriptSerializer
// nesnesinden yararlanıyoruz.
JavaScriptSerializer js = new JavaScriptSerializer();
// Burada GoogleAjaxWebSearch ismini verdiğim nesnenin yardımıyla
// json verisini deserialize ediyoruz ve böylece verileri
// googleajax nesnesinde atabiliyoruz.
GoogleAjaxWebSearch googleajax = js.Deserialize<GoogleAjaxWebSearch>(json);

// Ekranda önce google'dan adlığımız saf json verisini gösteriyoruz.
Response.Write("Google'dan gelen json verisinin işlenmemiş hali: <br/>");
Response.Write("<pre>" + Server.HtmlEncode(json) + "</pre>");

// googleajax nesnesindeki tüm verilieri ekranda gösteriyoruz. 
Response.Write("Google'dan gelen json verisinin yazdığım GoogleAjaxWebSearch class ile işlenmiş hali: <br/>");

Response.Write("<br/> <b>ResponseStatus : </b> " + googleajax.responseStatus );
Response.Write("<br/> <b >CurrentPageIndex : </b> " + googleajax.responseData.cursor.currentPageIndex );
Response.Write("<br/> <b >MoreResultsUrl : </b> " + googleajax.responseData.cursor.moreResultsUrl );
Response.Write("<br/> <b >EstimatedResultCount : </b> " + googleajax.responseData.cursor.estimatedResultCount + "<br/>");
for (int i = 0; i < googleajax.responseData.results.Count; i++)
 {
    Response.Write("<br/> <b>Title : </b> " + googleajax.responseData.results[i].title);
    Response.Write("<br/><b> VisibleUrl : </b>" + googleajax.responseData.results[i].visibleUrl);
    Response.Write("<br/><b> Url :</b> " + googleajax.responseData.results[i].url);
    Response.Write("<br/><b> Label :</b> " + googleajax.responseData.cursor.pages[i].label);
    Response.Write("<br/><b> Start :</b> " + googleajax.responseData.cursor.pages[i].start);
    Response.Write("<br/>");
 }
Artık projemizi Run edip test edebiliriz. Eğer bir hata yapmadıysanız çıkan sonuç söyle olacak:

Google Ajax Web Search sınıfı sonuç

Uygalamayı bitirmiş olduk. Uygulama dosyalarını buradan indirip çalışıtırabilirsiniz. Google 'ın bize sunduğu bu servisi farklı sonuçlar döndürecek url parametrelerini (URL Arguments) kullanmak için buradan Google Ajax Search API reference sayfasının "Standard URL Arguments" başlığı altındaki yazıyı okuyarak parametrelerin ne anlama geldiklerini anlayabilirsiniz. Daha önce dediğim gibi bu sunucu tarafında bu servisi kullandığımız için Google Ajax Search API kullanmak yerine direk olarak yarattığımız URL ile sunucu tarafında sonuçları alıyoruz ve gelen JSON verisini yine sunucu tarafında Deserialize ediyoruz.
yazan Zülküf Küçüközer tarih   22nd November 2009
primary key words  Asp.net | Json | Deserialize | Google servis okunma  9308
secondary key words  Web request | Web response | Google ajax web search | Sınıf
Bu yazı hakkında yorum yapılmamış.