Flexget, c'est l'outil ultime du geek qui veut automatiser le téléchargement des épisodes de ses séries préférées. Pas d'interface graphique, tout se passe dans un fichier de configuration et dans les lignes de commande. Surpuissant et super flexible. Un tas de plugins qui permettent de s'intégrer à toutes sortes d'écosystèmes.

Installation

J'ai suivi la procédure décrite dans la documentation.

Il s'agit d'un outil Python. Il est nécessaire d'installer pip :

sudo apt-get install python-pip

Puis Flexget :

sudo pip install flexget

Configuration

Je vais créer un user Linux dédié pour flexget. Ce user fera partie du groupe media qui a accès à ma freebox. D'abord, je crée le groupe media, j'y crée le user download et j'y ajoute le user picuntu :

sudo addgroup media
sudo adduser download
sudo adduser download media
sudo adduser picuntu media

Ensuite je me connecte en tant que download :

sudo -u download -i

Puis je crée la configuration de flexget :

mkdir .flexget
chgrp media .flexget
cd .flexget
nano config.yml

Ma configuration :

tasks:
  tv:
    inputs:
      - rss: http://www.ezrss.it/feed/
      - rss: http://kat.ph/tv/?rss=1

    series:
      720p:
        - series1
        - series2
        - series3

    email:
       from: mon@email.com
       to: mon@email.com
       smtp_host: smtp.free.fr
       smtp_port: 25

    download:
      path: "~/.flexget/torrents"
      overwrite: yes
      fail_html: yes

schedules:
  - tasks: tv
    interval:
      hours: 1

Le fichier

Update 02/10/2016 :

tasks:
  tv:
    rss: http://showrss.info/xxxxx
    all_series: yes

    email:
      from: xxxe@xxx
      to: xxx@xxx
      smtp_host: smtp.free.fr
      smtp_port: 25

    download:
      path: "~/.flexget/torrents"
      overwrite: yes
      fail_html: yes

schedules:
  - tasks: tv
    interval:
      minutes: 15

Quelques explications

Dans le plugin inputs, j'indique à flexget quelles sources de fichiers il doit scruter. Ce sont des flux RSS qui contiennent des liens vers des torrents.

Dans le plugin configure_series, j'indique que je veux des épisodes encodés en qualité 720p, mais qu'une qualité inférieure peut aller si on n'a rien trouvé pendant 12h après la sortie de l'épisode. Je lui indique aussi que la liste des séries qui m'intéressent est sur le site betaseries.com.

Le plugin email sert à indiquer à flexget qu'il peut m'envoyer un mail quand un évènement s'y prète : téléchargement réussi ou gros plantage.

Le plugin download permet de configurer l'endroit où les fichiers .torrent doivent être sauvés. Il y a d'autres plugins qui permettent de s'interfacer plutôt avec un client bittorent (deluge ou transmission). La freebox contient un clien transmission, mais il semble que sa version ne soit pas compatible pour le moment avec flexget.

La partie schedules permet de planifier l'exécution de flexget. Ici, on va exécuter la tâche tv toutes les heures.

Intégration avec la Freebox

Je crée un lien vers le répertoire du NAS freebox qui est scruté par le client Bittorent. Lorsque un fichier .torrent y est déposé, le client bittorent de la freebox (transmission) va automatiquement le prendre en compte et le télécharger:

sudo ln -s /media/freebox/Téléchargements/A\ Télécharger/ /home/download/.flexget/torrents

Démarrage du daemon flexget comme un service Linux

Pour que flexget démarre automatiquement à chaque reboot, il faut en faire un service. Je crée donc un script d'init :

sudo nano /etc/init.d/flexget

Mon script :

#!/bin/bash
### BEGIN INIT INFO
# Provides: flexget daemon
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO 

DAEMON_PATH="/home/download"

DAEMON=flexget
DAEMONOPTS=""

NAME=flexget
DESC="Flexget Daemon"
USERNAME=download

case "$1" in
start)
  printf "%-50s" "Starting $NAME..."
  cd $DAEMON_PATH
  sudo -u $USERNAME $DAEMON $DAEMONOPTS daemon start -d
;;
status)
  printf "%-50s" "Checking $NAME..." 
  cd $DAEMON_PATH
  sudo -u $USERNAME $DAEMON $DAEMONOPTS daemon status
;;
stop)
  printf "%-50s" "Stopping $NAME" cd $DAEMON_PATH 
  sudo -u $USERNAME $DAEMON $DAEMONOPTS daemon stop
;;
restart)
  $0 stop
  $0 start
;;
*)
  echo "Usage: $0 {status|start|stop|restart}"
  exit 1
esac

Le fichier

Enregistrement :

sudo chmod +x /etc/init.d/flexget
sudo update-rc.d flexget defaults

Afin de le démarrer la première fois :

sudo service flexget start

Il ne reste plus qu'à attendre.