/// <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); }
/// <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); }
public ActionResult RawData() { TweetDataContract contract = this._service.GetAggregatedResults(this._accounts); return(Json(contract, JsonRequestBehavior.AllowGet)); }
// GET: /Home/ public ActionResult Index() { TweetDataContract contract = this._service.GetAggregatedResults(this._accounts); return(View(contract)); }