Ejemplo n.º 1
0
        public async Task <IEnumerable <Article> > GetTrendingAsync()
        {
            const string cacheKey       = "TrendingArticles";
            var          cachedArticles = _cache.Get <HashSet <Article> >(cacheKey);

            if (cachedArticles != null)
            {
                return(cachedArticles);
            }

            var trendingPages = await _googleAnalyticsClient.GetTrendingPagesAsync(byte.MaxValue).ConfigureAwait(false);

            var articles = await _articleRepository.GetOrderedByDateAsync().ConfigureAwait(false);

            var articleList           = articles.ToList();
            var top10TrendingArticles = new HashSet <Article>();

            foreach (var page in trendingPages)
            {
                var article = articleList.FirstOrDefault(a => page.Path.ToLower().Contains(a.Id.ToLower()));

                if (article == null)
                {
                    continue;
                }

                top10TrendingArticles.Add(article);

                if (top10TrendingArticles.Count == 10)
                {
                    break;
                }
            }

            _cache.Set(cacheKey, top10TrendingArticles, new CacheItemPolicy {
                AbsoluteExpiration = DateTimeOffset.Now.AddHours(24)
            });

            return(top10TrendingArticles);
        }
Ejemplo n.º 2
0
        public async Task <IEnumerable <PageResult> > GetTrendingPagesAsync(byte maxCount)
        {
            const string cacheKey     = "GoogleAnalyticsTrendingPages";
            var          cachedResult = _cache.Get <IEnumerable <PageResult> >(cacheKey);

            if (cachedResult != null)
            {
                return(cachedResult);
            }

            // Don't need to worry about concurrent writes to the cache
            var result = await _googleAnalyticsClient.GetTrendingPagesAsync(maxCount).ConfigureAwait(false);

            if (result != null)
            {
                _cache.Set(cacheKey, result, new CacheItemPolicy {
                    AbsoluteExpiration = DateTimeOffset.Now.AddHours(24)
                });
            }

            return(result);
        }