Bing Maps SOAP servisleriyle .Net uygulaması geliştirmek başlıklı yazımızın devamı niteliğinde olan bu yazıda da bir başka SOAP servisi olan Search Servisini incelemeye çalışacağız.
Servisin, uygulamaya nasıl dahil edileceğini bir önceki Geoscodes service yazısında incelemiştik. Aynı süreci işleterek uygulamaya servisi eklemek mümkündür. Bu yazıda da servisin amacından bahsetmeye çalıştım.
Search service kullanarak bir yerde bulmak istediğimiz şeyleri arayabiliriz. Örneğin bir şehirdeki hastane, postane, sushi, hamburger gibi aramaları yapmak mümkündür.
Kodda düzenleme (refactoring) yapılmamış olması, kodun okunabilirliğini biraz zora sokmuş olabilir. Aceleden dolayı kod bu şeklide kaldı.
Arama işlemlerini bir class üzerinden yürütmeye çalışalım. Arama sorgusu, Keyword ve Location şeklinde parametrelere göre oluşturulmaktadır.
Arama kriterini keyword ve location kelimelerini, noktalı virgülle ayırarak yapabiliriz.
Örneğin: “hospital;london” şeklinde hastaneleri aramak.
public class Search { public string SearchKeywordLocation(string keywordLocation) { String results = ""; String key = AppConfig.BingKey; SearchRequest searchRequest = new SearchRequest(); searchRequest.Credentials = new Credentials(); searchRequest.Credentials.ApplicationId = key; StructuredSearchQuery ssQuery = new StructuredSearchQuery(); string[] parts = keywordLocation.Split(';'); ssQuery.Keyword = parts[0]; ssQuery.Location = parts[1]; searchRequest.StructuredQuery = ssQuery; searchRequest.SearchOptions = new SearchOptions(); searchRequest.SearchOptions.Filters = new FilterExpression() { PropertyId = 3, CompareOperator = CompareOperator.GreaterThanOrEquals, FilterValue = 8.16 }; SearchServiceClient searchService = new SearchServiceClient(); SearchResponse searchResponse = searchService.Search(searchRequest); if (searchResponse.ResultSets[0].Results.Length > 0) { StringBuilder resultList = new StringBuilder(""); for (int i = 0; i < searchResponse.ResultSets[0].Results.Length; i++) { resultList.Append(String.Format("{0}. {1}\n", i + 1, searchResponse.ResultSets[0].Results[i].Name)); } results = resultList.ToString(); } else results = "No results found"; return results; } }
Arama kriterini böldüğümüz yer şurası:
StructuredSearchQuery ssQuery = new StructuredSearchQuery(); string[] parts = keywordLocation.Split(';'); ssQuery.Keyword = parts[0]; ssQuery.Location = parts[1]; searchRequest.StructuredQuery = ssQuery;
Servisi çalıştırdığımızda is sonucu şu şekilde alabiliriz.
Londra’daki hastaneleri bu şeklide listeleyebiliyoruz.