Esempio n. 1
0
        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;
            }
        }