Automatiser le téléchargement de ses séries avec FlexGet

le 14/10/2014 dans Linux #console#Linux#python#Raspberry Pi#terminal#torrent

Suite à un déménagement, mon réseau local s'est élargi avec l'installation d'un NAS et l'achat d'un Raspberry Pi ; ce dernier me permet bien évidemment d'accéder aux contenus du NAS sur lequel un clien torrent tourne pour télécharger les derniers épisodes des séries que je suis.
La question était alors de gérer le téléchargement des fichiers torrent sans avoir à passer par l'interface graphique du Raspberry Pi ; la réponse : FlexGet.

Installation

FlexGet repose sur Python et l'installation en est facilitée grâce à pip. S'il n'est pas installé :

$ sudo apt-get install python-pip

Pour installer FlexGet :

$ sudo pip install flexget

Cette commande va installer FlexGet ainsi que toutes ses dépendances. Pour vérifier que FlexGet est bien installé :

$ flexget -V
1.2.205
You are on the latest release.

Si vous n'avez pas ce message mais des erreurs de dépendances comme ceci :

$ flexget -V
Traceback (most recent call last):
  File "/usr/local/bin/flexget", line 5, in 
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2749, in 
    working_set = WorkingSet._build_master()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 446, in _build_master
    return cls._build_from_requirements(__requires__)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 459, in _build_from_requirements
    dists = ws.resolve(reqs, Environment())
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 632, in resolve
    raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (six 1.5.2 (/usr/lib/python2.7/dist-packages), Requirement.parse('six>=1.7.0'))

lancez l'upgrade des packages qui posent problème (ici, six) :

$ sudo pip install --upgrade six

Configuration

La configuration de FlexGet utilise le format YAML, la structure s'appuyant sur des indentations "incrémentées" de deux ou quatre espaces (ne pas utiliser de tabulations).

Les fichiers de configuration doivent se trouver dans le répertoire .flexget de votre /home :

$ mkdir $HOME/.flexget

Dans ce dossier, il vous faut au moins créer le fichier config.yml. Pour tout savoir de la configuration et de l'utilisation de FlexGet, parcourez la riche documentation disponible sur le site et plus particulièrement ici la partie consacrée au plugin Series et le Cookbook.

Personnellement, je n'utilise FlexGet que pour récupérer les fichiers torrent, je ne l'ai pas "interfacé" avec mon client rTorrent (que j'utilise comme daemon) qui se charge de surveiller un répertoire et, une fois les téléchargements achevés, de déplacer les fichiers.

J'ai choisi de séparer la configuration à proprement parler de la liste des séries à "surveiller" et ai donc deux fichiers : config.yml et series.yml, ce dernier étant appelé dans le premier. Les voici :

  • config.yml
templates:
  # Paramètres globaux pour les séries
  series_global:
    download: ~/NAS_DOWN/
    # Flux RSS à récupérer
    inputs:
      - rss: { url: 'http://ezrss.it/feed/' }                      # EZRSS
      - rss: { url: 'http://rss.bt-chat.com/?group=3' }            # BT-Chat (EZTV)
      - rss: { url: 'http://rss.bt-chat.com/?group=2' }            # BT-Chat (VTV)
    # Vérifier si l'épisode n'est pas déjà présent
    exists_series:
      - '~/NAS_DOWN'
      - '~/NAS/Series'
  # These are the shows I regularly watch
  series_suivies:
    # La liste des séries à suivre est dans un autre fichier
    include: [ series.yml ]
  # Paramètres pour premiers épisodes de nouvelles séries
  series_premieres:
    thetvdb_lookup: yes
    require_field: tvdb_genres
    regexp:
      reject:
        - animation: {from: tvdb_genres}
        - documentary: {from: tvdb_genres}
        - talk show: {from: tvdb_genres}
        - game show: {from: tvdb_genres}
        - reality: {from: tvdb_genres}
        - children: {from: tvdb_genres}
        - food: {from: tvdb_genres}
        - home and garden: {from: tvdb_genres}
    series_premiere: yes
# Définition des tâches : flexget execute --task XX    
tasks:
  Series:
    priority: 10
    template:
      - series_global
      - series_suivies
  Series_Premieres:
    priority: 40
    template:
      - series_global
      - series_premieres
    # We use the manual plugin so that this task only runs when explicitly called
    manual: yes
  # Pour initier la base de données avec les séries déjà existantes
  # flexget execute --tasks Series_Init --disable-advancement --learn
  Series_Init:
    find:
      regexp: .*(avi|mkv|mp4)$
      path: ~/NAS_DOWN
      path: ~/NAS/Series
      recursive: yes
    template: series_global
    # We use the manual plugin so that this task only runs when explicitly called
    manual: yes
  • series.yml
series:
  settings:
    best:
      upgrade: yes
      quality: 720p hdtv+
      target: 720p
      timeframe: 6 hours
      propers: 12 hours
    normal:
      quality: "<=720p hdtv+"
      target: "<720p"
      timeframe: 6 hours
      propers: 12 hours
    webrip:
      quality: "<=720p webrip|webdl"
      target: "<720p"
      timeframe: 6 hours
      propers: 12 hours
  # Les series pour lesquelles je souhaite avoir les versions en 720
  best:
    - 24
    - Game of Thrones
    - Hell on Wheels
    - Homeland
    - Mad Men
    - The Walking Dead
    - Utopia
  # Les autres series avec resolution plus basse
  normal:
    - Banshee
    - Black Sails
    - Californication
    - Falling Skies
    - Fargo
    - Haven
    - Helix
    - How I Met Your Mother
    - Justified
    - Leverage
    - Line Of Duty
    - Longmire
    - Ray Donovan
    - Shameless (US)
    - Sons of Anarchy
    - The 100
    - The Big Bang Theory
    - The Leftovers
    - The Musketeers
    - The Newsroom
    - The Tunnel
    - Tyrant
    - Under The Dome
    - Vikings
    - Youre the Worst
  # Pour les "web series"
  webrip:
    - House of Cards
    - Orange Is The New Black

Cette configuration est à retrouver sur GitHub.

FlexGet permet également de télécharger les sous-titres automatiquement grâce au plugin Subliminal mais je préfère utiliser d'autres utilitaires, comme expliqué dans cet article.