Jason es un downloader de audio de Youtube, tambien organiza y lista las canciones permitiendo cambiar su ubicacion, calidad, nombre, etc.
Esta programado en C# y utiliza la libreria DevExpress. Para funcionar requiere "Microsoft .Net Framework" y cualquier reproductor OGG. (yo recomiendo VLC) .
NOTA: Jason no crackea ni proporciona audio/video protegido por derechos de autor (los mismos son bloqueados)
Links descargas: (proyecto visual studio, portable y ejecutabbe)
el que quiera participar del proyecto lo puede hacer aca: http://foro.code-makers.es/viewtopic.php?f=21&t=65
Código
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Web; using System.Net; using System.IO; using System.Diagnostics; using System.Text.RegularExpressions; using System.Media; using System.Globalization; namespace Jason21 { public partial class Form1 : Form { List<string> Canciones = new List<string>(); List<string> urlCanciones = new List<string>(); List<string> mArchivos = new List<string>(); public bool PrimerCheck = true; public string input; public string[] parts1; public string[] parts2; public string[] parts3; public string Titulo; public string[] ImgP; public string[] ImgTP; public string[] ImgTP2; public string[] ImgT; public string[] videoID; // v1.1 Reformas public int intentoDescarga; public int maxIntentos; public string ultimaURL; public int uU = 0; // v2.0 Reformas public string urlADS; //v2.1 Reformas public string archivo_Configuracion; public string CarpetaDescargas; public float megaBytesGlobal; public int sDescargas = 0; public bool Cancelar_Busqueda = false; public string ultimaPestana = "controlBuscar"; public int tDescargas = 0; public int fDescargas = 0; public Form1() { InitializeComponent(); webBrowser1.ScriptErrorsSuppressed = true; webBrowser2.ScriptErrorsSuppressed = true; listBox1.MouseDoubleClick += new MouseEventHandler(listBox1_DoubleClick); lista_Biblioteca.MouseDoubleClick += new MouseEventHandler(lista_Biblioteca_DoubleClick); // Control_Pestanas.SelectedPageChanged += new TabControlCancelEventHandler(Control_Pestanas_Selecting); } private void Form1_Load(object sender, EventArgs e) { archivo_Configuracion = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\JasonConfig.config"); CheckConfig(); ListarCanciones(); intentoDescarga = 2; boton_CancelarBusqueda.Enabled = false; Application.DoEvents(); ListarCanciones(); Application.DoEvents(); webBrowser2.Navigate("http://jason.esy.es/"); } private void boton_Buscar_Click(object sender, EventArgs e) { boton_Buscar.Enabled = false; boton_CancelarBusqueda.Enabled = true; Canciones.Clear(); urlCanciones.Clear(); listBox1.Items.Clear(); Cancelar_Busqueda = false; for (int i = 1; i <= (int)input_pagBusqueda.Value; i++) { if (Cancelar_Busqueda) { i = 100; } else { Buscar_Agregar(inputText_Buscar.Text, i); } } } public void Buscar_Agregar(string Busqueda, int Pagina) { Control_Pestanas.SelectedPageIndex= 0; webBrowser1.Navigate("https://www.youtube.com/results?search_query=" + Busqueda + "&page=" + Pagina); while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } HtmlElementCollection theElementCollection = default(HtmlElementCollection); theElementCollection = webBrowser1.Document.GetElementsByTagName("a"); foreach (HtmlElement curElement in theElementCollection) { if (curElement.GetAttribute("classname") == "yt-uix-sessionlink yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 spf-link ") { bool esLista = curElement.GetAttribute("href").Contains("list"); if (!esLista) { listBox1.Items.Add(curElement.GetAttribute("InnerText")); urlCanciones.Add(curElement.GetAttribute("href")); } } } } private void boton_CancelarBusqueda_Click(object sender, EventArgs e) { boton_CancelarBusqueda.Enabled = false; boton_Buscar.Enabled = true; Cancelar_Busqueda = true; } private void listBox1_DoubleClick(object sender, MouseEventArgs e) { if (sDescargas <= 3) { ConvertirCancion(sender, e); } else { MessageBox.Show("The free version does not allow many downloads."); } } public void ConvertirCancion(object sender, MouseEventArgs e) { int index = this.listBox1.IndexFromPoint(e.Location); int urlB = listBox1.SelectedIndex; label_ArchivosDescargados.Text = tDescargas.ToString(); if (index != System.Windows.Forms.ListBox.NoMatches) { tabControl1.SelectedIndex = 1; lista_Descargas.Items.Add(listBox1.SelectedItem); label_EstadoDescarga.Text = "It becoming! please, be patient..."; label_LocacionDescarga.Text = urlCanciones[urlB]; webBrowser1.Navigate(urlCanciones[listBox1.SelectedIndex]); while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } try { input = webBrowser1.DocumentText; parts1 = input.Split(new string[] { "type=audio" }, StringSplitOptions.None); maxIntentos = parts1.Count(); parts2 = parts1[intentoDescarga].Split(new string[] { "url=" }, StringSplitOptions.None); parts3 = parts2[1].Split(new string[] { "\\" }, StringSplitOptions.None); Titulo = webBrowser1.Document.Title.Replace(" - YouTube", ""); label_EstadoDescarga.Text = "Successful conversion"; label_NombreDescarga.Text = Titulo + ".ogg"; videoID = urlCanciones[listBox1.SelectedIndex].Split(new string[] { "=" }, StringSplitOptions.None); webBrowser1.Navigate("about:blank"); Application.DoEvents(); DescargarCancion(); } catch { fDescargas ++; label_DescargasFallidas.Text = fDescargas.ToString(); label_EstadoDescarga.Text = "Error becoming file - try again later."; label_NombreDescarga.Text = Titulo + ".ogg\""; webBrowser1.Navigate("about:blank"); } } } public void DescargarCancion() { label_EstadoDescarga.Text = "Downloading..."; WebClient Client = new WebClient(); Client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); Client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted); Client.DownloadFileAsync(new Uri((HttpUtility.UrlDecode(parts3[0]))), (CarpetaDescargas + "/" + Titulo + ".ogg").Replace("?", "")); Application.DoEvents(); sDescargas++; } public void FalloDescarga() { fDescargas++; sDescargas--; label_DescargasFallidas.Text = fDescargas.ToString(); label_NombreDescarga.Text = intentoDescarga.ToString() + " - Error : \"" + Titulo + ".ogg\" is protected by copyright."; File.Delete(CarpetaDescargas + "/" + Titulo + ".ogg"); Application.DoEvents(); /* System.Threading.Thread.Sleep(2000); this.intentoDescarga += 1; if (intentoDescarga > 1) { ConvertirCancion(null, null); } if (intentoDescarga > maxIntentos - 2) { intentoDescarga = 1; } */ } void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { int Porciento = ((int)e.BytesReceived * 100) / ((int)e.TotalBytesToReceive); label_ArchivosDescargando.Text = sDescargas.ToString(); try { progressBar1.Maximum = (int)e.TotalBytesToReceive / 100; progressBar1.Value = (int)e.BytesReceived / 100; double megaBytesT = ((double)e.TotalBytesToReceive / 1024) / (1024); double megaBytesR = ((double)e.BytesReceived / 1024) / (1024); } catch { label_EstadoDescarga.Text = " Downloading - " + Titulo; } try { progressBar1.Maximum = (int)e.TotalBytesToReceive / 100; progressBar1.Value = (int)e.BytesReceived / 100; double megaBytesT = ((double)e.TotalBytesToReceive / 1024) / (1024); megaBytesGlobal = (float)megaBytesT; double megaBytesR = ((double)e.BytesReceived / 1024) / (1024); if (megaBytesT <= (float)0.5) { FalloDescarga(); } else { label_EstadoDescarga.Text = " Downloading " + Porciento + " %"; label_MBr.Text = megaBytesR.ToString().Substring(0, 4) + "Mb."; label_MBt.Text = megaBytesT.ToString().Substring(0, 4) + "Mb."; } } catch { Application.DoEvents(); } } void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { if (e.Error != null) { FalloDescarga(); } else { string Cancion = CarpetaDescargas + "\\" + Titulo + ".ogg"; if (megaBytesGlobal <= (float)0.5) { label_EstadoDescarga.Text = "Unknow error"; } else { sDescargas--; tDescargas++; label_ArchivosDescargando.Text = sDescargas.ToString(); label_ArchivosDescargados.Text = tDescargas.ToString(); label_EstadoDescarga.Text = "Download completed"; } if (checkBox_AbrirFinal.Checked) { Process.Start(CarpetaDescargas); //, string.Format("/select,\"{0}\"", Titulo + ".ogg")); Application.DoEvents(); SendKeys.Send(Titulo); } if (checkBox_PlayFinal.Checked) { Process.Start(Cancion); Application.DoEvents(); } } } public void ListarCanciones() { if (!PrimerCheck) { mArchivos.Clear(); lista_Biblioteca.Items.Clear(); } string[] archivos = Directory.GetFiles(CarpetaDescargas, "*.*", SearchOption.TopDirectoryOnly); if (archivos.Length >= 1) { foreach (string nombre in archivos) { bool esOGG = nombre.Contains(".ogg"); bool esMP3 = nombre.Contains(".mp3"); bool filtro = nombre.ToLower().Contains(textBox_Library_Filter.Text.ToLower()); if (esOGG && filtro || esMP3 && filtro) { mArchivos.Add(nombre); lista_Biblioteca.Items.Add(nombre.Replace(CarpetaDescargas + "\\", "") + " - Location: " + nombre); } } } PrimerCheck = false; } public void CheckConfig() { bool abrirFinal = archivo_Configuracion.Contains("openonfinish=true"); bool playFinal = archivo_Configuracion.Contains("playonfinish=true"); bool usarMyMusic = archivo_Configuracion.Contains("usemymusic=true"); if (abrirFinal) { usar_MyMusic.Checked = true; } else { usar_MyMusic.Checked = false; } if (playFinal) { usar_OtraCarpeta.Checked = true; } else { usar_OtraCarpeta.Checked = false; } if (usarMyMusic) { usar_MyMusic.Checked = true; usar_OtraCarpeta.Checked = false; elegir_Carpeta.Enabled = false; CarpetaDescargas = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic); textBox_PathChoice.Text = CarpetaDescargas; textBox_PathChoice.Enabled = false; } else if (!usarMyMusic) { usar_MyMusic.Checked = false; usar_OtraCarpeta.Checked = true; elegir_Carpeta.Enabled = true; CarpetaDescargas = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config"); textBox_PathChoice.Text = CarpetaDescargas; } } // FIN FIN FIN FIN private void checkEdit8_CheckedChanged(object sender, EventArgs e) { } private void groupControl4_Paint(object sender, PaintEventArgs e) { } private void comboBox_Filter_Library_type_SelectedIndexChanged(object sender, EventArgs e) { } private void checkBox_AbrirFinal_CheckedChanged(object sender, EventArgs e) { if (checkBox_AbrirFinal.Checked) { archivo_Configuracion = archivo_Configuracion.Replace("openonfinish=false", "openonfinish=true"); } else if (!checkBox_AbrirFinal.Checked) { archivo_Configuracion = archivo_Configuracion.Replace("openonfinish=true", "openonfinish=false"); } } private void checkBox_PlayFinal_CheckedChanged(object sender, EventArgs e) { if (checkBox_PlayFinal.Checked) { archivo_Configuracion = archivo_Configuracion.Replace("playonfinish=false", "playonfinish=true"); } else if (!checkBox_PlayFinal.Checked) { archivo_Configuracion = archivo_Configuracion.Replace("playonfinish=true", "playonfinish=false"); } } private void usar_MyMusic_CheckedChanged(object sender, EventArgs e) { if (usar_MyMusic.Checked && archivo_Configuracion.Contains("usemymusic=false")) { archivo_Configuracion = archivo_Configuracion.Replace("usemymusic=false", "usemymusic=true"); usar_OtraCarpeta.Checked = false; textBox_PathChoice.Enabled = false; elegir_Carpeta.Enabled = false; CarpetaDescargas = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic); textBox_PathChoice.Text = CarpetaDescargas; using (StreamWriter ArchivoDownpath = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config")) { ArchivoDownpath.Write(""); } } } private void usar_OtraCarpeta_CheckedChanged(object sender, EventArgs e) { if (usar_OtraCarpeta.Checked && archivo_Configuracion.Contains("usemymusic=true")) { archivo_Configuracion = archivo_Configuracion.Replace("usemymusic=true", "usemymusic=false"); usar_MyMusic.Checked = false; textBox_PathChoice.Enabled = true; elegir_Carpeta.Enabled = true; } } private void boton_AplicarConfig_Click(object sender, EventArgs e) { using (StreamWriter ArchivoConfig = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\JasonConfig.config")) { ArchivoConfig.Write(archivo_Configuracion); } if (usar_MyMusic.Checked) { Environment.GetFolderPath(Environment.SpecialFolder.MyMusic); } else { CarpetaDescargas = textBox_PathChoice.Text; } //continuar using (StreamWriter ArchivoDownpath = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config")) { ArchivoDownpath.Write(CarpetaDescargas); } } private void boton_Reset_Click(object sender, EventArgs e) { using (StreamWriter ArchivoConfig = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\JasonConfig.config")) { ArchivoConfig.Write("openonfinish=true;playonfinish=false;usemymusic=true;otherpath:();"); archivo_Configuracion = ("openonfinish=true;playonfinish=false;usemymusic=true;otherpath:();"); CarpetaDescargas = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic); } CheckConfig(); using (StreamWriter ArchivoDownpath = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Jason\Downpath.config")) { ArchivoDownpath.Write(""); } } private void elegir_Carpeta_Click(object sender, EventArgs e) { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { textBox_PathChoice.Text = folderBrowserDialog1.SelectedPath; } } private void simpleButton3_Click(object sender, EventArgs e) { lista_Descargas.CheckedItems.OfType<string>().ToList().ForEach(lista_Descargas.Items.Remove); } private void simpleButton4_Click(object sender, EventArgs e) { lista_Descargas.Items.Clear(); } private void link_AbrirCarpeta_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Process.Start(CarpetaDescargas); } private void lista_Biblioteca_DoubleClick(object sender, EventArgs e) { try { Process.Start(mArchivos[lista_Biblioteca.SelectedIndex]); } catch { Process.Start(mArchivos[lista_Biblioteca.SelectedIndex]); } } private void lista_Descargas_DoubleClick(object sender, EventArgs e) { try { textBox_Library_Filter.Text = lista_Biblioteca.SelectedItem.ToString(); } catch { textBox_Library_Filter.Text = lista_Biblioteca.SelectedItem.ToString(); } } private void textBox_Library_Filter_TextChanged(object sender, EventArgs e) { ListarCanciones(); } private void control_Biblioteca_Paint(object sender, PaintEventArgs e) { // ListarCanciones(); if (ultimaPestana != "controlBiblioteca") { ListarCanciones(); } else { Application.DoEvents(); } } private void lista_Biblioteca_SelectedIndexChanged(object sender, EventArgs e) { } private void label13_Click(object sender, EventArgs e) { } private void lista_Descargas_SelectedIndexChanged(object sender, EventArgs e) { } } }
Bueno, eso es todo! Saludos