private List <SearchResultViewModel> ConvertYandexResultToViewModel(YandexSearchResultModel yandexResult) { var searchResults = new List <SearchResultViewModel>(); try { foreach (var item in yandexResult.Response.Results.Grouping.Group) { searchResults.Add(new SearchResultViewModel { ResultName = item.Doc.Domain, ResultUrl = item.Doc.Url, SearchEngine = SearchEngine.Yandex }); searchResults.Add(new SearchResultViewModel()); } } catch (NullReferenceException ex) { Console.WriteLine("There are some problems with converting Yandex search result to ViewModel - " + $"{ex.Message}"); } return(searchResults); }
public async Task <List <SearchResultViewModel> > SearchByPhraseInSearchEngine(string phraseForSearch, SearchEngine searchEngine) { List <SearchResultViewModel> searchResults = new List <SearchResultViewModel>(); using (var scope = _serviceProvider.CreateScope()) { var googleCustomSearchClient = scope.ServiceProvider.GetRequiredService <ISearchClient <GoogleSearchResultModel> >(); var bingCustomSearchClient = scope.ServiceProvider.GetRequiredService <ISearchClient <BingCustomSearchResponseModel> >(); var yandexXmlSearchClient = scope.ServiceProvider.GetRequiredService <ISearchClient <YandexSearchResultModel> >(); var searchResultRepository = scope.ServiceProvider.GetRequiredService <ISearchResultRepository>(); var searchEngineRepository = scope.ServiceProvider.GetRequiredService <ISearchEngineRepository>(); if (searchEngine == SearchEngine.Google) { //Add search engine to database if not exist and get id of existed search engine var googleDto = new SearchEngineDto { NameOfSearchEngine = "Google" }; var searchEngineId = await searchEngineRepository.AddSearchEngineToDbIfNotExistAsync(googleDto); googleDto = await searchEngineRepository.GetSearchEngineByIdAsync(searchEngineId); //Create request to Google custom search api and convert to ViewModel for returning in controller var googleSearchResult = await googleCustomSearchClient.SearchByPhrase(phraseForSearch); var googleSearchResultViewModel = ConvertGoogleResultToViewModel(googleSearchResult); searchResults = googleSearchResultViewModel; //Convert result to Dto and add the first result to database var googleSearchResultDto = ConvertGoogleResultToDto(googleSearchResult, googleDto); await searchResultRepository.AddResultToDbAsync(googleSearchResultDto[0]); } if (searchEngine == SearchEngine.Bing) { var bingDto = new SearchEngineDto { NameOfSearchEngine = "Bing" }; var searchEngineId = await searchEngineRepository.AddSearchEngineToDbIfNotExistAsync(bingDto); bingDto = await searchEngineRepository.GetSearchEngineByIdAsync(searchEngineId); var bingSearchResult = await bingCustomSearchClient.SearchByPhrase(phraseForSearch); var bingSearchResultViewModel = ConvertBingResultToViewModel(bingSearchResult); searchResults = bingSearchResultViewModel; var bingSearchResultDto = ConvertBingResultToDto(bingSearchResult, bingDto); await searchResultRepository.AddResultToDbAsync(bingSearchResultDto[0]); } if (searchEngine == SearchEngine.Yandex) { var yandexDto = new SearchEngineDto { NameOfSearchEngine = "Yandex" }; var searchEngineId = await searchEngineRepository.AddSearchEngineToDbIfNotExistAsync(yandexDto); yandexDto = await searchEngineRepository.GetSearchEngineByIdAsync(searchEngineId); YandexSearchResultModel yandexSearchResult = await yandexXmlSearchClient.SearchByPhrase(phraseForSearch); var yandexSearchResultViewModel = ConvertYandexResultToViewModel(yandexSearchResult); searchResults = yandexSearchResultViewModel; var yandexSearchResultDto = ConvertYandexResultToDto(yandexSearchResult, yandexDto); await searchResultRepository.AddResultToDbAsync(yandexSearchResultDto[0]); } } return(searchResults); }