public static Bitmap CreateCollage(List<User> users, int height, int width) { const double minSliceRatio = 0.35; var threshold = users.Max(x => x.StatusesCount) / 20; var elements = users .Select(x => new Element<User> { Object = x, Value = x.StatusesCount < threshold ? threshold : x.StatusesCount }) .OrderByDescending(x => x.Value) .ToList(); var slice = Treemap.GetSlice(elements, 1, minSliceRatio); var rectangles = Treemap.GetRectangles(slice, width, height).ToList(); return DrawTreemap(rectangles, width, height); }
static async Task ShowFavoritesAsync(TwitterContext twitterCtx) { const int PerQueryFavCount = 200; // set from a value that you previously saved ulong sinceID = 1; var favsResponse = await (from fav in twitterCtx.Favorites where fav.Type == FavoritesType.Favorites && fav.Count == PerQueryFavCount select fav) .ToListAsync(); if (favsResponse == null) { Console.WriteLine("No favorites returned from Twitter."); return; } var favList = new List<Favorites>(favsResponse); // first tweet processed on current query ulong maxID = favList.Min(fav => fav.StatusID) - 1; do { favsResponse = await (from fav in twitterCtx.Favorites where fav.Type == FavoritesType.Favorites && fav.Count == PerQueryFavCount && fav.SinceID == sinceID && fav.MaxID == maxID select fav) .ToListAsync(); if (favsResponse == null || favsResponse.Count == 0) break; // reset first tweet to avoid re-querying the // same list you just received maxID = favsResponse.Min(fav => fav.StatusID) - 1; favList.AddRange(favsResponse); } while (favsResponse.Count > 0); favList.ForEach(fav => { if (fav != null && fav.User != null) Console.WriteLine( "Name: {0}, Tweet: {1}", fav.User.ScreenNameResponse, fav.Text); }); // save this in your db for this user so you can set // sinceID accurately the next time you do a query // and avoid querying the same tweets again. ulong newSinceID = favList.Max(fav => fav.SinceID); }