Пример #1
0
        /// <summary>
        /// Filters the by criteria.
        /// </summary>
        /// <param name="collection">The collection.</param>
        /// <param name="filter">The filter.</param>
        /// <param name="orderBy">The order by.</param>
        /// <returns></returns>
        public TweetDataContract FilterByCriteria(
            IQueryable <Tweet> collection,
            System.Linq.Expressions.Expression <Func <Tweet, bool> > filter = null,
            Func <IQueryable <Tweet>, IOrderedQueryable <Tweet> > orderBy   = null)
        {
            IQueryable <Tweet> resultSet = collection;

            TweetDataContract dataContract = new TweetDataContract();

            if (filter != null)
            {
                resultSet = resultSet.Where(filter);
            }

            if (orderBy != null)
            {
                resultSet = orderBy(resultSet);
            }

            dataContract.TimeLine = resultSet;

            // make sure Tweet Body is not empty
            dataContract.TotalTweets = resultSet.Where(i => i.Text != string.Empty).GroupBy(i => i.User.ScreenName)
                                       .Select(group => new
            {
                name  = group.Key,
                count = group.Count()
            }).ToDictionary(key => key.name, value => value.count);

            // make sure enitities -> userMentions are NOT empty
            dataContract.UserMentions = resultSet.Where(i => i.Entities.UserMentions != null).GroupBy(i => i.User.ScreenName)
                                        .Select(group => new
            {
                name  = group.Key,
                count = group.Sum(a => a.Entities.UserMentions.Count(w => w.ScreenName != @group.Key))
            }).ToDictionary(key => key.name, value => value.count);

            return(dataContract);
        }
Пример #2
0
        /// <summary>
        /// Gets the aggregated results.
        /// </summary>
        /// <param name="accounts">The accounts.</param>
        /// <returns></returns>
        public TweetDataContract GetAggregatedResults(string[] accounts)
        {
            for (int i = 0; i < accounts.Length; i++)
            {
                if (string.IsNullOrWhiteSpace(accounts[i]))
                {
                    throw new NoNullAllowedException("Not a valid account name");
                }
            }

            List <IEnumerable <Tweet> > timeLineCollection = accounts.Select(this.GetTweets).ToList();

            var mergedTimelines = this._twitterRepository.AggregateTimeLine(timeLineCollection);

            var twoWeeksAgo = DateTime.Now.AddDays(-14);

            // pass our conditions two weeks period and order by date
            TweetDataContract results =
                this._twitterRepository.FilterByCriteria(mergedTimelines,
                                                         a => a.CreatedAt >= twoWeeksAgo,
                                                         a => a.OrderByDescending(d => d.CreatedAt));

            return(results);
        }
Пример #3
0
        public ActionResult RawData()
        {
            TweetDataContract contract = this._service.GetAggregatedResults(this._accounts);

            return(Json(contract, JsonRequestBehavior.AllowGet));
        }
Пример #4
0
        // GET: /Home/
        public ActionResult Index()
        {
            TweetDataContract contract = this._service.GetAggregatedResults(this._accounts);

            return(View(contract));
        }