public static async Task <JObject> GetVideoJson(long id) { List <string> args = new List <string>() { "-J", "https://www.twitch.tv/videos/" + id, }; var data = await ExternalProgramExecution.RunProgram(@"yt-dlp", args.ToArray()); return(JObject.Parse(data.StdOut)); }
public static async Task <(RetrieveVideoResult result, IVideoInfo info)> RetrieveVideo(string id, string usernameIfNotInJson, bool wantCookies) { List <string> args = new List <string>() { "-j", "https://www.youtube.com/watch?v=" + id, }; if (wantCookies) { args.Add("--cookies"); args.Add(@"d:\cookies.txt"); } var data = await ExternalProgramExecution.RunProgram(@"yt-dlp", args.ToArray()); var json = JObject.Parse(data.StdOut); var parsed = ParseFromJson(json, false, usernameIfNotInJson); return(parsed.success ? RetrieveVideoResult.Success : RetrieveVideoResult.ParseFailure, parsed.info); }
public static async Task <List <IVideoInfo> > RetrieveVideosFromParameterString(string parameter, bool flat, string usernameIfNotInJson) { string raw = ""; try { List <string> args = new List <string>(); if (flat) { args.Add("--flat-playlist"); } args.Add("--ignore-errors"); args.Add("-J"); args.Add(parameter); ExternalProgramExecution.RunProgramReturnValue data = await ExternalProgramExecution.RunProgram(@"yt-dlp", args.ToArray()); raw = data.StdOut; } catch (ExternalProgramReturnNonzeroException ex) { // try anyway, this gets thrown when a video is unavailable for copyright reasons raw = ex.StdOut; } var json = JObject.Parse(raw); var entries = json["entries"]; List <IVideoInfo> list = new List <IVideoInfo>(); foreach (var entry in entries) { try { var d = ParseFromJson(entry, flat, usernameIfNotInJson); if (d.success) { list.Add(d.info); } } catch (Exception ex) { Console.WriteLine("Failed to parse video from Youtube: " + ex.ToString()); } } return(list); }