static Task Main(string[] args) { Console.WriteLine("Search the program languages!"); using IHost host = CreateHostBuilder(args).Build(); using IServiceScope serviceScope = host.Services.CreateScope(); IServiceProvider provider = serviceScope.ServiceProvider; var service = provider.GetRequiredService <ISearchEngineService>(); var queryText = Console.ReadLine(); var query = new SearchEngineQuery { Query = queryText }; var result = service.SearchAsync(query).Result; foreach (var item in result.Results) { Console.WriteLine($"SearchEngine: {item.SearchEngine}"); Console.WriteLine($"Programming Language Winner by Search Engine - Name: {item.ProgrammingLanguageWinner.Name}"); Console.WriteLine($"Programming Language Winner by Search Engine - PopularityAmount: {item.ProgrammingLanguageWinner.PopularityAmount}"); foreach (var language in item.ProgrammingLanguages) { Console.WriteLine($"Programming Language by Search Engine - Name: {language.Name}"); Console.WriteLine($"Programming Language by Search Engine - PopularityAmount: {language.PopularityAmount}"); } } Console.WriteLine($"TotalWinner: {result.TotalWinner}"); return(host.RunAsync()); }
public async Task Given_ValidParametersJavaAndDotNet_When_SearchAsync_Then_ReturnDotnetAsTotalWinner() { //Arrange var searchEngineResults = SeedData.GetSearchEngineResults(); mockRepository.Setup(x => x.GetSearchEngineResultByProgrammingLanguageAsync(It.IsAny <string>())) .ReturnsAsync(searchEngineResults); var query = new SearchEngineQuery { Query = "java .net" }; //Act var result = await service.SearchAsync(query); //Assert Assert.AreEqual("DotNet", result.TotalWinner); }
public async Task <FinalResultVM> SearchAsync(SearchEngineQuery searchEngineQuery) { if (searchEngineQuery == null || string.IsNullOrWhiteSpace(searchEngineQuery.Query)) { throw new Exception("The query value is invalid"); } searchEngineQuery.Query = searchEngineQuery.Query.Trim(new Char[] { '"', '/' }); string[] words = searchEngineQuery.Query.Split(' '); var results = new List <SearchEngineResult>(); foreach (var programmingLanguageQuery in words) { var searchEngineResults = await searchEngineRepository.GetSearchEngineResultByProgrammingLanguageAsync(programmingLanguageQuery); searchEngineResults.ForEach(x => ValidatingDuplicatingSearchEnginesResults(results, x)); } var finalResultVM = new FinalResultVM(results); return(finalResultVM); }
/// <summary> /// Perform a Google search based on a search criteria /// </summary> /// <param name="searchCriteria">Search criteria</param> /// <returns>SearchEngineQuery object</returns> public async Task <SearchEngineQuery> Search(string searchCriteria) { string cxCode = Settings.Default.GoogleCxCode; string apiKey = Settings.Default.GoogleApiKey; string urlAddress = Settings.Default.GoogleURLBase; string searchResponse; ResponseGoogle objResponse; SearchEngineQuery result = new SearchEngineQuery(); using (var client = new HttpClient()) { try { //Validation if (string.IsNullOrWhiteSpace(searchCriteria)) { throw new Exception("Search criteria is empty or null"); } //Call service engine service client.BaseAddress = new Uri(urlAddress); HttpResponseMessage response = await client.GetAsync($"{Settings.Default.GoogleServicePath}?key={apiKey}&cx={cxCode}&q={searchCriteria}"); response.EnsureSuccessStatusCode(); //Process content of response searchResponse = await response.Content.ReadAsStringAsync(); objResponse = JsonConvert.DeserializeObject <ResponseGoogle>(searchResponse); //Collect data result.Status = (short)ProcessStatus.Success; result.SearchEngine = nameof(SearchEngine.Google); result.TotalResults = long.Parse(objResponse.SearchInformation.TotalResults); } catch (Exception) { throw; } } return(result); }
/// <summary> /// Perform a Bing search based on a search criteria /// </summary> /// <param name="searchCriteria">keyword</param> /// <returns>SearchEngineQuery object</returns> public async Task <SearchEngineQuery> Search(string searchCriteria) { string urlBase = Settings.Default.BingURLBase; string customConfigurationId = Settings.Default.BingCustomConfiguration; string accessKey = Settings.Default.BingAccessKey; string searchResponse; ResponseBing objResponse; SearchEngineQuery result = new SearchEngineQuery(); using (var client = new HttpClient()) { try { //Validation if (string.IsNullOrWhiteSpace(searchCriteria)) { throw new Exception("Search criteria is empty or null"); } //Call service engine service client.BaseAddress = new Uri(urlBase); client.DefaultRequestHeaders.Add(Settings.Default.BingServiceHeader, accessKey); var response = await client.GetAsync($"{Settings.Default.BingServicePath}?q={searchCriteria}&customconfig={customConfigurationId}"); response.EnsureSuccessStatusCode(); //Process content of response searchResponse = await response.Content.ReadAsStringAsync(); objResponse = JsonConvert.DeserializeObject <ResponseBing>(searchResponse); //Collect data result.Status = (short)ProcessStatus.Success; result.SearchEngine = nameof(SearchEngine.Bing); result.TotalResults = objResponse.WebPages.TotalEstimatedMatches; } catch (Exception) { throw; } } return(result); }