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); }
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); } }
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; }
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; } }
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; }
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; } }
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; }
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); }