public static List <YouTubeVideoQuality> GetYouTubeVideoUrls(params string[] videoUrls)
        {
            List <YouTubeVideoQuality> urls = new List <YouTubeVideoQuality>();

            foreach (var VideoUrl in videoUrls)
            {
                string html  = Helper.DownloadWebPage(VideoUrl);
                string title = GetTitle(html);
                // foreach (var videoLink in ExtractUrls(html))
                foreach (var videoLink in NewMethod.GetUrl(VideoUrl))
                {
                    YouTubeVideoQuality q = new YouTubeVideoQuality();
                    q.VideoUrl    = VideoUrl;
                    q.VideoTitle  = title;
                    q.DownloadUrl = videoLink + "&title=" + title;

                    if (!GetSize(q))
                    {
                        continue;
                    }

                    q.Length = long.Parse(Regex.Match(html, "\"length_seconds\":(.+?),", RegexOptions.Singleline).Groups[1].ToString());
                    bool IsWide = IsWideScreen(html);

                    if (GetQuality(q, IsWide))
                    {
                        urls.Add(q);
                    }
                }
            }
            return(urls);
        }
Ejemplo n.º 2
0
        public static List<YouTubeVideoQuality> GetYouTubeVideoUrls(params string[] VideoUrls)
        {
            List<YouTubeVideoQuality> urls = new List<YouTubeVideoQuality>();
            foreach (var VideoUrl in VideoUrls)
            {
                string html = Helper.DownloadWebPage(VideoUrl);
                string title = GetTitle(html);
                foreach (var videoLink in ExtractUrls(html))
                {
                    YouTubeVideoQuality q = new YouTubeVideoQuality();
                    q.VideoUrl = VideoUrl;
                    q.VideoTitle = title;
                    q.DownloadUrl = videoLink + "&title=" + title;

                    try{
                        getSize(q);
                    }
                    catch (Exception ee)
                    {
                        throw;
                    }
                    if (getQuality(q))
                        urls.Add(q);
                }
            }
            return urls;
        }
        private static bool GetSize(YouTubeVideoQuality q)
        {
            try
            {
                HttpWebRequest fileInfoRequest = (HttpWebRequest)HttpWebRequest.Create(q.DownloadUrl);
                fileInfoRequest.Proxy = Helper.InitialProxy();
                HttpWebResponse fileInfoResponse = (HttpWebResponse)fileInfoRequest.GetResponse();
                long            bytesLength      = fileInfoResponse.ContentLength;

                fileInfoRequest.Abort();

                if (bytesLength != -1)
                {
                    q.SetSize(bytesLength);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception)
            {
                return(false);
            }
        }
Ejemplo n.º 4
0
 public static List<YouTubeVideoQuality> GetYouTubeVideoUrls(params string[] VideoUrls)
 {
     List<YouTubeVideoQuality> urls = new List<YouTubeVideoQuality>();
     foreach (var VideoUrl in VideoUrls)
     {
         string html = Helper.DownloadWebPage(VideoUrl);
         string title = GetTitle(html);
         foreach (var videoLink in ExtractUrls(html))
         {
             YouTubeVideoQuality q = new YouTubeVideoQuality();
             q.VideoUrl = VideoUrl;
             q.VideoTitle = title;
             q.DownloadUrl = videoLink + "&title=" + title;
             if (!getSize(q))continue ;
             q.Length = long.Parse(Regex.Match(html, "\"length_seconds\":(.+?),", RegexOptions.Singleline).Groups[1].ToString());
             bool IsWide = IsWideScreen(html);
             if (getQuality(q, IsWide))
                 urls.Add(q);
         }
     }
     return urls;
 }
        public static List<YouTubeVideoQuality> GetYouTubeVideoUrls(string videoUrl)
        {
            var list = new List<YouTubeVideoQuality>();

            var id = GetVideoIDFromUrl(videoUrl);
            var infoUrl = string.Format("http://www.youtube.com/get_video_info?&video_id={0}&el=detailpage&ps=default&eurl=&gl=US&hl=en", id);
            var infoText = new WebClient().DownloadString(infoUrl);
            var infoValues = HttpUtility.ParseQueryString(infoText);
            var title = infoValues["title"];
            var videoDuration = infoValues["length_seconds"];
            var videos = infoValues["url_encoded_fmt_stream_map"].Split(',');
            foreach (var item in videos)
            {
                try
                {
                    var data = HttpUtility.ParseQueryString(item);
                    var server = Uri.UnescapeDataString(data["fallback_host"]);
                    var signature = data["sig"] ?? data["signature"];
                    var url = Uri.UnescapeDataString(data["url"]) + "&fallback_host=" + server;
                    if (!string.IsNullOrEmpty(signature))
                        url += "&signature=" + signature;
                    var size = GetSize(url);
                    var videoItem = new YouTubeVideoQuality();
                    videoItem.DownloadUrl = url;
                    videoItem.VideoSize = size;
                    videoItem.VideoTitle = title;
                    var tagInfo = new TagInfo(Uri.UnescapeDataString(data["itag"]));
                    videoItem.Dimension = tagInfo.VideoDimensions;
                    videoItem.Extention = tagInfo.VideoExtentions;
                    videoItem.Length = long.Parse(videoDuration);
                    list.Add(videoItem);
                }
                catch { }
            }

            return list;
        }
Ejemplo n.º 6
0
 private static bool getSize(YouTubeVideoQuality q)
 {
     try
     {
         HttpWebRequest fileInfoRequest = (HttpWebRequest)HttpWebRequest.Create(q.DownloadUrl);
         HttpWebResponse fileInfoResponse = (HttpWebResponse)fileInfoRequest.GetResponse();
         long bytesLength = fileInfoResponse.ContentLength;
         fileInfoRequest.Abort();
         if (bytesLength != -1)
         {
             q.SetSize(bytesLength);
             return true;
         }
         else return false;
     }
     catch (Exception)
     {
         return false;
     }
 }
Ejemplo n.º 7
0
        private static bool getQuality(YouTubeVideoQuality q, Boolean _Wide)
        {
            int iTagValue;
            string itag = Regex.Match(q.DownloadUrl, @"itag=([1-9]?[0-9]?[0-9])", RegexOptions.Singleline).Groups[1].ToString();
            if (itag != "")
            {
                if (int.TryParse(itag, out iTagValue) == false)
                    iTagValue = 0;

                switch (iTagValue)
                {
                    case 5: q.SetQuality("flv", new Size(320, (_Wide ? 180 : 240))); break;
                    case 6: q.SetQuality("flv", new Size(480, (_Wide ? 270 : 360))); break;
                    case 17: q.SetQuality("3gp", new Size(176, (_Wide ? 99 : 144))); break;
                    case 18: q.SetQuality("mp4", new Size(640, (_Wide ? 360 : 480))); break;
                    case 22: q.SetQuality("mp4", new Size(1280, (_Wide ? 720 : 960))); break;
                    case 34: q.SetQuality("flv", new Size(640, (_Wide ? 360 : 480))); break;
                    case 35: q.SetQuality("flv", new Size(854, (_Wide ? 480 : 640))); break;
                    case 36: q.SetQuality("3gp", new Size(320, (_Wide ? 180 : 240))); break;
                    case 37: q.SetQuality("mp4", new Size(1920, (_Wide ? 1080 : 1440))); break;
                    case 38: q.SetQuality("mp4", new Size(2048, (_Wide ? 1152 : 1536))); break;
                    case 43: q.SetQuality("webm", new Size(640, (_Wide ? 360 : 480))); break;
                    case 44: q.SetQuality("webm", new Size(854, (_Wide ? 480 : 640))); break;
                    case 45: q.SetQuality("webm", new Size(1280, (_Wide ? 720 : 960))); break;
                    case 46: q.SetQuality("webm", new Size(1920, (_Wide ? 1080 : 1440))); break;
                    case 82: q.SetQuality("3D.mp4", new Size(480, (_Wide ? 270 : 360))); break;        // 3D
                    case 83: q.SetQuality("3D.mp4", new Size(640, (_Wide ? 360 : 480))); break;        // 3D
                    case 84: q.SetQuality("3D.mp4", new Size(1280, (_Wide ? 720 : 960))); break;       // 3D
                    case 85: q.SetQuality("3D.mp4", new Size(1920, (_Wide ? 1080 : 1440))); break;     // 3D
                    case 100: q.SetQuality("3D.webm", new Size(640, (_Wide ? 360 : 480))); break;      // 3D
                    case 101: q.SetQuality("3D.webm", new Size(640, (_Wide ? 360 : 480))); break;      // 3D
                    case 102: q.SetQuality("3D.webm", new Size(1280, (_Wide ? 720 : 960))); break;     // 3D
                    case 120: q.SetQuality("live.flv", new Size(1280, (_Wide ? 720 : 960))); break;    // Live-streaming - should be ignored?
                    default: q.SetQuality("itag-" + itag, new Size(0, 0)); break;       // unknown or parse error
                }
                return true;
            } return false;
        }
Ejemplo n.º 8
0
        private static bool getSize(YouTubeVideoQuality q)
        {
            try
            {
                HttpWebRequest fileInfoRequest = (HttpWebRequest)HttpWebRequest.Create(q.DownloadUrl);
                //fileInfoRequest.ServicePoint.ConnectionLimit = 20;
                //fileInfoRequest.Method = "HEAD";
                //fileInfoRequest.KeepAlive = true;
                HttpWebResponse fileInfoResponse = (HttpWebResponse)fileInfoRequest.GetResponse();

                long bytesLength = fileInfoResponse.ContentLength;
                fileInfoRequest.Abort();

                if (bytesLength != -1)
                {
                    q.SetSize(bytesLength);
                    return true;
                }
                else return false;
            }
            catch (Exception)
            {
                throw;
            }
        }
Ejemplo n.º 9
0
 private static bool getQuality(YouTubeVideoQuality q)
 {
     if (q.DownloadUrl.Contains("itag=5"))
         q.SetQuality("flv", new Size(320, 240));
     else if (q.DownloadUrl.Contains("itag=34"))
         q.SetQuality("flv", new Size(400, 226));
     else if (q.DownloadUrl.Contains("itag=6"))
         q.SetQuality("flv", new Size(480, 360));
     else if (q.DownloadUrl.Contains("itag=35"))
         q.SetQuality("flv", new Size(640, 380));
     else if (q.DownloadUrl.Contains("itag=18"))
         q.SetQuality("mp4", new Size(480, 360));
     else if (q.DownloadUrl.Contains("itag=22"))
         q.SetQuality("mp4", new Size(1280, 720));
     else if (q.DownloadUrl.Contains("itag=37"))
         q.SetQuality("mp4", new Size(1920, 1280));
     else if (q.DownloadUrl.Contains("itag=38"))
         q.SetQuality("mp4", new Size(4096, 72304));
     else return false;
     return true;
 }
Ejemplo n.º 10
0
        private void btnDownload_Click(object sender, EventArgs e)
        {
            string path = string.Empty;

            try
            {
                path = cbSaveTo.Text;

                if (path == string.Empty)
                {
                    MessageBox.Show(this, "Download path is empty.");
                    return;
                }

                if (!Directory.Exists(path))
                {
                    if (MessageBox.Show(this, "Download path doesn't exists.\n\nDo you want to create it?") == DialogResult.Yes)
                    {
                        Directory.CreateDirectory(path);
                    }
                    else
                    {
                        return;
                    }
                }

                if (!cbSaveTo.Items.Contains(path))
                {
                    cbSaveTo.Items.Add(path);
                }
            }
            catch
            {
                MessageBox.Show("Couldn't create directory.");
                return;
            }

            try
            {
                YouTubeVideoQuality tempItem = cbQuality.SelectedItem as YouTubeVideoQuality;
                string filename = string.Format("{0}.{1}", FormatTitle(tempItem.VideoTitle), tempItem.Extension);

                if (File.Exists(Path.Combine(path, filename)))
                {
                    DialogResult result = MessageBox.Show(this, "File '" + filename + "' already exists\n\nOverwrite?", "Overwrite?", MessageBoxButtons.YesNo);

                    if (result == DialogResult.Yes)
                    {
                        File.Delete(Path.Combine(path, filename));
                    }
                    else if (result == DialogResult.No)
                    {
                        return;
                    }
                }

                DownloadListViewItem item = new DownloadListViewItem(Path.GetFileName(filename));

                item.SubItems.Add("");
                item.SubItems.Add("");
                item.SubItems.Add(FormatVideoLength(tempItem.Length));
                item.SubItems.Add(string.Format(new FileSizeFormatProvider(), "{0:fs}", tempItem.VideoSize));
                item.SubItems.Add(tempItem.VideoUrl);
                item.OperationComplete += downloadItem_OperationComplete;

                lvQueue.Items.Add(item);

                SelectOneItem(item);

                ProgressBar pb = new ProgressBar()
                {
                    Maximum = 100,
                    Minimum = 0,
                    Value   = 0
                };
                lvQueue.AddEmbeddedControl(pb, 1, item.Index);

                LinkLabel ll = new LinkLabel()
                {
                    Text = tempItem.VideoUrl,
                    Tag  = tempItem.VideoUrl
                };
                ll.LinkClicked += linkLabel_LinkClicked;
                lvQueue.AddEmbeddedControl(ll, 5, item.Index);

                item.Download(tempItem.DownloadUrl, Path.Combine(path, filename));

                tabControl1.SelectedTab = queueTabPage;
            }
            catch (Exception ex) { MessageBox.Show(this, ex.Message, ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Error); }
        }
        private static bool GetQuality(YouTubeVideoQuality q, bool wide)
        {
            int    iTagValue;
            string itag = Regex.Match(q.DownloadUrl, @"itag=([1-9]?[0-9]?[0-9])", RegexOptions.Singleline).Groups[1].ToString();

            if (itag != "")
            {
                if (int.TryParse(itag, out iTagValue) == false)
                {
                    iTagValue = 0;
                }

                switch (iTagValue)
                {
                case 5: q.SetQuality("flv", new Size(320, (wide ? 180 : 240))); break;

                case 6: q.SetQuality("flv", new Size(480, (wide ? 270 : 360))); break;

                case 17: q.SetQuality("3gp", new Size(176, (wide ? 99 : 144))); break;

                case 18: q.SetQuality("mp4", new Size(640, (wide ? 360 : 480))); break;

                case 22: q.SetQuality("mp4", new Size(1280, (wide ? 720 : 960))); break;

                case 34: q.SetQuality("flv", new Size(640, (wide ? 360 : 480))); break;

                case 35: q.SetQuality("flv", new Size(854, (wide ? 480 : 640))); break;

                case 36: q.SetQuality("3gp", new Size(320, (wide ? 180 : 240))); break;

                case 37: q.SetQuality("mp4", new Size(1920, (wide ? 1080 : 1440))); break;

                case 38: q.SetQuality("mp4", new Size(2048, (wide ? 1152 : 1536))); break;

                case 43: q.SetQuality("webm", new Size(640, (wide ? 360 : 480))); break;

                case 44: q.SetQuality("webm", new Size(854, (wide ? 480 : 640))); break;

                case 45: q.SetQuality("webm", new Size(1280, (wide ? 720 : 960))); break;

                case 46: q.SetQuality("webm", new Size(1920, (wide ? 1080 : 1440))); break;

                case 82: q.SetQuality("3D.mp4", new Size(480, (wide ? 270 : 360))); break;     // 3D

                case 83: q.SetQuality("3D.mp4", new Size(640, (wide ? 360 : 480))); break;     // 3D

                case 84: q.SetQuality("3D.mp4", new Size(1280, (wide ? 720 : 960))); break;    // 3D

                case 85: q.SetQuality("3D.mp4", new Size(1920, (wide ? 1080 : 1440))); break;  // 3D

                case 100: q.SetQuality("3D.webm", new Size(640, (wide ? 360 : 480))); break;   // 3D

                case 101: q.SetQuality("3D.webm", new Size(640, (wide ? 360 : 480))); break;   // 3D

                case 102: q.SetQuality("3D.webm", new Size(1280, (wide ? 720 : 960))); break;  // 3D

                case 120: q.SetQuality("live.flv", new Size(1280, (wide ? 720 : 960))); break; // Live-streaming - should be ignored?

                default: q.SetQuality("itag-" + itag, new Size(0, 0)); break;                  // unknown or parse error
                }

                return(true);
            }

            return(false);
        }