Last updated January 19, 2010 15:47, by EstebanFuentealba
Feedicon  
= 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: *[http://www.goear.com] *[http://www.esnips.com] = ¿ 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: *http://goear.com/reqsearch.php?q=daddy&p=0 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 <pre><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></pre> 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: <pre> <[^>] target='_parent' href='http://www.goear.com/listen/(.[^/]+)/(.[^']*)'>(.[^>]+) - \\((.[^<]+)\\)</[^>]+> </pre> 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 <pre> http://www.goear.com/files/xmlfiles/{primer caracter de la id}/secm{id}.xml </pre> Ejemplo : http://www.goear.com/files/xmlfiles/3/secm34597f7.xml eso nos devuelve un documento xml donde está el link de descarga <pre> <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> </pre> Nuevamente con Expresiones Regulares podemos sacar desde ese xml el link de descarga. La siguiente expresion es para sacar la url del mp3 <pre> <song path=\"(.+)\" bild=\"(.+)\" artist=\"(.+)\" title=\"(.+)\"/> </pre> 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: <pre name="php"> <?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, ) ) ) ) ); ?> </pre> 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: <pre name="php"> <?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)).'" }] }'; ?> </pre> 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 <pre name="java"> 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); } </pre>
  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20120127.ac94057)
 
 
Close
loading
Please Confirm
Close