Last updated January 19, 2010 15:47, by EstebanFuentealba

Mp3Spider Wiki

¿ Que es Mp3Spider ?

Es un metabuscador de musica, donde se usan variados servidores para encontrar miles de mp3s

Servidores

Hasta el momento, solo para testear el programa ,mp3spider esta buscando en 2 servidores:

¿ Como Busca ?

Cada servidor tiene un link de buqueda, por ejemplo: Goear tiene el siguiente link de búsqueda

  • http:// goear.com/reqsearch.php?q={q}&p={p} :
 donde :
  • {q} es la query de búsqueda
  • {p} es la pagina de paginación de resultados

Ejemplo:

esto buscará el término daddy mostrando la página 0 de los resultados de busqueda. Ahora veamos un trozo del código de fuente de esa pagina

<a target='_parent' href='http://www.goear.com/listen/34597f7/tyna-q-ft.-deejay-kmx---best-feeling-(deejay-kmx-2007-remix)-tyna-q-ft.-deejay-kmx---best-feeling-(deej'>Tyna Q Ft. DeeJay kMx - Best Feeling (DeeJay kMx 2007 Remix) - (tyna q ft. deejay kmx - best feeling (deej)</a>
con eso nos podemos dar cuenta de lo siguiente:

  • 34597f7 Es la id del mp3
  • Tyna Q Ft. DeeJay kMx - Best Feeling (DeeJay kMx 2007 Remix) Es el titulo de la canción
  • (tyna q ft. deejay kmx - best feeling (deej) Es elArtista

Estos datos lo podemos sacar desde el código de fuente mediante ingeniería inversa y Expresiones Regulares. La expresión regular que necesitamos para sacar esos datos es la siguiente:

<[^>] target='_parent' href='http://www.goear.com/listen/(.[^/]+)/(.[^']*)'>(.[^>]+) - \\((.[^<]+)\\)</[^>]+>
con esto agrupo datos quedando los siguientes grupos:

  • 1 Es la id
  • 3 Es el título
  • 4 Es el artista

Con eso ya obtenemos los resultados desde goear

¿ Cómo Descarga ?

Hay dos formas de sacar el link de un mp3 , según los servidores:

  • A partir de la id sin conectarse al servidor
  • Conectándose al servidor con la id

Por ejemplo para obtener el link de descarga de goear es necesario conectarse al servidor para sacar el link. Hay que conectarse a

http://www.goear.com/files/xmlfiles/{primer caracter de la id}/secm{id}.xml

Ejemplo : http://www.goear.com/files/xmlfiles/3/secm34597f7.xml

eso nos devuelve un documento xml donde está el link de descarga

<songs> 
   		<song path="http://www.goear.com/files/sst3/mp3files/10012007/be15aad388c11eeb464a102e0b8915a0.mp3" bild="img/s.jpg" artist="tyna q ft. deejay kmx - best feeling (deej" title="Tyna Q Ft. DeeJay kMx - Best Feeling (DeeJay kMx 2007 Remix)"/> 
		</songs>

Nuevamente con Expresiones Regulares podemos sacar desde ese xml el link de descarga. La siguiente expresion es para sacar la url del mp3

<song path=\"(.+)\" bild=\"(.+)\" artist=\"(.+)\" title=\"(.+)\"/>
Grupos:

  • 1 url de descarga


Creando Motores de Búsqueda

Sabiendo como buscar y como descargar se pueden crear los motores de búsqueda en PHP como el siguiente:

<?PHP
//GOEAR
	$a = array(
		"SEARCH" => array(
			"URL"	=>	"http://77.67.11.180/reqsearch.php?q={q}&p={p}",
			"PAGE"	=> '$p',
			"DATA"	=>	array(
				array(
					"REGS" 		=> "<[^>] target='_parent' href='http://www.goear.com/listen/(.[^/]+)/(.[^']*)'>(.[^>]+) - \\((.[^<]+)\\)</[^>]+>",
					"GROUPS" 	=> array(
										"ID" 		=> 1,
										"TITLE"		=> 3,
										"ARTIST"	=> 4
									)
				)
			)
		),
		"DOWNLOAD"	=> array(
			"TXT_REP"		=> "http://www.goear.com/files/xmlfiles/{'{1}'.substring(0,1)}/secm{1}.xml",
			"CONNECTION"	=> "true",
			"DATA"	=>	array(
							array(
								"REGS" 		=> "<song path=\"(.+)\" bild=\"(.+)\" artist=\"(.+)\" title=\"(.+)\"/>",
								"GROUPS" 	=> array(
													"ID" 		=> 1,								
												)	
							)
			)
		)
	);
?>

Como podemos ver es solo un arreglo bidimensional con los datos necesarios para buscar y descargar para poder manipularlos desde Java a ese arreglo lo serializamos y lo codificamos en base64 (para evitar problemas con comillas " al deserializarlo) . Actualmente tengo los dos servidores de prueba asi:

<?PHP
//GOEAR
	$a = array(
		"SEARCH" => array(
			"URL"	=>	"http://77.67.11.180/reqsearch.php?q={q}&p={p}",
			"PAGE"	=> '$p',
			"DATA"	=>	array(
				array(
					"REGS" 		=> "<[^>] target='_parent' href='http://www.goear.com/listen/(.[^/]+)/(.[^']*)'>(.[^>]+) - \\((.[^<]+)\\)</[^>]+>",
					"GROUPS" 	=> array(
										"ID" 		=> 1,
										"TITLE"		=> 3,
										"ARTIST"	=> 4
									)
				)
			)
		),
		"DOWNLOAD"	=> array(
			"TXT_REP"		=> "http://www.goear.com/files/xmlfiles/{'{1}'.substring(0,1)}/secm{1}.xml",
			"CONNECTION"	=> "true",
			"DATA"	=>	array(
							array(
								"REGS" 		=> "<song path=\"(.+)\" bild=\"(.+)\" artist=\"(.+)\" title=\"(.+)\"/>",
								"GROUPS" 	=> array(
													"ID" 		=> 1,								
												)	
							)
			)
		)
	);
	//ESNIPS
	$b = array(
		"SEARCH" => array(
			"URL"	=>	"http://www.esnips.com/_t_/{q}?to=120&page5=1&gen=Any+Gender&page4={p}&sort=0&page3=1&cnt=Any+Country&page2=1&uf=0&page1=1&page0=1&pageUsers=1&from=13&t=1&page={q}&cur=0&st=4&pp=24&m=4&q={q}",
			"PAGE"	=> '($p+1)',
			"DATA"	=>	array(
				array(
					"REGS" 		=> "<a  href='/doc/(.[^/]+)/(.[^']+)'>(.[^<]+).mp3</a>",
					"GROUPS" 	=> array(
										"ID" 		=> 1,
										"TITLE"		=> 2,
										"ARTIST"	=> 2
									)
				)
			)
		),
		"DOWNLOAD"	=> array(
			"TXT_REP"		=> "http://www.esnips.com/nsdoc/{1}/ts_id/{(new Date().getTime()).toString().replace('.','')}/ns_flash/file88.mp3",
			"CONNECTION"	=> "false"
			
		)
	);
	echo '{ "motores": [{ "id": "'.md5(serialize($a)).'", "JSONMotor":"' .base64_encode(serialize($a)).'" },{ "id": "'.md5(serialize($b)).'", "JSONMotor":"' .base64_encode(serialize($b)).'" }] }';
?>

quedando como éste código JSON http://serv03mp3.orgfree.com/motores.php luego ese archivo JSON es tomado por el programa Java , lo pasa a objeto decodifica y unserializa los motores, dejandolos listo para usarlos desde Java

Uso de clases (Busqueda/Descarga) Java

Aqui dejo la forma de uso

try {
            //Los Motores JSON Serializados en PHP
            MotorLoad load = new MotorLoad("http://turr0n.vtrbandaancha.net/EstebanFuentealba/motores.php");
            //#####
            //# Buscar En un Motor
            //#####
            //Creo un objeto de Mp3SpiderSearch
            Iterator it = load.getMotores().entrySet().iterator();
            while(it.hasNext()) {
            final Mp3SpiderSearch search = new Mp3SpiderSearch("jackson", 0, ((Motor) ((Map.Entry)it.next()).getValue()));
            //Agrego el evento que se lanzara cuando encuentre resultados
            search.getMatch().addOnResult(new EventResultListener() {
            public void onMp3SpiderResult(EventResult e) {
            System.out.println(e.getResult());
            }
            });
            //llamo al metodo que crea la busqueda
            new Thread(new Runnable() {
            public void run() {
            try {
            search.create();
            } catch (ScriptException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (MalformedURLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            }
            }).start();
            }
            //#####
            //# Descargar a Partir de una ID,  Ejemplo: ID=56f18bf
            //#####
            //Creo un Objeto de Mp3SpiderDownload
            //Mp3SpiderDownload down = new Mp3SpiderDownload("56f18bf", load.getMotores().get("1323ab68182ba07ba90b1dcc48379d28"));
            Mp3SpiderDownload down = new Mp3SpiderDownload("22xwYlgwQVo/w730", load.getMotores().get("4ffb6d5809708ab1e745c190cfac82c7"));
            //Agrego un listener para cuando saque el link de descarga
            down.getMatch().addOnGrabber(new EventLinkGrabberListener() {
            public void onGrabberLink(EventLinkGrabber e) {
            System.out.println("Link de Descarga: "+e.getSource().toString());
            }
            });
            //llamo al metodo que busca el link de descarga
            down.linkGrabber();
            }  catch (MalformedURLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }

  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20100312.9442df5)
 
 
loading
Please Confirm