예제 #1
0
        /// <summary>
        /// Returns the hacker news on the website.
        /// </summary>
        /// <param name="filterField">.</param>
        /// <param name="filterOperation">.</param>
        /// <param name="orderByField">.</param>
        /// <param name="orderByFieldDesc">.</param>
        /// <param name="maxResultCount">.</param>
        /// <returns>.</returns>
        public async Task <IList <HackerNewsItem> > GetHackerNewsManualCleaner(HackerNewsFieldEnum filterField, HackerNewsFilterOperationEnum filterOperation, HackerNewsFieldEnum orderByField, bool orderByFieldDesc, int maxResultCount)
        {
            IList <HackerNewsItem> hackerNewsItemList;

            // Initialize http client
            using (HackerNewsClient hackerNewsClient = new HackerNewsClient())
            {
                // Get response from web site
                using (Stream hackerNewsHtmlContent = await hackerNewsClient.GetNewsAsStream())
                {
                    ManualHtmlTableParser dataManualScraping = new ManualHtmlTableParser();
                    hackerNewsItemList = await dataManualScraping.ScrapeHackerNewsHtmlContent(hackerNewsHtmlContent, maxResultCount);
                }
            }

            LambdaExpressionBuilder <HackerNewsItem> expressionBuilder = new LambdaExpressionBuilder <HackerNewsItem>();

            Expression <Func <HackerNewsItem, bool> >   filteringQuery = GetHackerNewsItemExpressionFilter(expressionBuilder, filterField, filterOperation);
            Expression <Func <HackerNewsItem, object> > sortingQuery   = GetHackerNewsItemExpressionSort(expressionBuilder, orderByField, orderByFieldDesc);

            // DEBUG: To check the final value
            if (filteringQuery != null)
            {
                hackerNewsItemList = hackerNewsItemList.Where(filteringQuery.Compile()).ToList();
            }

            if (sortingQuery != null)
            {
                if (orderByFieldDesc)
                {
                    hackerNewsItemList = hackerNewsItemList.OrderByDescending(sortingQuery.Compile()).ToList();
                }
                else
                {
                    hackerNewsItemList = hackerNewsItemList.OrderBy(sortingQuery.Compile()).ToList();
                }
            }

            return(hackerNewsItemList);
        }
예제 #2
0
        /// <summary>
        /// The GetHackerNewsItemExpressionFilter.
        /// </summary>
        /// <param name="expressionBuilder">The expressionBuilder<see cref="LambdaExpressionBuilder{HackerNewsItem}"/>.</param>
        /// <param name="filterField">The filterField<see cref="HackerNewsFieldEnum"/>.</param>
        /// <param name="filterOperation">The filterOperation<see cref="HackerNewsFilterOperationEnum"/>.</param>
        /// <returns>The <see cref="Expression{Func{HackerNewsItem, bool}}"/>.</returns>
        private Expression <Func <HackerNewsItem, bool> > GetHackerNewsItemExpressionFilter(LambdaExpressionBuilder <HackerNewsItem> expressionBuilder, HackerNewsFieldEnum filterField, HackerNewsFilterOperationEnum filterOperation)
        {
            IList <QueryFilter> queryFilterList = new List <QueryFilter>();

            var queryFilter = new QueryFilter
            {
                PropertyPath = filterField.GetDescription(),
            };

            if (filterOperation == HackerNewsFilterOperationEnum.MoreThanFiveWords)
            {
                queryFilter.Operator      = LambdaExpressionBuilder.Enums.OperatorEnum.GreaterThan;
                queryFilter.PropertyValue = "5";
            }

            if (filterOperation == HackerNewsFilterOperationEnum.MoreThanOrEqualToFiveWords)
            {
                queryFilter.Operator      = LambdaExpressionBuilder.Enums.OperatorEnum.GreaterThanOrEqualTo;
                queryFilter.PropertyValue = "5";
            }

            if (filterOperation == HackerNewsFilterOperationEnum.LessThanFiveWords)
            {
                queryFilter.Operator      = LambdaExpressionBuilder.Enums.OperatorEnum.LessThan;
                queryFilter.PropertyValue = "5";
            }

            if (filterOperation == HackerNewsFilterOperationEnum.LessThanOrEqualToFiveWords)
            {
                queryFilter.Operator      = LambdaExpressionBuilder.Enums.OperatorEnum.LessThanOrEqualTo;
                queryFilter.PropertyValue = "5";
            }

            queryFilterList.Add(queryFilter);

            return(expressionBuilder.BuildQueryFilteringExpression(queryFilterList));
        }
예제 #3
0
        /// <summary>
        /// Returns the hacker news on the website.
        /// </summary>
        /// <param name="filterField">.</param>
        /// <param name="filterOperation">.</param>
        /// <param name="orderByField">.</param>
        /// <param name="orderByFieldDesc">.</param>
        /// <param name="maxResultCount">.</param>
        /// <returns>.</returns>
        public async Task <IList <HackerNewsItem> > GetHackerNewsHtmlSanitizer(HackerNewsFieldEnum filterField, HackerNewsFilterOperationEnum filterOperation, HackerNewsFieldEnum orderByField, bool orderByFieldDesc, int maxResultCount)
        {
            IList <HackerNewsItem> hackerNewsItemList;

            // Initialize http client
            using (HackerNewsClient hackerNewsClient = new HackerNewsClient())
            {
                // Get response from web site
                string hackerNewsHtmlContent = await hackerNewsClient.GetNewsAsString();

                HtmlDocumentSanitizer dataManualScraping = new HtmlDocumentSanitizer();
                hackerNewsItemList = dataManualScraping.ScrapeHackerNewsHtmlContent(hackerNewsHtmlContent, maxResultCount);
            }

            hackerNewsItemList = FilterHackerNews(hackerNewsItemList, filterField, filterOperation, orderByField, orderByFieldDesc);

            return(hackerNewsItemList);
        }
예제 #4
0
        /// <summary>
        /// The FilterHackerNews.
        /// </summary>
        /// <param name="hackerNewsItemList">The hackerNewsItemList<see cref="IList{HackerNewsItem}"/>.</param>
        /// <param name="filterField">The filterField<see cref="HackerNewsFieldEnum"/>.</param>
        /// <param name="filterOperation">The filterOperation<see cref="HackerNewsFilterOperationEnum"/>.</param>
        /// <param name="orderByField">The orderByField<see cref="HackerNewsFieldEnum"/>.</param>
        /// <param name="orderByFieldDesc">The orderByFieldDesc<see cref="bool"/>.</param>
        /// <returns>The <see cref="IList{HackerNewsItem}"/>.</returns>
        private IList <HackerNewsItem> FilterHackerNews(IList <HackerNewsItem> hackerNewsItemList, HackerNewsFieldEnum filterField, HackerNewsFilterOperationEnum filterOperation, HackerNewsFieldEnum orderByField, bool orderByFieldDesc)
        {
            LambdaExpressionBuilder <HackerNewsItem> expressionBuilder = new LambdaExpressionBuilder <HackerNewsItem>();

            Expression <Func <HackerNewsItem, bool> >   filteringQuery = GetHackerNewsItemExpressionFilter(expressionBuilder, filterField, filterOperation);
            Expression <Func <HackerNewsItem, object> > sortingQuery   = GetHackerNewsItemExpressionSort(expressionBuilder, orderByField, orderByFieldDesc);

            // DEBUG: To check the final value
            if (filteringQuery != null)
            {
                hackerNewsItemList = hackerNewsItemList.Where(filteringQuery.Compile()).ToList();
            }

            if (sortingQuery != null)
            {
                if (orderByFieldDesc)
                {
                    hackerNewsItemList = hackerNewsItemList.OrderByDescending(sortingQuery.Compile()).ToList();
                }
                else
                {
                    hackerNewsItemList = hackerNewsItemList.OrderBy(sortingQuery.Compile()).ToList();
                }
            }

            return(hackerNewsItemList);
        }