public async Task <ActionResult> Search(string query) { if (string.IsNullOrEmpty(query)) { return(View(nameof(Index), null)); } if (string.IsNullOrEmpty(query.Trim())) { return(View(nameof(Index), null)); } SearchEngine[] searchEngines = await searchContext.SearchEngines.ToArrayAsync(); SearchExecutor searchExecutor = new SearchExecutor(); QueryResult queryResult = await searchExecutor.SearchAsync(searchEngines, query); if (queryResult == null) { return(View("Index", null)); } AnchorParser anchorParser = new AnchorParser(); Link[] links = anchorParser.ParseLinks(queryResult.SearchEngine.Domain, queryResult.SearchResult); if (links.Length > 0) { SearchQuery searchQuery = searchContext.SearchQueries.FirstOrDefault(sq => sq.Query == query); if (searchQuery != null) { RemoveRelatedSearchResults(searchQuery); } else { searchQuery = new SearchQuery() { Query = query, SearchDate = DateTime.Now, SearchEngineId = queryResult.SearchEngine.Id }; searchContext.SearchQueries.Add(searchQuery); await searchContext.SaveChangesAsync(); } if (links.Length > 10) { links = links.Take(10).ToArray(); } AddSearchResults(queryResult.SearchEngine, searchQuery, links); } return(View("Index", links)); }
public void ParserTest() { SearchExecutor searchExecutor = new SearchExecutor(); Task <QueryResult> queryResult = searchExecutor.SearchAsync(Yandex, "МСФО", new CancellationToken()); queryResult.Wait(); Assert.IsNotNull(queryResult.Result); Assert.IsNotNull(queryResult.Result.SearchResult); AnchorParser parser = new AnchorParser(); Link[] links = parser.ParseLinks(queryResult.Result.SearchEngine.Domain, queryResult.Result.SearchResult); Assert.IsNotNull(links); foreach (Link link in links) { Debug.WriteLine(link.URL); } Assert.IsTrue(links.Length > 10); }