public async Task UpdateVideoDescriptionAsync() { if (Video == null) { return; } using var descriptionBuilder = new StringWriter(); foreach (var item in Items) { var tc = item.VideoTimeCode; descriptionBuilder.WriteLine($"{tc.Hours:00}:{tc.Minutes:00}:{tc.Seconds:00} - {item.Feedback.FeedbackStatus}: {item.Feedback.IssueTitle} {item.Feedback.FeedbackUrl}"); } var description = descriptionBuilder.ToString() .Replace("<", "(") .Replace(">", ")"); var service = await YouTubeServiceFactory.CreateAsync(); var listRequest = service.Videos.List("snippet"); listRequest.Id = Video.Id; var listResponse = await listRequest.ExecuteAsync(); var video = listResponse.Items[0]; video.Snippet.Description = description; var updateRequest = service.Videos.Update(video, "snippet"); await updateRequest.ExecuteAsync(); }
public static async Task <ApiReviewVideo> GetAsync(string channelId, DateTimeOffset start, DateTimeOffset end) { var service = await YouTubeServiceFactory.CreateAsync(); var result = new List <Video>(); var nextPageToken = ""; var searchRequest = service.Search.List("snippet"); searchRequest.ChannelId = channelId; searchRequest.Type = "video"; searchRequest.EventType = EventTypeEnum.Completed; searchRequest.PublishedAfter = start.DateTime; searchRequest.PublishedBefore = end.DateTime; searchRequest.MaxResults = 25; while (nextPageToken != null) { searchRequest.PageToken = nextPageToken; var response = await searchRequest.ExecuteAsync(); var ids = response.Items.Select(i => i.Id.VideoId); var idString = string.Join(",", ids); var videoRequest = service.Videos.List("snippet,liveStreamingDetails"); videoRequest.Id = idString; var videoResponse = await videoRequest.ExecuteAsync(); result.AddRange(videoResponse.Items); nextPageToken = response.NextPageToken; } var videos = result.Where(v => v.LiveStreamingDetails != null && v.LiveStreamingDetails.ActualStartTime != null && v.LiveStreamingDetails.ActualEndTime != null) .Select(CreateVideo) .OrderByDescending(v => v.Duration); return(videos.FirstOrDefault()); }