sábado, 8 de diciembre de 2012

descarga automáticamente nuevos capítulos de series

con tu RaspberryPi y un poco de magia linuxera

Buenas tardes, aprovechando que me han baneado injustamente del tracker privado donde estaba apuntado (lo siento Xesco), comparto con vosotros mi último script. Sirve básicamente para descargar via torrent los capítulos de tus series preferidas, desde Pirate Bay. En mi caso las bajo en inglés y luego me bajo los subtítulos, esta parte aun no la e terminado, así que los subtítulos a mano y los capítulos automáticos.

Bueno bueno bueno, Pirate Bay seguramente no es lo mejor de lo mejor para cualquier otro idioma que no sea inglés, pero como mi señora y yo somos un poco agonías y no podemos esperar a que salga la serie en español, la vemos en inglés subtitulado, además tiene más gracia. Así que como os decía, este script made in Juanmol, busca las series y las descarga, y ya que estamos me manda un whatsapp avisándome de que se lo está bajando. Lo llamaremos /usr/local/bin/busca_torrents.sh :
#/bin/bash
# programado por Juanmol para http://rsppi.blogspot.com
listado=/root/seriesdescargadas/listado.txt
tmp=/tmp/salida
series="once upon a time,fringe,how i met your mother,big bang theory,bones,grey anatomy"

IFS=','; for n in $series;
do
        serie=$n;
        wget "http://thepiratebay.se/search/$serie/0/7/0" -O $tmp ;
        magnet=$(cat $tmp | grep magnet | head -1 | cut -f2 -d\");
        capitulo=$(echo $magnet | sed 's/\ /\n/g' | sed 's/\./\n/g' | sed 's/\+/\n/g' | grep S | grep E

        if [ $(cat $listado | grep "$serie" | grep $capitulo | wc -l) = 1 ];
        then
                echo ya se descargo;
        else
                echo no existe, se descarga;
                echo $serie $capitulo >> $listado;
                transmission-remote -a "$magnet";
                /usr/local/bin/encola_whatsapp.sh 666777888 "descargando automaticamente $serie $capitulo";
        fi
done
y que no se te olvide crear antes de nada el archivo con el log:
mkdir -p /root/seriesdescargadas/
touch /root/seriesdescargadas/listado.txt
es perro perro, pero funciona de maravilla. Tienes que poner las series en ese formato, separadas por comas, por supuesto pon tu número de móvil en lugar de 666777888. Funciona con algo de lógica, se supone que ya as visto los capítulos anteriores y se baja el que mas semillas tiene, que suele ser el nuevo. Si ya lo ha bajado, no lo vuelve a bajar. Para descargar los torrents usa el transmission, que ya lo hemos configurado en otros posts. Yo lo llevo usando unos días y no ha fallado. Ahora añadimos la siguiente línea al archivo /etc/crontab para que se ejecute cada 20 minutos:
*/20 * * * * root /bin/bash /usr/local/bin/busca_torrents.sh
A ver si termino la parte de que se baje también los subtítulos de forma automática ... si alguien se ofrece voluntario y comparte sus conocimientos, le estaré eternamente agradecido.
Añado una captura de los avisos via whatsapp, los dos primeros indican que el torrent ya se ha descargado, esto lo configuras en el transmission-daemon, como ya he explicado en otros posts:
ACTUALIZACIÓN:
como no tengo narices de poner en marcha el FleshGet (gracias Xesco), le he puesto unas mejoras a mi script, ahora además se descarga los subtítulos, aquí lo tenéis:
#/bin/bash
listado=/root/seriesdescargadas/listado.txt
tmp=/tmp/salida
series_vip="once upon a time,fringe,how i met your mother,big bang theory,bones s08*,modern family,game of thrones s03*,the walking dead"

IFS=','; for n in $series_vip;
do
        serie=$n;
        wget "http://thepiratebay.se/search/$serie/0/7/0" -t 2 -T 2 -O $tmp ;
        magnet=$(cat $tmp | grep VIP | grep magnet | head -1 | cut -f2 -d\");
        if [ "$(echo $magnet | wc -c)" -gt "10" ];
        then
                capitulo=$(echo $magnet | sed 's/\ /\n/g' | sed 's/\./\n/g' | sed 's/\+/\n/g' | grep S | grep E);
                serie=$(echo $serie | sed 's/\*//g');

                if [ $(cat $listado | grep "$serie" | grep $capitulo | wc -l) = 1 ];
                then
                        echo ya se descargo;
                else
                        capitulo_sub=$(echo $capitulo | sed 's/S0//g' | sed 's/S//g' | sed 's/E/x/g');
                        serie_sub=$(echo $serie | sed 's/\ /-/g');
                        sub_url=http://www.subtitulos.es/$serie_sub/$capitulo_sub ;
                        wget $sub_url -O /tmp/buscame.down ;
                        url_final=$(cat /tmp/buscame.down | grep "/5/" | head -1 | cut -f2 -d\") ;
                        echo $serie $capitulo >> $listado;

                        wget --referer $sub_url $url_final -O "/mnt/porver/$serie $capitulo.srt";

                        transmission-remote -a "$magnet";
                        /usr/local/bin/encola_whatsapp.sh 666555444 "descargando automaticamente $serie $capitulo";
                fi
        fi
done

series="grey anatomy"
IFS=','; for n in $series;
do
        serie=$n;
        wget "http://thepiratebay.se/search/$serie/0/7/0" -t 2 -T 2 -O $tmp ;
        magnet=$(cat $tmp | grep magnet | head -1 | cut -f2 -d\");
        if [ "$(echo $magnet | wc -c)" -gt "10" ];
        then
                capitulo=$(echo $magnet | sed 's/\ /\n/g' | sed 's/\./\n/g' | sed 's/\+/\n/g' | grep S | grep E);
                serie=$(echo $serie | sed 's/\*//g');

                if [ $(cat $listado | grep "$serie" | grep $capitulo | wc -l) = 1 ];
                then
                        echo ya se descargo;
                else
                        capitulo_sub=$(echo $capitulo | sed 's/S0//g' | sed 's/S//g' | sed 's/E/x/g');
                        serie_sub=$(echo $serie | sed 's/\ /-/g');
                        sub_url=http://www.subtitulos.es/$serie_sub/$capitulo_sub ;
                        wget $sub_url -O /tmp/buscame.down ;
                        url_final=$(cat /tmp/buscame.down | grep "/5/" | head -1 | cut -f2 -d\") ;
                        echo $serie $capitulo >> $listado;

                        wget --referer $sub_url $url_final -O "/mnt/porver/$serie $capitulo.srt";

                        transmission-remote -a "$magnet";
                        /usr/local/bin/encola_whatsapp.sh 666555444 "descargando automaticamente $serie $capitulo";
                fi
        fi
done

si os fijáis ahora esta como dividido en dos "series" y "series_vip" es para minimizar los falsos positivos, hace referencia a esto:
por supuesto no está exento de fallos, pero por ahora va de maravilla ;)

46 comentarios:

  1. Dios !! que envidia y yo sin sacarle punta a nada!!!

    ResponderEliminar
  2. Se me ocurre esto para los subtitulos, pero no se si es factible:

    Yo las series que bajo siempre las busco en del mismo usuario que las sube, y las suele subir con los subtitulos incorporados. Si se puede buscar la serie subida por "x" usuario ya se bajaria con subtitulos.

    ResponderEliminar
  3. Buenas aqui mi sistema:
    - Para dar de alta que series quiero ver uso http://trakt.tv/ Puedes crear tantas listas como quieras. Tambien vale para pelis. La ventaja es que no tienes que tocar ficheros para añadir / borrar series. Y que lo puede hacer cualquiera (WAF certified)

    - Luego, uso Flexget: http://flexget.com/ con diversas fuentes (isohunt, piratebay etc). Flexget tiene un módulo que permite filtrar los rss usando la info de trakt. Es fascinante la cantidad de cosas que se puede hacer con flexget. Te recomiendo que le eches un vistazo. Si interesa puedo poner mi configuración.

    - Flexget alimenta con los ficheros que cumplen los criterios un cliente de torrent. Está perfectamente integrado con deluge http://dev.deluge-torrent.org/ (si no lo has probado lo recomiendo)

    - Cuando deluge acaba de descargar un torrent, puede ejecutar algún script. El mio lo que hace es llamar a:
    - Filebot http://filebot.sourceforge.net/ Que si lo configuras bien, te ordena y renombra las series / pelis y te baja los subtitulos. La unica que pega es que es java :)
    - Filebot me manda un mail cada vez que "ordena" algo.
    Luego todo esto lo veo con un xbmc, que cuando lo enciendo escanea la libreria y me dice que cosas nuevas hay para ver.

    Si quieres información sobre algun paso intermedio lo cuento :)

    ResponderEliminar
    Respuestas
    1. Anonimo, podias currarte un tuto de esto ultimo que acabas de comentar ;) interesa mucho.

      Fdo. Otro usuario de XBMC

      Eliminar
    2. En cuanto saque algo de tiempo detallo un poco mas cada cosa.

      Eliminar
    3. la parte de configuracion del flexget con trakt ... me esta consumiendo la vida! ¿podrias poner por aquí tu configuración? si no es mucho pedir ...

      Eliminar
    4. Hola.
      Configuración de flexget. Simplemente hay que ir despacio, añadiendo funcionalidad. Un buen editor de linea de comando (nano jeje) y ya esta.
      Esta es mas o menos mi configuración. Sirve para descargar pelis y series. Hay muchos mas ajustes que se pueden hacer.

      presets:
      movies:
      regexp:
      reject:
      - 3D: {from: title}# Bloquea todos los torrent con la palabra 3D en su título. (no tengo 3D)
      - R5: {from: title}# Las siguientes expresiones intentan detectar torrents que tengan una calidad pobre.
      - WEBSCR: {from: title}
      - Cam: {from: title}
      content_size:
      max: 16000
      min: 4000
      imdb_required: no
      deluge:
      path: /media/data/deluge/temp
      movedone: "/media/data/deluge/seeding/Movies/"
      ratio: 1
      removeatratio: yes
      label: Movies

      tv:
      import_series:
      from:
      trakt_list:
      username: username
      password: password
      api_key: apikey
      custom: following shows #lista personalizada del trak
      strip_dates: no
      settings:
      quality: 720p
      identified_by: ep
      regexp:
      reject:
      - 3gp
      thetvdb_lookup: yes
      set:
      path: /media/data/deluge/temp
      movedone: "/media/data/deluge/seeding/Series/"
      ratio: 1
      removeatratio: yes
      label: TVShows
      deluge:
      main_file_only: yes

      tasks:
      seed_watchlist:
      # priority plugin is used so that this feed runs before the actual download feed
      priority: 10
      interval: 2 hours
      trakt_list:
      api_key: apikey
      username: username
      movies: watchlist #En este caso es la lista publica del trakt
      accept_all: yes
      queue_movies:
      quality: 1080p bluray
      force: no

      isohuntmovies search:
      priority: 12
      preset: movies
      torrent_alive: 5
      discover:
      what:
      - emit_movie_queue: yes
      from:
      - piratebay: yes
      - isohunt: movies
      - torrentz
      type: movies
      movie_queue: yes

      thepiratebayfeed:
      priority: 5
      rss: http://rss.thepiratebay.se/208 # Thepiratebay (TV Shows highres)
      preset: tv

      torlock:
      priority: 17
      rss: http://www.torlock.com/television/rss.xml # TorLock (TV)
      preset: tv

      torrentzfeed:
      priority: 30
      preset: tv
      rss: http://torrentz.eu/feed

      btchattv:
      priority: 40
      preset: tv
      rss: http://rss.bt-chat.com/?cat=9

      ezrss:
      priority: 50
      preset: tv
      rss: http://ezrss.it/feed/

      Eliminar
    5. No me ha publicado bien el formato. Poned los espacios adecuados.

      Eliminar
    6. muchisimas gracias!, seria mucho pedir que lo subieras a pastebin para que mantenga los espacios? estoy preparando un tutorial y esto que has puesto me va a venir de perlas ;)

      Eliminar
    7. Aqui lo tienes:
      http://pastebin.com/ELky5dk2

      Si necesitas info sobre filebot o deluge hazmelo saber.
      Gran trabajo con el blog!

      Eliminar
    8. buen trabajo! yo para las series uso http://showrss.karmorra.info/ que combinado con transmission me descarga las series sin tener que hacer ningún tipo de script ni ninguna tarea complicada :)

      por otro lado gpulido, usas filebot con la raspberry? cómo? y cómo haces para que se descargue el subtitulo adecuado?

      gracias!

      Eliminar
  4. Mil gracias gpulido! Estaremos a la espera!

    ResponderEliminar
  5. Hola Juanmol,

    Excelente blog! Aporta muchas ideas. Por el tema de flexget te puede ayudar / guiar esta herramienta: http://www.flexgetcfc.co.uk/ . Se trata de de generador de config files par flexget. A mi me ha ayudado como guia para crear mi propia configuración. De momento tengo Flexget + Trakt.tv + Transmision + Android push notifications y me funciona de maravilla.

    ResponderEliminar
    Respuestas
    1. creo que esa herramienta se ha quedado bastante anticuada no? al menos cuando ejecuto el yml que genera, el flexget peta por todos sitios :(

      Eliminar
    2. Si, está obsoleta.
      En Flexget están intentado crear su propia herramienta, pero tienen otras prioridades por ahora...
      De todas formas con un poco de cuidado no es tan dificil editar el yml.

      Como comentario sobre flexget que puede ser intersante:
      Flexget crea una base de datos con cada fichero de configuración distinto. Con lo que se pueden mantener distintas "instancias" de flexget en el cron con su base de datos distintas. Esto es útil si se quiere descargar aplicando filtros distintos que por algun motivo flexget no puede hacer en un solo fichero. Un ejemplo es intentar tener dos listas de peliculas con calidades distintas.

      Eliminar
  6. Yo diría que funciona para configuraciones muy sencillas, para configuraciones mas personalizadas, complicadas se queda corta. Yo la utilice como guía para empezar y probar Flexget. Mi configuración actual ya no la puedo reproducir con esta herramienta. Si puedo ayudarte en algo respecto a este tutorial que estas haciendo, por favor cuenta conmigo.

    Saludos!

    ResponderEliminar
  7. Qué opináis de SickBeard? Yo lo llevo usando sobre un año en la NAS (Synology), concretamente un fork con mayor soporte de torrents (piratebay y dailytorrents) y va de lujo. Por lo que he leído, también puede funcionar sin mayor problema en la raspi.

    ResponderEliminar
  8. Hola
    tengo el siguiente problema, al cabo de unos minutos me sale el siguiente mensaje:

    transmission-remote: (http://localhost:9091/transmission/rpc/) Timeout was reached

    He buscado y no he encontrado nada, quien me da una idea?

    Saludos

    ResponderEliminar
    Respuestas
    1. hola, se supone que hay que tener instalado el transmission-daemon http://rsppi.blogspot.com.es/2012/11/torrents-solucionado.html

      Eliminar
    2. Hola, esta iniciado el servicio y descarga sin problemas, el problema esta cuando se ejecuta el script y se agrega una tarea para descargar, sale el error:
      transmission-remote: (http://localhost:9091/transmission/rpc/) Timeout was reached

      Eliminar
    3. prueba cargarle a mano un magnet:
      transmission-daemon -a "magnet:..."
      a ver que te dice. Estamos dando por hecho que no hace falta clave, para cargar y que tienes el transmission en el mismo equipo que ejecuta el script.

      Eliminar
  9. Hola, se podria decirle en el propio script el usuario y la contraseña del Transmission para que funcione poniendo rpc-authentication-required": True o solo funcionaria poniendo eso en false??

    Saludos

    ResponderEliminar
    Respuestas
    1. hola, la respuesta que buscasnos la ofrecio Juanma en el post de descarga de pelis en hd automaticamente, pasate por alli y dale las gracias ;)

      Eliminar
  10. Hola, perdonar la ignorancia... ¿En que directorio se dejarían las series descargadas?

    Gracias!!

    ResponderEliminar
    Respuestas
    1. Eso se configura desde transmission, pones el directorio que quieras

      Eliminar
  11. A mi me dice permiso denegado al ejecutar el script, tengo todas las carpetas hechas y con permisos,...

    ResponderEliminar
  12. Hola, ¿Cómo puedo solucionar esto?

    /usr/local/bin/busca_torrent.sh: line 5: $'\r': command not found
    /usr/local/bin/busca_torrent.sh: line 6: syntax error near unexpected token `$'\r''
    'usr/local/bin/busca_torrent.sh: line 6: `IFS=','; for n in $series_vip;

    ResponderEliminar
    Respuestas
    1. Hola, ¿que hay en tu linea 5?

      Eliminar
    2. Esto http://pastebin.com/cbBnLevK
      Uso Transmission Daemon y Raspbmc

      Eliminar
    3. prueba una tontería antes de nada, en el listado de series, quítale el espacio detrás de cada coma

      Eliminar
    4. Nada mismo error :(
      De todos modos ¿se requiere de alguna librería en especial?

      Eliminar
    5. nada, ademas ese fallo no es porque te falte algo. Prueba otra cosa, creo que se lo que te falla, deja el script tal cual lo tengo yo, hasta con mis series, a ver si por lo menos empieza a hacer algo, y me comentas el resultado.

      Eliminar
    6. Nada sigue igual :(
      /usr/local/bin/busca_torrent.sh: line 5: $'\240\r': command not found
      /usr/local/bin/busca_torrent.sh: line 6: syntax error near unexpected token `$'\r''
      'usr/local/bin/busca_torrent.sh: line 6: `IFS=','; for n in $series_vip;

      Eliminar
    7. vaya mosqueo no?. Ummmm ... parece que te esta metiendo algún carácter extraño o invisible o algo por el estilo. Prueba borrar las líneas 4 5 y 6 y escríbelas a mano, no hagas copy paste.

      Eliminar
  13. A mi me ocurre el mismo error, ya no se que hacer, solo con poner en la linea de comandos y esperar unos minutos se emite el error:

    transmission-remote: (http://localhost:9091/transmission/rpc/) Timeout was reached

    ResponderEliminar
    Respuestas
    1. eso es porque el transmission remote no alcanza al transmission-daemon. Puede ser por:
      - no esta en marcha el transmission-daemon
      - no esta escuchando en el 9091
      - localhost no es alcanzable por una mala configuración de red

      Eliminar
  14. Buenas! Decir que el script funciona correctamente... en lo referente a la descarga del último capítulo de cada serie, pero subtítulos no me encuentra ni uno, porque se generan direcciones del tipo "www.subtitulos.es/castle/4x17" que no existen (error 404), y ahí se queda.

    ¿Alguna solución?

    ResponderEliminar
    Respuestas
    1. estoy revisando la parte de descargas de subtitulos, hay que pulir algunas cosas. Tengo que hacer una cola de descargas para los subtitulos, porque lo normal es que se descargue el capítulo antes de que existan los subtitulos.

      Eliminar
  15. Hay alguna forma de modificar el script para que solo te baje series en calidad 720p?

    ResponderEliminar
    Respuestas
    1. series_vip="once upon a time,fringe,how i met your mother,big bang theory,bones s08*,modern family,game of thrones s03*,the walking dead"
      lo podrias cambiar a:
      series_vip="once upon a time 720,fringe 720,how i met your mother 720,big bang theory 720,bones s08* 720,modern family 720,game of thrones s03* 720,the walking dead 720"
      bueno y quitar Fringe, que ya acabó. De todas formas, el que mas semillas tiene, que es el que el script se descarga, suele ser el de mejor calidad.

      Eliminar
  16. Tengo mi raspberry configurada para descargas con trasmission y envío de whatsapp, pero ahora quiero usar flexget para automatizar mi series en español y me está siendo imposible encontrar feeds en español, alguien me puede ayudar?

    ResponderEliminar
  17. Hola a todos, como esto nunca se hace viejo (lo de bajar series) hay una característica de transmission el cual es el iniciar descargas push, hay un portal "http://showrss.karmorra.info/" el cual hace precisamente eso, uno tan solo debe configurar las opciones web de transmission y ponerlas allí, luego seleccionas las series y allí mismo le configuras si quieres que se haga push o si te preocupa tu seguridad puedes generar un feed con ese listado de series.

    Yo lo tengo y me funciona genial.

    ResponderEliminar
    Respuestas
    1. Me puedes decir como se configura eso de las descargas push? Estoy intentándolo pero me da siempre "wrong parameters"

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

    ResponderEliminar
  19. hola, primer script, línea 12, falta un paréntesis al final del todo,

    capitulo=$(echo $magnet | sed 's/\ /\n/g' | sed 's/\./\n/g' | sed 's/\+/\n/g' | gre. S | grep E

    muchas gracias, sencillo y funcional, +1

    ResponderEliminar