public List <RedditSubmission> Read(int readCount) { var list = new List <RedditSubmission>(); try { SyndicationFeed feed = SyndicationFeed.Load(XmlReader.Create(RedditRSSBotData.FeedUrl)); var items = feed.Items.OrderByDescending(x => x.PublishDate).Take(readCount); foreach (var item in items) { var rs = new RedditSubmission(); rs.Title = item.Title.Text; var link = item.Links.FirstOrDefault(); rs.Url = link != null?link.Uri.ToString() : null; rs.RedditRSSBotData = RedditRSSBotData; rs.TimeSubmitted = DateTime.Now; list.Add(rs); } } catch (Exception) { OnSendMessage("Error reading feed: " + RedditRSSBotData.FeedUrl); } return(list); }
private QueueItem MakeQueueItem(RedditSubmission submission, Guid destinationWorkspaceId) { try { var item = new ImmediateWorkspaceQueueItem() { SourceUri = null, TargetUri = new Uri(submission.Url), StatusUpdate = QueueItemStatusUpdate, DestinationWorkspaceId = destinationWorkspaceId, ReadTimeoutInMilliseconds = 120000, // big Tags = Utility.MakeTags(submission.LinkFlairText.Split(',')).ToArray(), CanBeDiscarded = false }; return(item); } catch (Exception ex) { Utility.LogException(ex); return(null); } }
protected async Task <bool> CreateCompilationAsync(TimePeriod timePeriod) { Console.WriteLine($"Creating YouTube {timePeriod.ToString().ToLower()} compilation for the \"{ChannelName}\" channel"); DateTime start = DateTime.UtcNow; List <RedditSubmission> redditSubmissions = await _redditManager. ObtainTopAsync(RedditSub, "clips.twitch.tv", timePeriod, timePeriod != TimePeriod.Day); if (redditSubmissions.Count == 0) { Console.WriteLine("No submissions found on /r/" + RedditSub); return(false); } List <TwitchClip> twitchClips = new List <TwitchClip>(); TimeSpan contentLength = new TimeSpan(); for (int i = 0; i < redditSubmissions.Count && contentLength <= TimeSpan.FromSeconds(610); i++) // 10+ min vids { RedditSubmission submission = redditSubmissions.ElementAt(i); TwitchClip clip = _twitchManager.DownloadClip(submission.Title, submission.Url.AbsolutePath); if (clip != null) { twitchClips.Add(clip); contentLength = contentLength.Add(_videoManager.GetVideoLength(clip.LocalLocation)); } } List <string> clipPaths = twitchClips.Select(x => x.LocalLocation).ToList(); if (UseOutro) { clipPaths.Add(OutroPath); } string compilationPath = _videoManager.CreateCompilationVideo($"{ChannelName}_" + $"{timePeriod.ToString()}_{start.Year}-{start.Month}-{start.Day}-{start.Hour}", clipPaths); BuildVideoDetails(timePeriod, compilationPath, OutroPath, twitchClips, contentLength, out string title, out string description, out List <string> youtubeTags); RemoveClips(twitchClips); _youtubeManager.UploadVideoAsync(ChannelName, title, description, youtubeTags.ToArray(), compilationPath).Wait(); Console.WriteLine("Deleting compilation video from local disk and storing creation-entry in DB"); try { File.Delete(compilationPath); } catch (Exception e) { Console.WriteLine(e); } _database.StoreUploadEntry(ChannelName, title, timePeriod, start); Console.WriteLine($"Finished proccess: Created and uploaded twitch " + $"{timePeriod.ToString().ToLower()} compilation '{title}' at {start.ToString()}"); return(true); }
public void Submit(RedditSubmission rs) { //submit if not already submitted if (!LastSubmitted.Any(x => x.Equals(rs))) { //need to try storing this instead of doing it on every submit. might need to do it anyway though. var username = rs.RedditRSSBotData.RedditUser.Username; var password = rs.RedditRSSBotData.RedditUser.Password; var subreddit = rs.RedditRSSBotData.Subreddit; var loginData = Login(username, password); if (!string.IsNullOrEmpty(loginData.modhash)) { var parameters = ""; parameters += "kind=link"; parameters += "&url=" + HttpUtility.UrlEncode(rs.Url); parameters += "&title=" + HttpUtility.UrlEncode(rs.Title); parameters += "&sr=" + HttpUtility.UrlEncode(subreddit); parameters += "&r=" + HttpUtility.UrlEncode(subreddit); parameters += "&uh=" + HttpUtility.UrlEncode(loginData.modhash); var cookies = new CookieContainer(); var cookie = new Cookie("reddit_session", HttpUtility.UrlEncode(loginData.cookie), "/api/submit", "reddit.com"); cookie.Secure = false; cookie.Expires = DateTime.MinValue; cookies.Add(cookie); var tryAgainMessageReceieved = true; string response = null; while (tryAgainMessageReceieved) { response = HttpPost(REDDIT_URI, parameters, cookies); if (response.Contains("try again in")) { tryAgainMessageReceieved = true; //this line yet untested //var tryAgainMinutes = int.Parse(response.Substring(response.IndexOf("try again in "), 14)); var tryAgainMinutes = 3; Thread.Sleep(tryAgainMinutes * 60 * 1000); OnSendMessage("Trying to submit too much, trying again in " + tryAgainMinutes + " minutes"); } else if (response.Contains("that link has already been submitted")) { tryAgainMessageReceieved = false; OnSendMessage("This link has already been submitted: /r/" + subreddit + " Title: " + rs.Title + " url: " + rs.Url); } else { tryAgainMessageReceieved = false; OnSendMessage("Post submitted: /r/" + subreddit + " Title: " + rs.Title + " url: " + rs.Url); } } LastSubmitted.Enqueue(rs); if (LastSubmitted.Count > SubmissionsToStore) { LastSubmitted.Dequeue(); } } else { OnSendMessage("Login failed"); } } else { OnSendMessage("Link already submitted."); } }