elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [SOURCE] mrtzcmp3 Downloader
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [SOURCE] mrtzcmp3 Downloader  (Leído 11,474 veces)
z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
[SOURCE] mrtzcmp3 Downloader
« en: 23 Octubre 2013, 21:01 pm »

Hola buenas, he hecho una app que espero que os guste:


Descripción: Esta app mediante "algoritmos", lo que hace es, sacar la música de dicha web (http://mrtzcmp3.net/) en links para que luego sean descargados...*
*Luego explico como descargarse los links de forma rápida y cómoda

  • Screenshots


La app descargandose algo de música...

  • Descarga

http://www.mediafire.com/download/76r1o6dhw7p66zb/mrtzcmp3Downloader.rar

  • Modo de empleo

Básicamente, tenéis que poner los títulos de las músicas separados por puntos y comas, y luego, darle a "Buscar"... La app lo único que va a hacer va a ser los links de la música, ya luego vosotros pues tenéis que descargarosla aparte...

> Tutorial:

Antes de nada, decir que JD y Orbit downloader no van... Así que la última solución es descargarse Firefox e instalar su plugin DownloadThemAll.

Una vez hecho esto, cogemos el archivo con la lista generada por mi app, y lo abrimos con un editor de textos que admita busquedas con Regex como Sublime Text, cogemos y buscamos con Regex esto: http://.+, luego le damos a Find All, copiamos el texto seleccionado y lo ponemos en un nuevo archivo y reemplazamos todos los espacios por %20, y después lo guardamos y lo volvemos a abrir con FF, una vez con el TXT abierto en FF, damos click derecho y dTa OneClick...

Como podéis observar:



Un saludo.
PD:
Ya se que la app no tiene el nombre más correcto, pero es el primero que se me ocurrió... xD


« Última modificación: 24 Octubre 2013, 10:53 am por Ikillnukes » En línea


Interesados hablad por Discord.
Spiritdead5

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: [SOURCE] mrtzcmp3 Downloader
« Respuesta #1 en: 25 Octubre 2013, 07:17 am »

ya vi como le haces, practicamente parseas los documents del webclient q seguramente usas, y rastreas el script q tiene los .mp3 del reproductor de dicha web, estuve dandole 1 vueltita al firebug y le pille

por cierto acabas de darme 1 terrible idea sobre una arquitectura de gestion de archivos y esta pequeña web, ojala tenga 1 gran repertorio de musica

1 rato jugando con mis algoritmos llegue a esto, es mejorable, lo mejorare, pero te dejare este para q veas q si se puede mejorar

Código:
Imports System.Net
Imports System.Text.RegularExpressions
Imports System.IO

Class MainWindow
#Region "Variables"
    Dim response As HttpWebResponse
    Dim request As HttpWebRequest
    Dim cookies As New CookieContainer
    Dim Identificador As String
    Dim data As String
    Dim finder As MatchCollection
    Private Delegate Sub Refresher()
#End Region
#Region "API"
    Dim base As String = "http://mrtzcmp3.net/"
    Dim Extension1 As String = "_1s.html"
#End Region
#Region "Funciones"
    Public Sub tarea(ByVal URL As String)
        request = CType(HttpWebRequest.Create(base & Utils.UrlEncode(URL) & Extension1), HttpWebRequest)
        request.CookieContainer = cookies
        response = CType(request.GetResponse(), HttpWebResponse)
        For Each cook As Cookie In response.Cookies
            If cook.Name = "haras" Then
                Identificador = cook.Value
            End If
            cookies.Add(cook)
        Next
        data = New System.IO.StreamReader(response.GetResponseStream()).ReadToEnd()
        finder = Regex.Matches(data, "D\?.+? _")
        If finder.Count > 0 Then
            request = CType(HttpWebRequest.Create(base & finder(0).Value & Identificador), HttpWebRequest)
            request.CookieContainer = cookies
            response = CType(request.GetResponse(), HttpWebResponse)
            data = New System.IO.StreamReader(response.GetResponseStream()).ReadToEnd()
            finder = Regex.Matches(data, "Get_a_a_\w+\.mp3")
            If finder.Count > 0 Then
                request = CType(HttpWebRequest.Create(base & finder(1).Value), HttpWebRequest)
                request.CookieContainer = cookies
                Using Respuesta As HttpWebResponse = CType(request.GetResponse, HttpWebResponse)
                    'Asocio la respuesta al stream local
                    Dim total As Integer = Respuesta.ContentLength
                    Dim StreamRespuesta As Stream = Respuesta.GetResponseStream
                    'Bucle que lee y escribe en el fichero
                    Using ptfArchivoDestino As New FileStream("test.mp3", FileMode.Create)
                        Dim buffer(102400) As Byte '100KB
                        Dim Leido As Integer = 0
                        Dim acumulador As Integer = 0
                        Do
                            Leido = StreamRespuesta.Read(buffer, 0, buffer.Length)
                            acumulador += Leido
                            ptfArchivoDestino.Write(buffer, 0, Leido)
                            ProgressBar1.Dispatcher.Invoke(New Refresher(Sub() ProgressBar1.Value = (acumulador / total) * 100))
                            System.Threading.Thread.Sleep(50)
                        Loop Until Leido = 0 'Compruebo que no es final de transmision(1)
                    End Using
                End Using
            End If
        End If
    End Sub
#End Region
    Private Sub Button1_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click
        Dim t As System.Threading.Thread
        t = New System.Threading.Thread(AddressOf tarea)
        t.Start(TextBox1.Text)
    End Sub  
End Class
Public Class Utils
    Public Shared Function UrlDecode(ByVal value As String) As String
        If String.IsNullOrEmpty(value) Then
            Return String.Empty
        End If
        ' UrlEncode escapes with lowercase characters (e.g. %2f) but oAuth needs %2F
        value = Regex.Replace(value, "(%[0-9a-f][0-9a-f])", Function(c) c.Value.ToUpper())
        ' these characters are not escaped by UrlEncode() but needed to be escaped
        value = value.Replace("%20", " ")
        value = value.Replace("%5B", "[")
        value = value.Replace("%5D", "]")
        value = value.Replace("+", " ")
        value = value.Replace("%3A", ":")
        value = value.Replace("%23", "#")
        value = value.Replace("%C3%B1", "ñ")
        value = value.Replace("%28", "(")
        value = value.Replace("%29", ")")
        value = value.Replace("%21", "!")
        Return value
    End Function
    Public Shared Function UrlEncode(ByVal value As String) As String
        value = value.Replace(" ", "_")
        Return value
    End Function
End Class

añadi unas cuantas cositas interesantes, para q le veas e investigues

LENGUAJE VB.NET PLATAFORMA WPF


1 consejo, si haras 1 programa que baja canciones Hacelo completo, no solo dejarle la URL al user para q la baje desde otro programa, es muy mal visto

si es dificil, lee, podras, lo q te deje ahi permite bajar el archivo pero cambie las rutas 1 poco en los httpwebcreate


« Última modificación: 25 Octubre 2013, 11:21 am por Spiritdead5 » En línea

z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: [SOURCE] mrtzcmp3 Downloader
« Respuesta #2 en: 26 Octubre 2013, 12:42 pm »

Bueno, pues... xD

Código
  1. Public Shared Function UrlDecode(ByVal value As String) As String
  2.        If String.IsNullOrEmpty(value) Then
  3.            Return String.Empty
  4.        End If
  5.        ' UrlEncode escapes with lowercase characters (e.g. %2f) but oAuth needs %2F
  6.        value = Regex.Replace(value, "(%[0-9a-f][0-9a-f])", Function(c) c.Value.ToUpper())
  7.        ' these characters are not escaped by UrlEncode() but needed to be escaped
  8.        value = value.Replace("%20", " ")
  9.        value = value.Replace("%5B", "[")
  10.        value = value.Replace("%5D", "]")
  11.        value = value.Replace("+", " ")
  12.        value = value.Replace("%3A", ":")
  13.        value = value.Replace("%23", "#")
  14.        value = value.Replace("%C3%B1", "ñ")
  15.        value = value.Replace("%28", "(")
  16.        value = value.Replace("%29", ")")
  17.        value = value.Replace("%21", "!")
  18.        Return value
  19.    End Function
  20.    Public Shared Function UrlEncode(ByVal value As String) As String
  21.        value = value.Replace(" ", "_")
  22.        Return value
  23.    End Function

Esto ya lo había pensado, es más tenía pensado hacer de forma mas sencilla esa función, como tengo un host, pues subo un archivo php que me codifique la URL y me devuelta la string codificada, así no tengo que estar añadiendo cases ni nada, y pa colmo, tengo todos los caracteres convertidos...

Por lo demás, le echare un vistazo...

PD: He añadido un buscador más mp3 skull, subiré otra app, con más cosas... :P

Un saludo. Y gracias por tomarte la molestia... ;D

Por cierto, si algo me enseño Elektro es a usar select cases

Citar
Select case value

case is ñ

return tal de tal

end select

no es por nada, pero ahorras mucho espacio en la memoria que metiendo 40 variables replace.. xD
« Última modificación: 26 Octubre 2013, 12:44 pm por Ikillnukes » En línea


Interesados hablad por Discord.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: [SOURCE] mrtzcmp3 Downloader
« Respuesta #3 en: 26 Octubre 2013, 16:29 pm »

La solución propuesta es fácilmente mejorable, muestro dos ejemplos.

Versión RegEx:
Código
  1. #Region " URL Decode "
  2.  
  3.    ' [ URL Decode ]
  4.    '
  5.    ' //By Elektro H@cker
  6.    '
  7.    ' Examples :
  8.    ' MsgBox(URL_Decode("http%3A%2F%2Fwww%2Ewebsite%2Ecom%2Fpage%2Easp%3Fid%3D5%26test%3DHello%5FWorld"))
  9.    ' Result: http://www.website.com/page.asp?id=5&test=Hello_World
  10.  
  11.    Private Function URL_Decode(ByVal url As String) As String
  12.  
  13.        Return Regex.Replace( _
  14.                     url.Replace("+", Chr(Keys.Space)), _
  15.                     "(%[\dA-F]{2})", Function(hex) Chr(String.Format("&H{0}", hex.Value.Substring(1))), _
  16.                     RegexOptions.IgnoreCase)
  17.  
  18.    End Function
  19.  
  20. #End Region


Versión Select Case:
Código
  1. #Region " URL Decode "
  2.  
  3.    ' [ URL Decode ]
  4.    '
  5.    ' //By Elektro H@cker
  6.    '
  7.    ' Examples :
  8.    ' MsgBox(URL_Decode("http%3A%2F%2Fwww%2Ewebsite%2Ecom%2Fpage%2Easp%3Fid%3D5%26test%3DHello%5FWorld"))
  9.    ' Result: http://www.website.com/page.asp?id=5&test=Hello_World
  10.  
  11.    Private Function URL_Decode(ByVal url As String) As String
  12.  
  13.        Dim decoded As String = String.Empty
  14.  
  15.        For c As Integer = 0 To (url.Length - 1)
  16.            Select Case url(c)
  17.                Case "+"
  18.                    decoded &= Convert.ToChar(Keys.Space)
  19.                Case "%"
  20.                    decoded &= Convert.ToChar(CInt("&H" & url(c + 1) & url(c + 2)))
  21.                    c += 2
  22.                Case Else
  23.                    decoded &= url(c)
  24.            End Select
  25.        Next c
  26.  
  27.        Return decoded
  28.  
  29.    End Function
  30.  
  31. #End Region

También se puede mejorar todo lo demás del proyecto en general para desarrollar un downloader asincronico, pero con este código es más que suficiente.

Esto lo posteo para todas aquellas personas que se encuentren en la misma situación,
sincéramente, no lo posteo para ayudar al autor del post, ni al otro usuario.

Un saludo!
« Última modificación: 26 Octubre 2013, 16:39 pm por EleKtro H@cker » En línea



z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: [SOURCE] mrtzcmp3 Downloader
« Respuesta #4 en: 26 Octubre 2013, 16:48 pm »

Bueno, claro, siempre puedes hacer lo que PHP hace en VB.NET, que es coger y convertir las letras a ASCII y ese ASCII a Hexadecimal..

Un saludo.

PD: El método por Select Case no me termina de convencer, no se porque parece que ocupa más memoria RAM...
« Última modificación: 26 Octubre 2013, 16:52 pm por Ikillnukes » En línea


Interesados hablad por Discord.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: [SOURCE] mrtzcmp3 Downloader
« Respuesta #5 en: 26 Octubre 2013, 18:31 pm »

no se porque parece que ocupa más memoria RAM...

Un RegEx reserva más memoria y es lento en comparación, tarda más en inicializarse y en finalizar su ejecución (Lease las diferentes RegExOptions para ajustar un poco estas caracteristicas).

Según un test de velocidad que acabo de realizar para decodificar 1.000.000 de strings, estos han sido los resultados:

Código:
Método 1 (Regex.Replace): 11.826 segundos 
Método 2 (String Append): 6.201 segundos

Óbviamente, para procesar una efímera cantidad de urls, no importa en absoluto que método se use ya que la diferencia en ms no se podrá apreciar.

Saludos.
« Última modificación: 26 Octubre 2013, 18:57 pm por EleKtro H@cker » En línea



z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: [SOURCE] mrtzcmp3 Downloader
« Respuesta #6 en: 26 Octubre 2013, 19:59 pm »

Y si no es mucho preguntar, como has procesado un millón de Strings? xD
En línea


Interesados hablad por Discord.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: [SOURCE] mrtzcmp3 Downloader
« Respuesta #7 en: 26 Octubre 2013, 20:40 pm »

No me expresé corréctamente, quería decir que he procesado el mismo string un millón de veces.

Código
  1. watch start
  2. For x = 0 to 1000000
  3.  URL_Decode(...)
  4. next
  5. watch end
  6. mostrar resultados

Saludos
« Última modificación: 26 Octubre 2013, 20:43 pm por EleKtro H@cker » En línea



Spiritdead5

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: [SOURCE] mrtzcmp3 Downloader
« Respuesta #8 en: 26 Octubre 2013, 20:57 pm »

Y si no es mucho preguntar, como has procesado un millón de Strings? xD

sigo prefiriendo mi forma :) mis algoritmos se basan en optimizacion de CPU, y un select case para y un ciclo para decodear o encodear una URL me parece un desperdicion pero bueno

lo de arriba lo arme en 5 min, pero hay unas cuantas cosas q deberias revisar porque tienes 1 bug algo feo en el codigo
sobre todo aca

Código:
finder = Regex.Matches(data, "D\?.+? _")
 y aca
Código:
 request = CType(HttpWebRequest.Create(base & finder(0).Value & Identificador), HttpWebRequest)
no estas tomando en cuenta algo importante

« Última modificación: 26 Octubre 2013, 21:05 pm por Spiritdead5 » En línea

Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Re: [SOURCE] mrtzcmp3 Downloader
« Respuesta #9 en: 27 Octubre 2013, 08:57 am »

System.Web.HttpUtility

Es una clase de .Net, que contiene métodos que pueden "parsear" los caracteres inválidos en hexadecimal y viceversa. Están disponibles los métodos Encode/Decode Url, respectivamente para cada caso.
En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines