Example #1
0
        public void GetSearchedArticlesTest()
        {
            var conn    = new WebApiConnection("https://hacker-news.firebaseio.com/v0/");
            var client  = new HackerNewsClient(conn);
            var request = new GetSearchedArticlesRequest
            {
                ArticleCount = 500,
                SearchTerm   = "the" // we are assuming at least one article will include the word "the", which may not always be the case
            };

            var response = client.GetSearchedArticles(request);

            response.Articles.Where(x => x.Headline.Contains(request.SearchTerm)).Count().ShouldBe(response.Articles.Count());
        }
        public IEnumerable <Article> Get(int source, string searchTerm)
        {
            var factory = new NewsClientFactory(_configuration);
            var client  = factory.GetClient((NewsClientSource)source);

            var request = new GetSearchedArticlesRequest
            {
                ArticleCount = int.Parse(_configuration["ArticleCount"]),
                SearchTerm   = searchTerm
            };

            var response = client.GetSearchedArticles(request);

            return(response.Articles);
        }
        /// <summary>
        /// Returns a collection of the latest articles that match a search string
        /// </summary>
        public GetSearchedArticlesResponse GetSearchedArticles(GetSearchedArticlesRequest request)
        {
            var apiClient = new WebApiClient(new Uri(Connection.BaseUrl));

            var taskGetIds = apiClient.Get <List <int> >("newstories.json");
            var dataIds    = taskGetIds.Result;
            var searchTerm = request.SearchTerm.ToLower();

            var articles = new List <Article>();

            foreach (var id in dataIds)
            {
                var taskGetItem = apiClient.Get <HackerNewsItem>($"item/{id}.json");
                var item        = taskGetItem.Result;

                if (item.Title.ToLower().Contains(searchTerm))
                {
                    var article = new Article
                    {
                        Headline = item.Title,
                        Url      = item.Url
                    };
                    articles.Add(article);
                }

                if (request.ArticleCount > 0 && articles.Count() >= request.ArticleCount)
                {
                    break;
                }
            }

            return(new GetSearchedArticlesResponse
            {
                Articles = articles
            });
        }