static void Main(string[] args) { RedditSharp.Reddit reddit = new RedditSharp.Reddit(); var user = reddit.GetUser("riseofbacon"); var posts = user.GetPosts(RedditSharp.Things.Sort.Top).Where(p => p.SubredditName == "DestinyTheGame").Take(3); foreach (var post in posts) { Console.WriteLine(post.Title); } Console.ReadLine(); }
private async Task<List<ImageLink>> GetImagesFromListing(Reddit reddit, IEnumerator<Post> listing, string outputPath, CancellationToken token) { var erroCount = 0; var posts = new List<Post>(); var links = new List<ImageLink>(); var users = new HashSet<string>(); var processedUsers = new HashSet<string>(); try { while (listing.MoveNext()) { token.ThrowIfCancellationRequested(); Console.WriteLine(); for (var i = 0; i < _perSubThreadLimit; i++) { if (_allAuthorsPosts) { if (!users.Contains(listing.Current.AuthorName) && !processedUsers.Contains(listing.Current.AuthorName)) { OutputLine($"Adding user to batch: {listing.Current.AuthorName}", true); users.Add(listing.Current.AuthorName); i = users.Count - 1; } } else { if (!listing.Current.Domain.Contains("imgur.com") || (!_nsfw && listing.Current.NSFW) || (_onlyNsfw && !listing.Current.NSFW)) { var suffix = listing.Current.NSFW ? " NSFW" : listing.Current.Url.DnsSafeHost; OutputLine($"Skipping non-imgur link: {listing.Current.Url} ({suffix})", true); continue; } posts.Add(listing.Current); } if (!listing.MoveNext()) break; } foreach (var user in users) { token.ThrowIfCancellationRequested(); OutputLine($"Getting all posts for user: {user}", true); var userPosts = reddit.GetUser(user).Posts.OrderByDescending(post => post.Score).Where(post => post.Url.DnsSafeHost.Contains("imgur.com")); if (_onlyNsfw) userPosts = userPosts.Where(x => x.NSFW); if (!_nsfw) userPosts = userPosts.Where(x => !x.NSFW); foreach (var userPost in userPosts) { token.ThrowIfCancellationRequested(); if (posts.Exists(x => x.Url == userPost.Url) || links.Exists(x => x.Url == userPost.Url.ToString())) continue; posts.Add(userPost); } processedUsers.Add(user); } users = new HashSet<string>(); OutputLine($"Batch returned: {posts.Count} posts.", true); var subName = string.Empty; for (var i = 0; i < posts.Count; i = i + _perSubThreadLimit) { var tasks = new List<Task>(); for (var j = 0; j < _perSubThreadLimit; j++) { if (posts.Count <= (i + j)) break; var post = posts[i + j]; tasks.Add(GetImgurImageOrAlbumFromUrl(post, outputPath, token)); } Task.WaitAll(tasks.ToArray()); links = tasks.Cast<Task<List<ImageLink>>>().Aggregate(links, (current, task) => CombineLinkLists(task.Result, current)); if (string.IsNullOrWhiteSpace(subName)) subName = links.First()?.Post.SubredditName; OutputLine($"Total Links found in {subName}: {links.Count()}"); } posts = new List<Post>(); } } catch (IndexOutOfRangeException e) { return links; } catch (Exception e) { if (e is OperationCanceledException || e is AggregateException) { throw new OperationCanceledException(); } OutputLine($"Error: {e.Message}"); erroCount++; if (erroCount > PostQueryErrorLimit) { throw; } } return links; }