internal static string GetYoutubeUrl() { string id = GetVideo("youtube"); string url = "https://ytgrabber.p.rapidapi.com/app/get/" + id; YoutubeRespone youtube; using (HttpClient client = new HttpClient()) { client.DefaultRequestHeaders.Add("X-RapidAPI-Key", "DGN0v3Cft1mshsk7mpUF91dmRTOTp19kt6cjsn9cDqrtU4GFLS"); var response = client.GetStringAsync(new Uri(url)).Result; //youtube = JsonConvert.DeserializeObject<YoutubeRespone>(response); youtube = new YoutubeRespone(); JObject obj = JObject.Parse(response); youtube.Error = (string)obj["error"]; youtube.ThumbnailUrl = (string)obj["thumbnailUrl"]; youtube.Title = (string)obj["title"]; JArray links = (JArray)obj["link"]; youtube.Links = links.Select(c => { //JToken t_link = c["link"]; JToken t_type = c["type"]; JToken t_format = t_type["format"]; JToken t_quality = t_type["quality"]; JToken t_url = c["url"]; YoutubeVideoType type = new YoutubeVideoType((string)t_format, (string)t_quality); return(new Link(type, (string)t_url)); }).ToList(); } if (youtube == null) { return(""); } if (youtube.Links == null) { return(""); } if (!String.IsNullOrEmpty(youtube.Error)) { return(""); } var mp4 = youtube.Links.FindAll(v => v.Type.Format == "mp4"); foreach (var link in mp4) { if (link.Type.Quality.Contains("1080")) { return(link.URL); } else if (link.Type.Quality.Contains("720")) { return(link.URL); } else if (link.Type.Quality.Contains("360")) { return(link.URL); } } return(""); }
public YoutubeDownloadSlot(string src, string dst, bool audio, int resolution, YoutubeVideoType type) { URL = src; try { AllVideoInfo = DownloadUrlResolver.GetDownloadUrls(src); if (AllVideoInfo == null) { throw new Exception("Problem with VideoInfo list."); } if (audio) { try { CurrentVideoInfo = AllVideoInfo .Where(vi => vi.CanExtractAudio) .OrderByDescending(va => va.AudioBitrate) .First(); if (CurrentVideoInfo.RequiresDecryption) { DownloadUrlResolver.DecryptDownloadUrl(CurrentVideoInfo); } var filename = string.IsNullOrEmpty(CurrentVideoInfo.Title) ? src : CurrentVideoInfo.Title; filename = Regex.Replace(filename, @"[^a-zA-Z0-9-\.]", ""); Destination = Path.Combine(dst, filename + CurrentVideoInfo.AudioExtension); AudioClient = new AudioDownloader(CurrentVideoInfo, Destination); AudioClient.DownloadProgressChanged += (sender, args) => Progress = args.ProgressPercentage / 100; AudioClient.AudioExtractionProgressChanged += (sender, args) => Progress = args.ProgressPercentage / 100 + 1; AudioClient.DownloadFinished += (sender, args) => { Ready = true; Success = true; }; } catch { Message = "Audio only is not available. Falling back to video"; audio = false; } } if (!audio) { var filteredinfo = AllVideoInfo .Where(vi => vi.VideoType == (VideoType)type && vi.AudioType != AudioType.Unknown); CurrentVideoInfo = filteredinfo.First(vi => { if (filteredinfo.Any(vii => vii.Resolution == resolution)) { return(vi.Resolution == resolution); } else { return(vi.Resolution == filteredinfo.Max(vii => vii.Resolution)); } }); if (CurrentVideoInfo.RequiresDecryption) { DownloadUrlResolver.DecryptDownloadUrl(CurrentVideoInfo); } var filename = string.IsNullOrEmpty(CurrentVideoInfo.Title) ? src : CurrentVideoInfo.Title; filename = Regex.Replace(filename, @"[^a-zA-Z0-9-\.]", ""); Destination = Path.Combine(dst, filename + CurrentVideoInfo.VideoExtension); VideoClient = new VideoDownloader(CurrentVideoInfo, Destination); VideoClient.DownloadProgressChanged += (sender, args) => Progress = args.ProgressPercentage / 100; VideoClient.DownloadFinished += (sender, args) => { Ready = true; Success = true; }; } } catch (Exception e) { Ready = true; Error = true; Message = e.Message; } }