martes, 29 de enero de 2013

Descarga automática de pelis en HD ¡ACTUALIZADO!

... siendo un poco más elegantes

En este post, publiqué un script para descargar automáticamente torrents de pelis en HD, peeeero como muy bien ponía, no era muy profesional. Viendo los comentarios, me he decidido a limpiar y reestructurar un poco el código y este es el resultado. No lo he puesto en el mismo post, para que poco a poco vaya muriendo y tampoco lo he borrado, porque creo que contiene comentarios muy interesantes.

este es el script /usr/local/bin/busca_pelis.sh
#!/bin/bash
# programado por Juanmol para http://rsppi.blogspot.com
minimo=70
wget http://thepiratebay.se/search/es%7Ccastellano%7Cesp%7Cspanish/0/7/207 -O /tmp/salida_pelis2

echo $(cat /tmp/salida_pelis2 | grep -e "/torrent/" -e "magnet:" | sed 's/\ /\n/g' | grep href | grep -v "/user/" | cut -f2 -d\") | sed 's/\ /@/g' | sed 's/\//@/g' | sed 's/@@/\n/g' | sed 's/torrent@//g' | grep -i -v -f /usr/local/bin/lista_negra.txt > /tmp/filtro.txt

cat /tmp/filtro.txt | sed 's/^@//g' > /tmp/filtro_tmp.txt
mv /tmp/filtro_tmp.txt /tmp/filtro.txt

for n in $(seq 1 $(cat /tmp/filtro.txt | wc -l ));
do
        codigo=$(cat /tmp/filtro.txt | head -$n | tail -1 | cut -f1 -d@);
        peli=$(cat /tmp/filtro.txt | head -$n | tail -1 | cut -f2 -d@ | cut -f2 -d@ | cut -f1 -d\[ | cut -f1 -d\- | cut -f1 -d\( | sed 's/_/\ /g' | sed -e 's/ENG//g' -e 's/ESP//g' -e 's/Sub//g' -e 's/720p//g' -e 's/1080p//g' -e 's/BluRay//g' -e 's/DTS//g' | sed 's/\./\ /g');
        magnet=$(cat /tmp/filtro.txt | head -$n | tail -1 | cut -f3 -d@);
        echo la peli: $peli;
        echo el codigo: $codigo;
        echo el magnet: $magnet;
        if [ $(cat /root/pelisdescargadas/listado.txt | grep $codigo | wc -l) = 0 ];
        then
                echo se descargaria;
                echo $codigo >> /root/pelisdescargadas/listado.txt;
                wget "http://www.imdb.com/find?q=$peli&s=tt&ttype=ft&ref_=fn_ft" -O /tmp/busqueda_pelis 2> /dev/null;
                imdb_code=$(cat /tmp/busqueda_pelis | sed 's/(/\n/g' | grep -i $peli | grep "findResult" | head -1 | cut -f6 -d\" | cut -f3 -d\/) ;
                wget "http://www.imdb.com/title/$imdb_code/" -O /tmp/busqueda_pelis 2> /dev/null ;
                rating=$(cat /tmp/busqueda_pelis | grep -i ratings | grep ratingValue | cut -f 3 -d\> | cut -f1 -d\< | sed 's/\.//g');
                genero=$(echo $(cat /tmp/busqueda_pelis | grep -i genre | grep tt_ov_inf | cut -f2 -d\> | cut -f1 -d\<));
                echo la peli $peli tiene un rating de $rating y genero $genero;
                if [ "$(echo $rating)"  -gt "$minimo" ];
                then
                        echo la puntuacion permite descargarla;
                        if [ $(echo $genero | grep -i -v -f /usr/local/bin/generos_no_permitidos.txt | wc -l ) = 0 ];
                        then
                                echo uno de los generos esta baneado;
                        else
                                echo A DESCARGAR!;
                                transmission-remote -a "$magnet";
                                /usr/local/bin/encola_whatsapp.sh 666777888 "descargando automaticamente $peli con una puntuacion de $rating y genero $genero";
                        fi
                else
                        echo la puntuacion es menor de $minimo;
                fi
        else
                echo ya existe, no se descarga;
        fi
done
rm /tmp/busqueda_pelis /tmp/filtro.txt
Por si falla el copypaste, aquí tienes el código en pastebin. Tienes que crear también el fichero /usr/local/bin/lista_negra.txt que en mi caso contiene:
latin
evangelion
screener
documental
3d
dublado
saga
oacute
que son las búsquedas que ignorará y también tienes que crear el archivo /usr/local/bin/generos_no_permitidos.txt que en mi caso contiene:
Short
Comedy
Romance
Thriller
Horror
que son los géneros que no descargará. Ahora solo tienes que editar la 3ª línea del script (si quieres) y cambiarla por la puntuación mínima (sobre 100) que tiene que tener la película para ser descargada.
Los torrents se descargan por transmission, se buscan en Pirate Bay y se consultan en IMDB. Ahora solo hay que añadir la línea al archivo /etc/crontab:
*/30 * * * *   root    /bin/bash /usr/local/bin/busca_pelis.sh
que no se te olvide:
mkdir -p /root/pelisdescargadas
y a disfrutar! Este post AHORA si que es la leche ...
ACTUALIZACIÓN 11/02/2013:
he actualizado el script, tenia algunos "poritos"

27 comentarios:

  1. Gran blog, muy buen artículo, me da ideas para probar cosas.

    De todas formas, con flexget estoy seguro que se pueden hacer esas virguerías y muchas otras, yo lo uso para descargar series copiando una plantilla que encontré por ahí y me va muy bien, alguna se me escapa, pero en general va bien quedando automatizado con el cron.

    Al acabar de descargar el torrent, establezco permisos de escritura sobre lo descargado, ya que en caso de que cree una carpeta tengo que poder escribir en ella los subtítulos correspondientes, además actualizo la biblioteca de xbmc, de esa forma ya está el capítulo disponible. En el momento de la reproducción, descargo los subtítulos con el propio xbmc. Lo ideal sería automatizar también la descarga de los subs, pero eso no sé cómo hacerlo.

    ResponderEliminar
    Respuestas
    1. Holas, yo estoy montando un sistema de descarga de series similar. El flexget efectivamente da muuuuuucho de si... tengo el mismo problema con los subtitulos... basicamente no encuentro ningun sitio de subs que los envie (ya sean torrents, zips, rars o directamente el sub en .srt o .sub) por rss. seria la caña porque entonces el propio flexget me los bajaria según van saliendo... ultimamente he estado jugando con una libreria de python llamada subliminal que teoricamente se descarga subs de varios sitios... pero sin exito... te dejo el enlace al sitio por si te sirve de algo: https://github.com/Diaoul/subliminal

      Un saludo.

      Eliminar
    2. Abundando mas en el tema subtitulos me he encontrado otra libreria en python llamada periscope que si que funciona. Se baja subtitulos de subtitulos.es y otros 4 o 5 sites famosillos mas. Y lo mas interesante para mi, se invoca desde linea de comandos, con lo que podemos hacer scripts al gusto...

      ejemplo: periscope The.Following.S01E04.HDTV.x264-LOL.mp4

      Si encuentra el subtitulo se lo baja y lo deja en la misma carpeta que el archivo de video...

      Un saludo.

      Eliminar
    3. interesantisísimo, esta misma tarde lo pruebo y actualizo el script de la descarga de series. Gracias por la info.

      Eliminar
  2. Genial!, pero y si no quiero que sean solo en español, puedo cambiar la url del principio cierto?. también seria genial agregarle para que busque los subtitulos. intentare a ver si puedo.
    gracias por tus ayudas! saludos

    ResponderEliminar
  3. Alguna idea de donde se pueden bajar los subtitulos también ? Gracias !

    ResponderEliminar
    Respuestas
    1. yo bajo los de las series de www.subtitulos.es , en el post de descarga automática de series lo hago de forma automática, aunque tengo que revisar el script.

      Eliminar
  4. Genial, muchas gracias Juan Mol. Porfin he podido implementar un script (me faltaba tiempo para intentar bien), solo he tenido que cambiar unas cositas a tu script, lo puse con alertas a gmail, le cambie la ruta

    /root/pelisdescargadas/listado.txt

    ya que no me daba permisos de escritura, entonces la puse en

    /home/pi/pelisdescargadas/listado.txt.
    y en la linea

    transmission-remote -a "$magnet";

    le puse para el usuario y la contraseña

    transmission-remote -n usuario:contraseña -a "$magnet";

    y listo funciona perfectamente

    ResponderEliminar
    Respuestas
    1. Estimado, hice tus modificaciones por las dudas, pero aun no bajo ninguna peli.
      Donde puedo ver porq no esta descargando? gracias

      Eliminar
    2. Ademas, acabo de ver que la carpeta /media/datos/peliculasdescargadas tenia como propietario root, lo cambie por daemon-transmission. esto esta bien?
      gracias !!
      Pd. voy a probar bajar la exigencia a %20 para ver si descarga. !!

      #!/bin/bash
      # programado por Juanmol para http://rsppi.blogspot.com
      minimo=70

      Eliminar
    3. Volvi a colocar root:root a la carpeta peliculasdescargadas.
      al busca_pelis.sh le puse permisos 777, y probe ejecutarla a mano pero da el error :
      bash: /usr/local/bin/busca_pelis.sh /bin/bash<M: Interprete erroneo: No exise el fichero o el directorio.

      gracias

      Eliminar
    4. ¿interprete erroneo? Ese fallo no lo conocía ¿que distro usas? Y ponte un nombre, no me gusta hablarle a un Unknown

      Eliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Gracias por tu blog. Lo estoy leyendo para ir configurando cosas en mi RPI y es una pasada.

    Tambien, he puesto el script para que se alimente transmission con nuevos torrents, pero lo que si que me he dado cuenta, es que siempre intenta descargar las mismas peliculas, pero como ya estan no las descarga...

    O soy yo que tengo algo mal en la configuración de los ficheros lista_negra y generos no permitidos, o veo que en pirataby hay menos peliculas que en la amule...

    No te ocurre a ti eso???

    De nuevo, gracias por todo así como por tu trabajo...

    ResponderEliminar
    Respuestas
    1. La inteligencia de no descargar dos veces el mismo torrent se la damos al transmission, cierto es que /root/pelisdescargadas/listado.txt estan las descargadas, pero si se cambia el nombre y se vuelve a subir ... poca inteligencia podemos tener.
      En pirate bay hay menos pelis, está claro, pero es más cómodo y seguro. La culpa de esto la tienen los trackers privados, si la gente compartiese en trackers públicos todos seríamos más felices, ya que se trata de compartir libremente, no de sacar beneficios por compartir.
      pd: mensaje dedicado a los admins de los trackers privados.

      Eliminar
  7. Buenas Juan Mol.

    Un blog excelente, me has dado varias ideas. Sólo quería comentarte algo sobre el script, que particularmente para mi es útil y cómodo al manejar varios path's en el mismo archivo y son las variables, así si tienes que cambiar el script de máquina por X razón, sólo cambias en un sitio (o rehaces de 0) pero, ya te digo, es lo que yo hago en el curro y para casa ;).

    Repito fantástico blog, me has dado algunas ideas para la raspe.

    Saludos

    ResponderEliminar
  8. Yeah!!
    Ya se dejo, ahora mi problema será buscar un disco duro más grande.

    Me sorprende tu creatividad y habilidad Juan Mol, ahora soy tu fan!

    ResponderEliminar
  9. A ver si podeis ayudarme. Ayer conseguí que me fuera, pero cuando las descargas se ponen en el Transmission, este las pausa a los pocos segundos.
    Los únicos cambios que he hecho con respecto al tutorial son la ubicación del fichero listado .txt y la ruta de donde van a ir a parar las descargas, que es un USB. El usb esta formateado en NTFS y es de 16GB
    También he cambiado en el fichero de configuración settings.json esta línea: "rpc-authentication-required": false
    Alguna idea?

    ResponderEliminar
    Respuestas
    1. me juego lo que quieras a que es un tema de permisos. Lanza a mano el transmission para que te vaya soltando en pantalla todo lo que hace, añade la descarga que te falla y verás exactamente el mensaje de error.

      Eliminar
  10. Buaaa que pasasa de blog!!! le he ido poniendo cosas a mi raspy y la verdad que van de lujo!!!
    lo que pasa yo que yo no soy mucho de descargar de piratebay.... y por eso me gustaria saber si se puede hacer para descargar de algun otro tracker con user y pass...

    la caña!! me encanta!!!!

    un saludo!

    ResponderEliminar
    Respuestas
    1. no tengo ni quiero un tracker privado, eso de ponerle usuario, clave, condiciones, cupo ... a algo de lo que no tienes los derechos ... no va conmigo ;)

      Eliminar
  11. Gran blog.

    Este post lo tengo pendiente desde hace tiempo.

    Una pregunta/idea/proposición. ¿Habría forma de buscar y descargar automáticamente las pelis que se agregan a la wishlist de IMDB? A estas se puede acceder desde un feed. También se puede configurar con IFTTT para que cuando se añada una nueva peli a la lista haga lo que sea (te lo envie por email, lo apunte a evernote etc etc etc) y que así pueda ser mas facil hacer el script. En fin, ando demasiado verde. Yo por mi parte investigaré en el tema. Pero ahi te lo propongo por si te gusta, que seguro que lo haces mejor y mas rápido.

    Un abrazo!

    ResponderEliminar
    Respuestas
    1. no tiene pinta der complicado, cuando vuelva de las vacas lo hago ;)

      Eliminar
    2. Me encanta oír eso! Estaré vigilante!

      Eliminar
    3. Este comentario ha sido eliminado por el autor.

      Eliminar
  12. Por cierto, ya tengo tu script funcionando y me va perfecto. Solo he tenido que modificar la linea
    transmission-remote -a "$magnet";
    por esta otra (Poniendo mi usuario y pass, claro):
    transmission-remote -a -n usuario:pass "$magnet";

    A ver si consigo avanzar algo con lo que te propuse.

    P.D.: Eres un fenómeno!

    ResponderEliminar