15 Ocak 2012, 14:03
|
#1 |
Üyelik Tarihi: 12 Ocak 2012 Rep Puanı : 10 Rep Derecesi :  | Live Search XML Web Servisleri'ni Kullanarak Kendi Arama Motorunuzu Yaratın Hiç kendi arama motorunuzu programlamayı düşündünüz mü? Peki bu konuda hiç araştırma yaptınız mı? Emin olun hiç kolay bir iş değil. Onun yerine biraz kolaya kaçıp hazır arama motorlarından faydalanabiliriz. Gün geçtikçe gelişen Live arama motorunu kullanacağımız bu makalemizde ilk olarak arama motorunun XML web servislerini kullanabilmek için [Yanlizca 10 Saniyede Üye Olmak Için TIKLAYINIZ...] adresinden Create and Manage Application IDs bölümüne girerek kendimize bir AppID (Uygulama Kimliği) yaratmamız gerekiyor. Live Search AppID yaratma yolundayız. AppID yaratma yolunda ilerlediğimizde bizden LiveID kimlik bilgilerimiz isteniyor. Giriş yaptıktan sonra arama motorumuzu kullanacağımız uygulamamızla ilgili bir anahtar isim verdikten sonra AppID'mizi hemen alabiliyoruz. Live AppID'mizi uygulama ismi vererek alabiliyoruz. Tüm bu işlemleri tamamladıktan sonra artık [Yanlizca 10 Saniyede Üye Olmak Için TIKLAYINIZ...] adresindeki web servisini uygulamamızda kullanmaya başalayabiliriz. Projenize Solution Explorer içerisinde sağ tuş ile tıkladığınızda gelen menüden Add Web Reference seçeneğini seçerek tanımlama işlemlerini tamamlayabilirsiniz. Kullanacağımız web servisini projemize web reference olarak ekliyoruz. Live arama motoruna ait web servisini kullanırken özel sorgular hazırlayarak farklı arama filtreleri uygulama şansımız da var. Gelin, örneğimizde sadece üç site içerisinde arama yapan bir arama motoru oluşturalım. Kullanabileceğiniz filtreleme seçenekleri çok geniş olduğu için bu konuyu makalenin dahiline almayacağım, siz isterseniz [Yanlizca 10 Saniyede Üye Olmak Için TIKLAYINIZ...] adresinden geniş bilgi alabilirsiniz.
Kullanacağımız filtrelemede sadece belirli web siteleri içerisinde arama yaptırılarak sonuçların bize Live Search tarafından döndürülmesini istiyor olacağız. Bu nedenle ilk olarak yapacağım şey bize filtreleme sorgusunun metnini döndüren bir fonksiyon yazmak olacak. PHP- Kodu: Function SorguYarat(ByVal Aranan) As String Dim Writer As New System.Text.StringBuilder Writer.Append(Aranan) Writer.Append(" (") Writer.Append("site:") Writer.Append("yazgelistir.com") Writer.Append(" OR ") Writer.Append("site:") Writer.Append("nedirtv.com") Writer.Append(" OR ") Writer.Append("site:") Writer.Append("microsoft.com.tr") Writer.Append(")") Return Writer.ToString End Function
Yukarıda hazırlamış olduğumuz fonksiyon bir StringBuilder tanımlayarak verdiğimiz metinleri aranacak olan metnin sonuna ard arda ekliyor. Aslına bakarsanız yolladığımız sorgu bu kod içerisinde sabit fakat ben özellikle bu şekilde yaparak sizin bu kodu veritabanına bağlamanızı kolaylaştırmak istedim. Böylece sitelerinin isimlerini eklediğimiz kodları bir döngü içerisinde kullanarak veritabanınızdan gelen site adlarını sorguya ekleyerek, içerisinde arama yapılacak sitelerin listesini dinamik olarak veritabanında çekebilirsiniz.
Şimdi sıra geldi arama işlemini yapacak olan fonksiyonu. Ben fonksiyonumu bir DataTable döndürecek şekilde yazacağım. Böyle yaparak fonksiyonumu ileride direk bir Repeater veya GridView'e bağlamamı kolaylaştırıyorum. Fonksiyonun ana yapısını oluşturmadan içerisindeki kodları yazalım. ' PHP- Kodu: Verileri depolayacağımız sana tablomuzu oluşturuyoruz. Dim MyData As New DataTable("Sonuclar") Tablomuza toplam dört kolon ekleyeceğiz. MyData.Columns.Add(New DataColumn("Baslik")) MyData.Columns.Add(New DataColumn("Açıklama")) MyData.Columns.Add(New DataColumn("Görünen URL")) MyData.Columns.Add(New DataColumn("URL"))
Yukarıdaki kodlar ile MyData adında bir tablo yaratarak içerisine dört adet kolon ekliyorum. Bu kolonlardaki verileri yeri geldiğinde arama motorundan dönen sonuçlar ile dolduracağım. Live Search arama motorundan çok detaylı sonuçlar geliyor, isterseniz siz daha farklı kolonlar koyarak daha fazla veri alabilirsiniz. Benim için bu kadarı yeterli  PHP- Kodu: 'Arama motorumuzu tanımlıyoruz. Dim MySearchEngine As New MSNSearchService 'Arama talbeni değişkenimizi yaratıyoruz. Dim MySearchRequest As New SearchRequest
MySearchRequest.AppID = "Aldığınız AppID buraya yazılacak."
Kodumuzun bu bölümünde arama servisimizi tanımlıyor sonra da arama talebimize ait ana değişkenimizi tanımlayarak AppID'mizi atıyoruz. AppID olarak yukarıda bahsettiğimiz Live web sitesinden almış olduğunuz kendi AppID değerini yazmanız gerekiyor. PHP- Kodu: 'Aranacak kaynaklar için talep oluşturuyoruz. Dim MySourceRequest(0) As SourceRequest MySourceRequest(0) = New SourceRequest 'Kaç adet sonuç döneceğini fonksiyondan gelen parametre belirliyor. MySourceRequest(0).Count = Adet 'Sadece web ortamını arayacağız. MySourceRequest(0).Source = SourceType.Web 'Sonuçlardaki tüm bilgileri ve kolonları alıyoruz. MySourceRequest(0).ResultFields = ResultFieldMask.All 'Arama sorgumuzu aktarıyoruz. MySearchRequest.Query = SorguYarat(Aranan) 'Talebimizi talep listesine ekleyelim. MySearchRequest.Requests = MySourceRequest Aşağıdaki kültür bilgisini isterseniz değiştirebilirsiniz. MySearchRequest.CultureInfo = "tr-TR"
Bu bölüm biraz karışık gibi gözükebilir. Benim tavsiyem kod içerisine yazdığım yorum satırlarını okuyarak ilerlemeniz. Önemli birkaç nokta var. Bunlardan ilki MySourceRequest(0).Count = Adet tanımlamasında yatıyor. Buraya verdiğimiz Adet değişkeni bizim fonksiyonumuza parametre olarak verilen bir değişken olacak. Kabaca aradığımız bilgiye dair kaç adet sonuç almak istediğimizi aktarıyoruz. Bir sonraki satırda web içeriği aradığımızı özellikle belirtmemiz gerekiyor, malum Live Search ile resim gibi farklı içerikler aratmak da mümkün. ResultFields satırına geldiğimizde ise sonuçlara dair tüm bilgileri istediğimizi belirtiyoruz. Belki bu noktada biraz optimizasyona gidilerek kullanmayacağımız bilgileri istemeyebilirdik. Query özelliğine geldiğimizde ise daha önce yaratmış olduğumuz SorguYarat fonksiyonunu çalıştırarak sorgumuzu aramaya aktarıyoruz. Bu yapıda aslında istersek birden çok arama yaratarak bir talep listesi olarak topluca web servisine gönderebiliriz. Bizim örneğimizde aramaları tek tek göndereceğiz. En son satırda da arama yaptıracağımız dilin kültür bilgisini aktarıyoruz. PHP- Kodu: 'Sıra geldi sonuçları almaya. Dim MySearchResponse As New SearchResponse 'Aramamızı gönderip sonuçları alıyoruz.
MySearchResponse = MySearchEngine.Search(MySearchRequest)
Artık sıra geldi aramayı motora aktarmaya ve sonuçları almaya. Bir sonuç değişkeni tanımlayarak önceden tanımladığımız arama motoru değişkenimiz ile taleplerimizi XML web servisine gönderiyoruz. PHP- Kodu: 'Sonuçlar arasında gezerek kendi tablomuza aktaracağız. For Each IncResponse As SourceResponse In MySearchResponse.Responses Dim MyResults() As Result MyResults = IncResponse.Results Dim ResultRow As DataRow 'Sonuç sayısı sıfırdan yüksekse aktarmayı başlatalım. If IncResponse.Total > 0 Then For Each MyResult As Result In MyResults ResultRow = MyData.NewRow 'Tek tek gelen bilgileri kendi yarattığımız 'tablomuza döngü içerisinde satır satır ekliyoruz. ResultRow.Item(0) = MyResult.Title ResultRow.Item(1) = MyResult.Description ResultRow.Item(2) = MyResult.DisplayUrl ResultRow.Item(3) = MyResult.Url MyData.Rows.Add(ResultRow) Next End If Next
Gelen sonuçlar arasında bir For Each döngüsü ile dolaşırken bir yandan da sonuçlardaki bilgileri kendi yarattığımız tablomuza satır satır ekliyoruz. Tüm bu işlemler tamamlandıktan sonra fonksiyonumuz tablomuzu geri döndürüyor olacak. Fonksiyonumuz tam kodu aşağıdaki şekilde sonuçlanıyor. PHP- Kodu: Function Ara(ByVal Aranan As String, ByVal Adet As Integer) As DataTable 'Verileri depolayacağımız sana tablomuzu oluşturuyoruz. Dim MyData As New DataTable("Sonuclar") 'Tablomuza toplam dört kolon ekleyeceğiz. MyData.Columns.Add(New DataColumn("Baslik")) MyData.Columns.Add(New DataColumn("Açıklama")) MyData.Columns.Add(New DataColumn("Görünen URL")) MyData.Columns.Add(New DataColumn("URL")) 'Arama motorumuzu tanımlıyoruz. Dim MySearchEngine As New MSNSearchService 'Arama talbeni değişkenimizi yaratıyoruz. Dim MySearchRequest As New SearchRequest MySearchRequest.AppID = "Aldığınız AppID buraya yazılacak." 'Aranacak kaynaklar için talep oluşturuyoruz. Dim MySourceRequest(0) As SourceRequest MySourceRequest(0) = New SourceRequest 'Kaç adet sonuç döneceğini fonksiyondan gelen parametre belirliyor. MySourceRequest(0).Count = Adet 'Sadece web ortamını arayacağız. MySourceRequest(0).Source = SourceType.Web 'Sonuçlardaki tüm bilgileri ve kolonları alıyoruz. MySourceRequest(0).ResultFields = ResultFieldMask.All 'Arama sorgumuzu aktarıyoruz. MySearchRequest.Query = SorguYarat(Aranan) 'Talebimizi talep listesine ekleyelim. MySearchRequest.Requests = MySourceRequest 'Aşağıdaki kültür bilgisini isterseniz değiştirebilirsiniz. MySearchRequest.CultureInfo = "en-US" 'Sıra geldi sonuçları almaya. Dim MySearchResponse As New SearchResponse 'Aramamızı gönderip sonuçları alıyoruz. MySearchResponse = MySearchEngine.Search(MySearchRequest) 'Sonuçlar arasında gezerek kendi tablomuza aktaracağız. For Each IncResponse As SourceResponse In MySearchResponse.Responses Dim MyResults() As Result MyResults = IncResponse.Results Dim ResultRow As DataRow 'Sonuç sayısı sıfırdan yüksekse aktarmayı başlatalım. If IncResponse.Total > 0 Then For Each MyResult As Result In MyResults ResultRow = MyData.NewRow 'Tek tek gelen bilgileri kendi yarattığımız 'tablomuza döngü içerisinde satır satır ekliyoruz. ResultRow.Item(0) = MyResult.Title ResultRow.Item(1) = MyResult.Description ResultRow.Item(2) = MyResult.DisplayUrl ResultRow.Item(3) = MyResult.Url MyData.Rows.Add(ResultRow) Next End If Next 'Tablomuzu geri döndürüyoruz. Return MyData End Function
Aslında Live Search arama motoru ile ilgili işlemlerimiz tamamlandı. İsterseniz gelin şimdi hızlı bir şekilde yarattığımız fonksiyonu kullanmak üzere bir web sayfası hazırlayalım. Sayfamıza tasarım endişesi olmadan bir metin kutusu, arama işlemini başlatacak bir düğme ve bir de arama sonuçlarını hemen gösterecek GridView ekleyeceğiz. Tüm bunları bir UpdatePanel içerisine ekleyerek tüm sayfada AJAX kullanacağız. Profesyonel çalışmalarda benim tavsiyem arama sonuçlarını göstermek için GridView yerine güzel tasarlanmış bir Repeater kullanmanız ve tüm sayfayı kapsayacak UpdatePanel'lerden olabildiğince kaçmanız. Performans açısından pek anlamlı bir çözüm değil. Biz konumuza dönelim ve hemen uygulamaya geçelim. PHP- Kodu: <%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <div> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Ara" OnClick="Button1_Click" /><br /> <asp:GridView ID="GridView1" runat="server"> </asp:GridView> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>
Sayfamızın HTML kodu yukarıdaki şekilde olacak. Sunucu tarafındaki kodumuza baktığımızda ise hazırladığımız fonksiyonlar sayesinde aslında arama işleminin ne kadar kolaylaştığını görüyor olacaksınız. PHP- Kodu: Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) GridView1.DataSource = Ara(TextBox1.Text, 10) GridView1.DataBind() End Sub;
Gördüğünüz gibi yaptığımız tek şey hazırladığımzı Ara fonksiyonuna aranacak metni ve kaç tane sonuç istediğimizi parametre olarak vermek. Fonksiyon geriye bir DataTable döndüreceği için direk GridView'a bağlayabiliyoruz.
Projemizin code-behind sayfasında kodların tamamı aşağıdaki şekilde sonlanıyor. PHP- Kodu: Imports System.Data Imports com.msn.search.soap Partial Class _Default Inherits System.Web.UI.Page Function SorguYarat(ByVal Aranan) As String Dim Writer As New System.Text.StringBuilder Writer.Append(Aranan) Writer.Append(" (") Writer.Append("site:") Writer.Append("yazgelistir.com") Writer.Append(" OR ") Writer.Append("site:") Writer.Append("nedirtv.com") Writer.Append(" OR ") Writer.Append("site:") Writer.Append("microsoft.com.tr") Writer.Append(")") Return Writer.ToString End Function Function Ara(ByVal Aranan As String, ByVal Adet As Integer) As DataTable Dim MyData As New DataTable("Sonuclar") MyData.Columns.Add(New DataColumn("Baslik")) MyData.Columns.Add(New DataColumn("Açıklama")) MyData.Columns.Add(New DataColumn("Görünen URL")) MyData.Columns.Add(New DataColumn("URL")) Dim MySearchEngine As New MSNSearchService Dim MySearchRequest As New SearchRequest MySearchRequest.AppID = "Aldığınız AppID buraya yazılacak." Dim MySourceRequest(0) As SourceRequest MySourceRequest(0) = New SourceRequest MySourceRequest(0).Count = Adet MySourceRequest(0).Source = SourceType.Web MySourceRequest(0).ResultFields = ResultFieldMask.All MySearchRequest.Query = SorguYarat(Aranan) MySearchRequest.Requests = MySourceRequest MySearchRequest.CultureInfo = "en-US" Dim MySearchResponse As New SearchResponse MySearchResponse = MySearchEngine.Search(MySearchRequest) For Each IncResponse As SourceResponse In MySearchResponse.Responses Dim MyResults() As Result MyResults = IncResponse.Results Dim ResultRow As DataRow If IncResponse.Total > 0 Then For Each MyResult As Result In MyResults ResultRow = MyData.NewRow ResultRow.Item(0) = MyResult.Title ResultRow.Item(1) = MyResult.Description ResultRow.Item(2) = MyResult.DisplayUrl ResultRow.Item(3) = MyResult.Url MyData.Rows.Add(ResultRow) Next End If Next Return MyData End Function Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) GridView1.DataSource = Ara(TextBox1.Text, 10) GridView1.DataBind() End Sub End Class
Hepinize kolay gelsin. |
| |
| Sponsor Linkler (Lütfen Sitemize Destek Olmak İçin Günde Bir Kez Tıklayınız) |
| |