Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 5
0
        /// <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);
        }