Antes de nada, avisar que esto no tiene que ver nada con descargas de contenido ni nada por el estilo. Simplemente es una sencilla introducción a lo que se puede hacer desde Linux.Estos dias, sin nada que hacer, me entró la curiosidad por saber cuantos torrents tiene la página
Mejortorrent.com. Decidí entrar para ver que sucede...
A la izquierda se puede ver la cantidad de torrents que hay, pero yo quería ir un poco mas lejos.... Me picaba la curiosidad por saber si realmente era así. Decidí buscar la forma de sacar un listado de todas las peliculas que había, y obtener su link. La primera parte era fácil:
http://www.mejortorrent.com/peliculas-buscador.htmlSimplemente ponía en el formulario
+ Descargas que con valor
0.
Ya estaba allí. El problema viene ahora...
Para acceder al link del torrent, necesitaba entrar en cada uno de ellos, luego a donde pone
descargar, y luego a pulsar en
aquí. Un auténtico coñazo si tienes que hacerlo 10000 veces!!!
Por eso decidí usar Linux... Esa cosa que la gente cree que solo pueden usar auténticos cracks. Vamos a desmentir eso...
Estando dentro del
terminal (Si, esa cosa negra que parpadea y te suelta cosas raras), haremos uso del comando
curlcURL es una herramienta para usar en un intérprete de comandos para transferir archivos con sintaxis URL, soporta FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, FILE y LDAP
El parámetro
-s oculta mensajes del progreso de descarga
Con este comando, nos devolverá el contenido de la web, pero....
SORPRESA!! Solo te devuelve código HTML sin ninguna peli...
Donde están los casi
10000 resultados?
Esto se debe a que la página tiene un formulario... y hay que rellenarlo para que nos devuelva la respuesta....
Utilizaremos una herramienta GNU:
formfindAquí introducimos nuevas cositas:
> = Redirige la salida a un fichero. En este caso, todo el contenido de https://raw.githubusercontent.com/bagder/curl/master/perl/contrib/formfind lo gaurdará en el archivo formfind
chmod +x = Con esto daremos permisos de ejecución a un archivo. En nuestro caso, a formfind
Bien, teniendo esto, necesitamos el formulario, para que
formfind busque todas las variables que nos interese. Simplemente, bajamos la pagina:
Una vez guardada nuestra página, vamos a analizarla con
formfind< = Si antes redirigíamos la salida a un fichero, esto hace el proceso contrario. Es decir, redirigir el contenido de pagina.html a formfind
Nos devuelve esto:
--- FORM report. Uses 'GET' to URL "secciones.php"
Input: NAME="sec" VALUE="buscador" (HIDDEN)
Input: NAME="valor" (TEXT)
Button: "Buscar" (SUBMIT)
--- end of FORM
--- FORM report. Uses 'POST' to URL "/peliculas-buscador.html"
Select: NAME="campo"
Option VALUE="letra" (SELECTED)
Option VALUE="titulo"
Option VALUE="genero"
Option VALUE="anyo"
Option VALUE="director"
Option VALUE="actores"
Option VALUE="contador_total"
Option VALUE="ultimos_dias"
[end of select]
Input: NAME="valor" (TEXT)
Select: NAME="valor2"
Option VALUE="" (SELECTED)
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
[end of select]
Select: NAME="valor3"
Option VALUE="" (SELECTED)
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE=""
Option VALUE="[0-9]"
Option VALUE=""
[end of select]
Select: NAME="valor4"
Option VALUE="3" (SELECTED)
Option VALUE="7"
Option VALUE="30"
Option VALUE="90"
[end of select]
Input: NAME="submit" VALUE="Buscar" (SUBMIT)
Input: NAME="videoclub" VALUE="1" (CHECKBOX)
--- end of FORM
WUALA! Todas las opciones que se utiliza en el formulario! . Se podría hacer manualmente, es decir, analizando todo el código fuente de la página, pero esto es mucho mas cómodo
Vamos al lío...
Primera variable:
Select: NAME="campo"
Y sus posibles valores... (solo nos interesa una)
Option VALUE="letra" (SELECTED)
Option VALUE="titulo"
Option VALUE="genero"
Option VALUE="anyo"
Option VALUE="director"
Option VALUE="actores"
Option VALUE="contador_total"
Option VALUE="ultimos_dias"
Segunda variable:
Input: NAME="valor"
Y como valor, se pone un número.
Resumiendo....
Debemos hacer una petición con
cURL rellenando el formulario con
campo=contador_total y
valor=0Pues vamos a probar:
-d = Utiliza variables del formulario. En este caso, lo hemos usado dos veces, porque necesitabamos rellenar campo y valor
Eureka!!! La pantalla no para de parpadear con muchas letras, seuro que ha funcionado... Y efectivamente, asi es
Pero esto no acaba aquí.... Recordemos que esto nos lleva a otra página, que luego esta misma nos llevará a otra, y, solo después, al link de nuestro torrent
Vamos a hacer una cosa...
Entramos en una página cualquiera, y vemos como es el enlace que nos lleva a la última página antes del link que necesitamos. Un ejemplo:
Yo usaré el primero de todos:
http://www.mejortorrent.com/peli-descargar-torrent-2444--3-colegas-y-una-salchicha.html
Analizando el enlace que tiene dentro, veo que es una cosa asi:
http://www.mejortorrent.com/secciones.php?sec=descargas&ap=contar&tabla=peliculas&id=2444&link_bajar=1
Os habeis fijado? El único elemento identificativo es un ID.
Vamos a buscar ese torrent en los resultados de curl (recordar que podeis redirigir la salida de curl a un fichero para tenerlo siempre a mano):
<a href='/peli-descargar-torrent-2444--3-colegas-y-una-salchicha.html' title='Descargas totales: 6931
Pues ya lo tenemos. Dentro de cada link se encuentra, en medio de él, un ID.
Y que pasa cuando entramos dentro para descargar el torrent?
Obtenemos esta página, la última antes de tener el link de descarga.
Pues bien, vamos a resumirlo, porque son muchas cosas de golpe...
cURL nos devuelve las páginas. En ellas, se encuentra las web con el ID dentro de ellas. Si entramos allí, vemos una página con info de la peli, una imágen, y un link que hace uso de ese ID para mandarlos a la última pagina antes de obtener el enlace.
Es decir, tenemos 2 niveles que superar para llegar a nuestro deseado link.
Pero antes, necesitamos "limpiar" lo que obtenemso de cURL. Para ello usaremos
grep| = Esta barra vertical nos srive para pasar la salida de un comando a otro (de forma resumida)
grep peli-descargar = Grep nos sirve para aislar texto que nos interesa del que no. En este caso, buscaremos solo las lineas que contengan peli-descargar
Obtenemos justo lo que queremos... Bien, vamos a intentar obtener el ID... para eso usaremos
cutcut = Lo que su nombre indica, cortar
-d- = El parámetro -d indica el delimitador. En este caso, le hemos indicado que "corte" el texto en trozos delimitados por - (-d-)
-f4 = Una vez delimitado el texto, cogemos una fila. Cogemos la fila número 4 porque allí es donde se encuentra el ID.
Me explico:
Fila1-
Fila2-
Fila3-
Fila4-Fil....
<a href='/peli-descargar-torrent-5012-Amityville-6.html' title='Descargas totales: 2307
Con esto, obtendremos el listado de todos los ID's
OK, es el momento de programar un script. Este paso es bastante dificil, y se recomienda buscar mucha info para familiazarte con los scripts.
Crearemos un archivo nuevo (el mio se llamará
script), y lo abrimos con cualquier editor de textos:
Varias cosas que comentar:
WEB=$() = Hemos creado una variable. Se llama WEB, y cuando usemos $WEB, se usará lo que haya dentro (como hemos usado $(), se ejecutará un comando)
echo "X" = Muestra en pantalla X. Si es una variable, mostrará el contenido de la variable
for X in Y; do............done = Esto es un bucle. Lo que quiere decir es que se hará una determinada tarea tantas veces como elementos X haya en la variable Y. En nuestro caso, se ejecutará un comando echo por cada ID que haya dentro de la variable $(echo "$WEB" |grep peli-descargar | cut -d- -f4)
Guardamos el
script y le damos permisos de ejecución con
chmod +x scriptEjecutamos con:
./scriptNos devuelve todos los ID's
Hasta este punto tenemos todos los conocimientos necesarios para acabar el script:
#!/bin/bash
WEB=$(curl -s -d campo=contador_total -d valor=0 http://www.mejortorrent.com/peliculas-buscador.html)
for ID in $(echo "$WEB" |grep peli-descargar | cut -d- -f4); do
TORRENT=$(curl -s "http://www.mejortorrent.com/secciones.php?sec=descargas&ap=contar&tabla=peliculas&id=$ID&link_bajar=1" | grep Pincha | cut -d"'" -f2)
echo http://mejortorrent.com$TORRENT
done
Como podeis ver, hemos aprovechado que estamos en el bucle (es decir, tratamos a cada linea de forma individual con los comandos), para obtener con curl la última página antes del link y "limpiar" ese texto. Después van a buscar el link por medio de
grep y
cut.
Aquí el resultado:
Salu2