Makale Özeti

Her gün web browserimiz ile mutlaka ziyaret ettigimiz Google.com, arama servisini yanlızca web browserimiz aracılıgıyla degil, Nisan 2002 yılından beri SOAP arabirimi ile her turlu WSDL tanımlamayı destekleyen programlama dilininde aracılıgıyla 8 milyardan fazla indekslenmiş sayfayı hizmetimize sunuyor. Yanlızca webde degil, Google DesktopSearch ile masaustumuzdede google arama teknolojisini kulanabiliyoruz, SDK sını anlatan bir makaleyi onumuzdeki gunlerde yayınlayacagım. Ama şimdilik web kısmında arama yapmaya odaklanalım.

Makale

Öncelikle bu hizmetten yani Web API den faydalanabilmek için, http://www.google.com/apis/ adresinden kayıt olmak ve Google'nin size yollayacagı erişim anahtarını (authentication key) almak gerekmektedir. Bu key ile günde 1000 query sorgulaması yapabiliyorsunuz. Bu rakamın yetersiz gelmesi durumda Google ile irtibata geçip bu sınırın arttıra bilinecegi soyleniyor.

Makalenin ekinde bu API mevcut ama yinede bu web servisi http://api.google.com/GoogleSearch.wsdl adresinden ekleyebilirsiniz projenize.

Google verdigi bu Web API ile 3 hizmet veriyor;

1- Web'de arama (GoogleSearchService.doGoogleSearch())
2- Önbelleklenmiş sayfalara erişim (GoogleSearchService.doGetCachedPage())
3- Kelime önerisi (GoogleSearchService.doSpellingSuggestion())

 

1- Google ile Web'de arama yapmak
    Aslında her gun kullandıgımız kısmı bu Google'nın. Bir çok parametre ile arama yapmak istedigimizi bu classla belirtiyoruz. Bu parametrelerin arasında ülke, dil gibi çok çeşitli kriterler bulunmakta, bunlar aşagıda belirtilmistir:
 

  • Key – Google tarafından bize özel verilen anahtar.
  • QueryTerm – Aradıgımız kelime, araştırma yaptigimiz şey, burada +, OR ve AND gibi araçlar kullana biliriz.
  • Start – Başlangıçta 0 olarak geliyor, hangi aralıktaki sonucu istedigimizi belirtiyoruz.
  • MaxResults – Dönebilecek en fazla sonuç sayısı bu deger 1 ile 10 arasında olabilir.
  • Filter – Eger "True" yapılırsa, mükerrer sonucları bulmaz, yani aynı hosttaki 2 ayri kayid yerine tek getirir.
  • Restricts – Ülke gibi çok çeşitli kısıtlamalar yapılabiliyor. detay için http://www.google.ca/apis/reference.html adresine bakılabilir.
  • SafeSearch – Eger "true" yapılırsa yetişkin koruması yapar, bazı içerikleri göstermez.
  • LanguageRestrict – Bir veya daha fazla dilde arama yapmak için.
  • InputEncoding – Bu kullanılmaya bilir çünkü butun encodingler artık UTF-8 ile yapılıyor.
  • OutputEncoding – Bu kullanılmaya bilir çünkü butun encodingler artık UTF-8 ile yapılıyor. 

Mesela bir aramanın sonuç sayısını almak için örnek kod aşagıdadır:

            private void searchButton_Click(object sender, System.EventArgs e)
               {
                  // Bir google arama objesi yaratıyoruz
                  Google.GoogleSearchService s = new Google.GoogleSearchService();

                  try
                   
 {
                        // arama methodumuzu cağırıyourz - bu parametreler makalede yukarıda detaylı anlatıldı
                        Google.GoogleSearchResult r = s.doGoogleSearch(keyBox.Text, searchBox.Text,
                             0, 1, false, "", false, "", "", "");

                        // tahmini sonuc sayısını yaklaşık olarak alıyoruz
                        int estResults = r.estimatedTotalResultsCount;
                       
// ver yazıyoruz
                        searchResultLabel.Text = Convert.ToString(estResults);
                     }

                 
// ya bir hata olursa
                  catch (System.Web.Services.Protocols.SoapException ex)
                  {
                        MessageBox.Show(ex.Message);
                  }
            }

Eger elde yanlızca sayısı istemiyorsak ve arama sonuclarini XML e almak istiyorsak, şöyle gerçekleştirebiliriz;

	// dönenleri bi XML dökümanı yapıyourz
	XmlDocument ResultXml = CreateXmlDocument(SearchResultXmlNode);

	// arama sonucları ekliyoruz

	StringValueOfObject(ResultXml.DocumentElement, SearchResult);

	// sonuc elemanlarını ve dizin kategorileri kök noktaya ekliyoruz
	XmlElement ResultElementsParentNode = AddChildElement(ResultXml.DocumentElement, "ResultElements");
	XmlElement CategoriesParentNode = AddChildElement(ResultXml.DocumentElement, "DirectoryCategories");

	// simdide hepsini
	foreach (Google.ResultElement ResultElement in SearchResult.resultElements)
		StringValueOfObject(ResultElementsParentNode, ResultElement);

	// ve butun dizinleriyle

	foreach (Google.DirectoryCategory DirectoryCategory in
SearchResult.directoryCategories)
		StringValueOfObject(CategoriesParentNode, DirectoryCategory);

 

2- Önbelleklenmiş sayfalara erişim

Google inernet üstündeki sayfaları indexlerken, indexledigi sayfaları o anki halini serverlarında tutar. Ve buna arama yaparken istersek görmemize izin ver. Bunlar yanlızca http sayfaları  olmadıgı gibi çok çeşitli dosyalarda olabilir, MS Word, PDF gibi. Elbette bu dosyaları yalın haliyle tutmuyor, onlar HTML formatında saklıyor. Biliyorsunuz bu konuda hiç kimse eline su dökemez.

public static void GetCachedPageAndSaveToFile(string PageUrl, string FileName)
{
      // bi servis ornegi yaratiyourz
      Google.GoogleSearchService GoogleService = new Google.GoogleSearchService();
      // cachelenen sayfanin icerigini alıyourz
      byte[] CachedPage = GoogleService.doGetCachedPage(Key, PageUrl);
      // bunu bi dosyaya yazmamız icin tanımlamak şart, byte oldugu icin FileWriter
      FileStream FileWriter = new FileStream(FileName, FileMode.Create);
      BinaryWriter Writer = new BinaryWriter(FileWriter);
      // streami kapatıp dosyayı yazıyoruz
      Writer.Write(CachedPage);
      Writer.Close();
      FileWriter.Close();
      // serbert bırakıyorz, GBC ye kalmadan
      GoogleService.Dispose();
}

 

Saklanılan sayfanın boyutunu ögrenmek içinse;

private void cacheButton_Click(object sender, System.EventArgs e)
{
      // Yeni bir arama objesi yaratıyoruz
      Google.GoogleSearchService s = new Google.GoogleSearchService();
      try
      {
            // sonucu getiriyourz
            System.Byte[] bytes = s.doGetCachedPage(keyBox.Text, cacheBox.Text);
            // cachelenen sayfanin uzunlugunu görüntülüyoruz
            cacheResultLabel.Text = Convert.ToString(bytes.Length);
      }
      catch (System.Web.Services.Protocols.SoapException ex)
      {
            MessageBox.Show(ex.Message);
      }
}

3- Kelime önerisi

Bazı zamanlar Google'da arama yaparken, kelimenin tam yazılışını bilmeye biliriz, Google bu devrede bize alternatif kelimeler onere biliyor, dogru kelimeyi aradıgımıza emin olmamız için. İşte aşagıdaki kod ile bize önerilerde bulundugu kelimeyi ögrene biliyoruz;

private void spellButton_Click(object sender, System.EventArgs e)
{
      // Bir arama objesi yaratıyoruz
      Google.GoogleSearchService s = new Google.GoogleSearchService();
      try
      {
            // vee soruyoruz
            String suggestion = s.doSpellingSuggestion(keyBox.Text, spellBox.Text);
            // eger bi alternatif varsa sonucu gostericez
            if (suggestion == null)
            spellResultLabel.Text = "<no suggestion>";
            else 
            spellResultLabel.Text = suggestion;
       }
            catch (System.Web.Services.Protocols.SoapException ex)
            {
                  MessageBox.Show(ex.Message);
            }
      }

Yukarıdaki bütün anlatılanların örnegi  http://www.google.com/apis/reference.html de mevcut, örnek program ektedir.

 

 

 

 

 

 

 


İyi çalışmalar diliyorum...

Api ve kaynak kodları