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