Dentro de un script siempre tenemos otro que lucha por abrirse paso
Esto es algo que sabemos todos los que alguna vez hemos realizado scripts y que en definitiva saben de sobra los programadores de cualquier lenguaje: “Dentro de un script siempre tenemos otro que lucha por abrirse paso”.
Bash shell script es un lenguaje de programación en el que usamos programas a los que vamos pasando parametros por su boca y nos los dan por el culo y de los resultados que obtenemos al escribir scripts siempre tenemos codigo que podemos reciclar para usar en otros scripts.
Si uno realiza un script que te saca un listado de todas las urls en megaupload que podemos encontrar de una determinada serie en seriesyonkis.com probablemente en su interior tendremos muchos otros scripts que realizan tareas más complejas pero que si los unimos todos bien conjuntamente al final obtenemos uno más complejo.
Hoy me ha dado por crear un script que me descargue del tirón todas las urls de megavideo que puedan tener los capitulos de una determinada serie de seriesyonkis.com que le pase yo por parametro y el primer script para realizar esta tarea es este:
# Concatenar parametros en bash shell script
#!/bin/sh
# series.sh - script para descargar series de seriesyonkis.com
# Autor: Pon aqui tu nombre y tu email
espacio=" "
key=$(echo $1 $espacio $2 $espacio $3 $espacio $4 $espacio $5 $espacio $6 $espacio $7 $espacio $8 $espacio $9 $espacio ${10} $espacio ${11})
echo $key
Si por ejemplo vamos a realizar un programa que nos permita meter el determinado nombre de una serie como parametro este va a tener espacios, ejemplo:
sh series.sh la casa de la pradera
Lo mas humano es meter el nombre de la serie con espacios y ocurre por tanto que cada vez que metemos “la casa de la pradera” como parametros en realidad hemos metido 5 parametros y para mostrarlo tendriamos por ejemplo que hacer esto:
echo $1 $2 $3 $4 $5
Esto tendria sentido si supieramos que todo lo que el usuario va a escribir jamas pasará de 5 parametros pero no tenemos ni idea de que es lo que pretende buscar, en nuestro caso que serie va a tratar de buscar ya que mientras “alf” seria solo un parametro, “love hina” serian 2.
En bash para mantener cierta retrocompatibilidad con versiones antiguas del interprete si queremos mostrar el contenido del parametro decimo en adelante tendriamos que hacerlo asi.
echo ${10}
Pero si nuestro script simplemente va a pedir un parametro no nos importa lo más minimo si el usuario mete 23 palabras separadas por espacios como nombre de la serie pues podemos interpretarlos todos como si de uno se tratase:
#!/bin/sh
# series.sh - script para descargar series de seriesyonkis.com
# Autor: Pon aqui tu nombre y tu email
key=$(echo $*)
echo $key
$* por tanto es una variable que contiene todos los parametros que el usuario ha metido y que ademas nos los separa con un espacio.
Tambien nos interesa saber quizas cuantos parametros ha metido el usuario y para eso tenemos la variable $#
En series yonkis las busquedas se realizan asi:
http://www.seriesyonkis.com/buscarSerie.php?s=barrio+sesamo
http://www.seriesyonkis.com/buscarSerie.php?s=house
Lo que metemos en el input de la web para buscar pasa a la url con un + en vez de un espacio en una variable llamada s que seguramente procese el archivo buscarSerie.php para mostrar los resultados de la busqueda.
Nuestro script por tanto tiene que sustituir los espacios por un + para crear una url que muestre resultados.
#!/bin/sh
# series.sh - script para descargar series de seriesyonkis.com
# Autor: Pon aqui tu nombre y tu email
echo $* | sed -e 's/ /+/g'
Esto muestra ahora mismo lo que metamos como parametros (la casa de la pradera por ejemplo) con + en vez de espacios.
Lo pasamos a variable y nos metemos ya a usar wget para descargar los resultados y obtener lo que nos interesa unicamente de estos.
#!/bin/sh
# series.sh - script para descargar series de seriesyonkis.com
# Autor: Pon aqui tu nombre y tu email
busqueda=$(echo $* | sed -e 's/ /+/g')
La url de la busqueda actualmente es esta:
http://www.seriesyonkis.com/buscarSerie.php?s=barrio+sesamo
Nuestra variable $busqueda tendria por tanto que ir tras “s=” de forma que quedaria asi:
http://www.seriesyonkis.com/buscarSerie.php?s=$busqueda
Usaremos wget para conseguir los resultados de forma que asi nos queda actualmente el script:
#!/bin/sh
# series.sh - script para descargar series de seriesyonkis.com
# Autor: Pon aqui tu nombre y tu email
busqueda=$(echo $* | sed -e ’s/ /+/g’)
wget “http://www.seriesyonkis.com/buscarSerie.php?s=$busqueda” -O resultados
Pero tenemos un problema:
No conseguimos que wget descargue el archivo y si probablemente un error del tipo:
Petición HTTP enviada, esperando respuesta… 302 Found
Ubicación: no especificado
ERROR: Redirección (302) sin localización.
Usaremos curl.
#!/bin/sh
# series.sh - script para descargar series de seriesyonkis.com
# Autor: Pon aqui tu nombre y tu email
busqueda=$(echo $* | sed -e 's/ /+/g')
curl "http://www.seriesyonkis.com/buscarSerie.php?s=$busqueda" -o resultados
Aqui ya tenemos un nuevo script que lucha por abrirse paso:
# bash shell script para discriminar solo lo que nos interesa de un html
Cuando buscamos la casa de la pradera al no existir resultados obtenemos lo siguiente:
“No se han encontrado series que coincidan con:”
Eso no sale cuando si se han obtenido resultados por lo que para empezar tendriamos que comprobar si lo que almacenamos en el archivo resultado contiene esa frase y de ser asi mostraremos un mensaje diciendo que la serie no se encuentra en seriesyonkis.com
Por el momento el script podria quedar asi:
#!/bin/sh
# series.sh - script para descargar series de seriesyonkis.com
# Autor: Pon aqui tu nombre y tu email
busqueda=$(echo $* | sed -e 's/ /+/g')
curl "http://www.seriesyonkis.com/buscarSerie.php?s=$busqueda" -o resultados
elresultado=$(cat resultados | grep -c "No se han encontrado series que coincidan con:")
if [ $elresultado = 1 ]
then
echo “NO se han encontrado resultados”
else
echo “SI se han encontrado resultados”
fi
Si no se encuentran coincidencias no perderemos el tiempo, ahora tenemos que filtrar cuando si se encuentran y mostrarlas para que el usuario seleccione la que quiere y este escript pueda seguir su curso.
Ahora ya si existen resultados pillamos el primero (normalmente si hemos puesto una buena palabra de parametro tendria que ser el de la serie) y accedemos de nuevo a esa url para ver ya la lista de captulos.
De esa lista de capitulos nos interesan los que tengan un icono de megaupload, es decir, que son descargables de magaupload ya que nuestra finalidad es la de simplemente escribir: sh series.sh house y que nos de el script urls de megaupload para descargar todos los capitulos.
La lista que obtenemos ya es cosa de cada uno si meterla a jdownloader o al gestor de descargas que le venga en gana.
Como no ando con muchas ganas ahora mismo lo dejo asi el script y ahora mismo lo unico que hace por tanto este script es decirnos si esta en series yonkis lo que buscamos y darnos una url en caso de existir (puede tener errores).
La url que nos da es la de todos los capitulos por lo que para rematar el script si tenemos firefox metemos lo siguiente:
seriessh
El resultado de la busqueda se transforma en la url de seriesyonkis.com donde estan todos los capitulos.
Creo que para no joder a seriesyonkis es mejor no automatizar más, es decir, al final esta gente vive de que visitemos su web y si obtenemos todo sin siquiera visitarles directamente y sin hacer clic en la publi o comernosla directamente al final pues creo que esto les podria joder.
Pero no es dificil continuar el script para sacar listados de urls, aunque los de seriesyonkis meten demasiadas paginas de por medio (cosas de que nos comamos mas publicidad) por que perfectamente podrian mostrar la lista en formato plano para que la gente lo metiese en jdownloader.
Si alguno termina el script y quiere publicar por aqui como que comente :D.

























