Пример #1
0
        public async Task <ActionResult <HeadlinesResponse> > SearchHeadlines(
            [FromQuery(Name = "term")] string term,
            [FromHeader(Name = "annotation-session")] string sessionToken,
            [FromQuery(Name = "sentiment")] HeadlineSentiment sentiment = HeadlineSentiment.POSITIVE,
            [FromQuery(Name = "page")] int page   = 1,
            [FromQuery(Name = "limit")] int limit = 10)
        {
            if (page <= 0)
            {
                return(BadRequest("Page must be greater than 0"));
            }
            var offset = (page - 1) * limit;

            var headlines =
                await _headlineRepository.SearchHeadlines(sentiment, term, limit, offset);

            var count = await _headlineRepository.SearchHeadlinesCount(sentiment, term);

            foreach (var headline in headlines)
            {
                headline.Annotations = FilterHeadlineAnnotations(headline, sessionToken);
            }

            return(new HeadlinesResponse
            {
                Headlines = (System.Collections.Generic.IList <Models.DBModels.INewsHeadline>)headlines,
                Count = count
            });
        }
Пример #2
0
        public async Task <int> SearchHeadlinesCount(HeadlineSentiment sentiment, string term)
        {
            var isPositive     = sentiment == HeadlineSentiment.POSITIVE;
            var predictedClass = isPositive ? 1 : 0;

            var count = await _headlines
                        .Find(
                h => h.PredictedClass == predictedClass &&
                h.Headline.ToLower().Contains(term.ToLower())
                ).CountDocumentsAsync();

            return((int)count);
        }
Пример #3
0
        public async Task <int> FetchHeadlinesBySentimentCount(HeadlineSentiment sentiment, int dateOffset)
        {
            var predictedClass = sentiment == HeadlineSentiment.POSITIVE ? 1 : 0;
            var targetDate     = DateTime.Now.AddDays(-1 * dateOffset).Date;
            var endDate        = targetDate.AddDays(1).Date;

            var count = await _headlines
                        .Find(
                h => h.PublishedAt >= targetDate &&
                h.PublishedAt < endDate &&
                h.PredictedClass == predictedClass
                ).CountDocumentsAsync();

            return((int)count);
        }
Пример #4
0
        public async Task <IList <INewsHeadline> > SearchHeadlines(
            HeadlineSentiment sentiment, string term, int limit = 10, int offset = 0)
        {
            var isPositive     = sentiment == HeadlineSentiment.POSITIVE;
            var predictedClass = isPositive ? 1 : 0;

            var filter = _headlines
                         .Find(
                h => h.PredictedClass == predictedClass &&
                h.Headline.ToLower().Contains(term.ToLower())
                ).Limit(limit).Skip(offset);

            var headlines = isPositive ?
                            await filter.SortByDescending(h => h.SemanticValue).ToListAsync() :
                            await filter.SortBy(h => h.SemanticValue).ToListAsync();

            return(headlines.Cast <INewsHeadline>().ToList());
        }
Пример #5
0
        public async Task <ActionResult <HeadlinesResponse> > GetHeadlinesByDay(
            [FromQuery(Name = "sentiment")] HeadlineSentiment sentiment,
            [FromQuery(Name = "limit")] int limit, [FromQuery(Name = "page")] int page,
            [FromQuery(Name = "date")] DateTime dateTime,
            [FromHeader(Name = "annotation-session")] string sessionToken)
        {
            if (page <= 0)
            {
                return(BadRequest("Page must be greater than 0"));
            }

            var today = DateTime.Now;

            if (dateTime == new DateTime())
            {
                dateTime = today;
            }

            if (dateTime > today)
            {
                return(BadRequest("Date cannot be in the future"));
            }

            var dateOffset = (today - dateTime).TotalDays;
            var offset     = (page - 1) * limit;

            var headlines =
                await _headlineRepository.FetchHeadlinesBySentiment(sentiment, (int)dateOffset, limit, offset);

            var count = await _headlineRepository.FetchHeadlinesBySentimentCount(sentiment, (int)dateOffset);

            foreach (var headline in headlines)
            {
                headline.Annotations = FilterHeadlineAnnotations(headline, sessionToken);
            }

            return(new HeadlinesResponse
            {
                Headlines = headlines,
                Count = count
            });
        }
Пример #6
0
        public async Task <IList <INewsHeadline> > FetchHeadlinesBySentiment(
            HeadlineSentiment sentiment, int dateOffset, int limit = 10, int offset = 0)
        {
            var isPositive     = sentiment == HeadlineSentiment.POSITIVE;
            var predictedClass = isPositive ? 1 : 0;
            var targetDate     = DateTime.Now.AddDays(-1 * dateOffset).Date;
            var endDate        = targetDate.AddDays(1).Date;

            var filter = _headlines
                         .Find(
                h => h.PublishedAt >= targetDate &&
                h.PublishedAt < endDate &&
                h.PredictedClass == predictedClass
                ).Limit(limit).Skip(offset);

            var headlines = isPositive ?
                            await filter.SortByDescending(h => h.SemanticValue).ToListAsync() :
                            await filter.SortBy(h => h.SemanticValue).ToListAsync();

            return(headlines.Cast <INewsHeadline>().ToList());
        }