martes, 22 de octubre de 2013

Buscar letra de canciones(wikilyrics) VB.NET -- C#

Hola buenas tardes hoy retome un proyecto que tenia bastante olvidado y me encontre con un avance en cuanto a obtener la letra de una cancion, utilizando la api de wikilyrics comentar que el metodo comun y que exponen ellos solamente te da una fraccion de la letra y te piden que los mandes a la pagina de su propiedad para ver la letra completa, pero les descubri como encriptan la letra para ellos mostrarla en su pagina, no se si esto lo haya hecho alguien mas creo que no jeje, hoy les voy a poner una clase para bajar la letra completa de la cancion, ya lo que hagan con la letra ps es cuestion de ustedes. Dicho lo anterior pasamos a la siguiente deberan crear un formulario bastante sencillo como la imagen siguiente:
1.- 2 Textbox(Nombre de Cancion,Nombre de Artista).
2.- 2 Etiquetas(Nombre de Cancion y Nombre de Artista).
3.- 1 Boton(Buscar).
4.- 1 Textbox Enriquecido(Letra de Cancion).

Lo Siguiente es agregar una referencia al Web Service de WikiLyrics. A continuacion les pongo la clase que se encarga de descargar la cancion: Codigo VB.NET
Private Function buscarLetra(ByVal nombreCancion As String, ByVal nombreArtista As String) As String

        Dim lw As LyricWiki = New LyricWiki
        Dim lr As LyricsResult = lw.getSong(nombreArtista, nombreCancion)
        Dim html As String = RetHTML(lr.url)

        If html <> "" And html IsNot Nothing Then
            'Buscamos donde empieza letra de cancion
            Dim primerCoincid As Integer = html.IndexOf("</div>
&#")
            'Buscamos donde termina la cancion
            Dim segundaConcid As Integer = html.IndexOf("NewPP")
            'Se Determina largo de la cancion
            Dim largo As Integer = segundaConcid - primerCoincid
            'Leemos caracteres ASCII de la cancion
            Dim letraAscii As String = Mid((html), primerCoincid + 1, largo)
            'Separamos la cancion por cierre de corchete
            Dim renglonAScii() As String = Split(letraAscii, ">")
            Dim arrCodigos As New ArrayList
            Dim cancion As String = ""
            'Recorremos los renglones de la cancion
            For i = 0 To renglonAScii.Count - 1
                'Separamos letra por letra del renglon
                Dim codigo() As String = Split(renglonAScii(i).ToString, ";")
                Try
                    For j = 0 To codigo.Count - 2
                        'Eliminamos caracters de escape
                        Dim cod As String = Trim(Replace(codigo(j), "&#", ""))
                        'Se convierte de ASCII a Texto
                        cancion &= Chr(cod)
                    Next
                    cancion += vbCrLf
                Catch ex As Exception
                    cancion &= ""
                End Try

            Next
            Return cancion
        Else
            Return ""
        End If
    End Function
Codigo C#
private string buscarLetra(string nombreCancion, string nombreArtista)
{

	LyricWiki lw = new LyricWiki();
	LyricsResult lr = lw.getSong(nombreArtista, nombreCancion);
	string html = RetHTML(lr.url);

	if (!string.IsNullOrEmpty(html) & html != null) {
		//Buscamos donde empieza letra de cancion
		int primerCoincid = html.IndexOf("</div>
&#");
		//Buscamos donde termina la cancion
		int segundaConcid = html.IndexOf("NewPP");
		//Se Determina largo de la cancion
		int largo = segundaConcid - primerCoincid;
		//Leemos caracteres ASCII de la cancion
		string letraAscii = Strings.Mid((html), primerCoincid + 1, largo);
		//Separamos la cancion por cierre de corchete
		string[] renglonAScii = Strings.Split(letraAscii, ">");
		ArrayList arrCodigos = new ArrayList();
		string cancion = "";
		//Recorremos los renglones de la cancion
		for (i = 0; i <= renglonAScii.Count - 1; i++) {
			//Separamos letra por letra del renglon
			string[] codigo = Strings.Split(renglonAScii[i].ToString(), ";");
			try {
				for (j = 0; j <= codigo.Count - 2; j++) {
					//Eliminamos caracters de escape
					string cod = Strings.Trim(Strings.Replace(codigo[j], "&#", ""));
					//Se convierte de ASCII a Texto
					cancion += Strings.Chr(cod);
				}
				cancion += Constants.vbCrLf;
			} catch (Exception ex) {
				cancion += "";
			}

		}
		return cancion;
	} else {
		return "";
	}
}
Esta clase es la que nos devuelve la letra de la cancion en caso de existir, el funcionamiento es muy sencillo pones el nombre del artista y el nombre de la cancion que estas buscando, el boton buscar solamente llama al metodo de buscarCancion del webservice, si no encuentra la cancion nos devuelve vacio y eso se le pasa al textbox enriquecido. Les dejo el codigo de este modulo de busqueda de canciones. P.D. NO le digan a wikilyrics. wikiLyrics.rar (128 KB) https://mega.co.nz/#!hR4kRYBI!WhD5CiiW9ZZ3c6nIqoOFj3eO0cEIjYMhZLSufdV__CA Saludos.

1 comentario:

  1. Gracias por la información, estaba buscando algo de esto y me salio el post, pero no comprendo que es eso de ( Web Service de WikiLyrics) y para el colmo el enlace de mega que me imagino que era de un ejemplo ya se callo, así que me lo podrías explicar por favor?

    ResponderEliminar

Hola Deja Tu Comentario !!!