Example #1
0
        public async Task <SearchResult> PerformSearchAsync(SearchRequestModel searchModel)
        {
            var config = _appOptions.SearchSources.SingleOrDefault(ss => ss.Matches(searchModel.SearchSource));

            if (config == null)
            {
                return(new SearchResult
                {
                    Success = false,
                    Reason = FailureReason.NotSupported
                });
            }

            var results = await _searchExecutor.DoSearchAsync(new SearchExecutionModel
            {
                SearchUrl                   = config.SearchUrl,
                ResultXPathExpression       = config.ResultXPathExpression,
                ResultHeaderXPathExpression = config.ResultHeaderXPathExpression,
                Query = searchModel.Query
            });

            var matchingItems = results
                                .SearchResultItems
                                .Where(i => i.Attributes["href"].Contains(searchModel.UrlPartMatch))
                                .ToList();

            return(new SearchResult
            {
                SearchResultItems = matchingItems
            });
        }