<Avertissement>

Cet article démontre la faisabilité d’automatiser le téléchargement de séries et explique la mise en œuvre de Flexget.

Il n’est en aucune façon une incitation au téléchargement.

</Avertissement>


Cet article est la mise à jour de l’article Flexget : téléchargement automatique de torrents, il se propose de décrire l’installation et la configuration de flexget pour surveiller un flux RSS et y télécharger le fichier torrent associé à une/des séries paramétré(s).

Ce mécanisme associé avec un client torrent permettant la surveillance d’un répertoire pour le démarrage automatique des téléchargement, permet d’automatiser la récupération de série télé au fur et à mesure de leur diffusion.


Présentation de Flexget

Flexget se base sur divers  sources de données, le script traite cette source, filtre son contenu et produit une sortie.

Flexget est entièrement configurable via un fichier de configuration où l’on défini le/les plugins à utiliser pour la source, le traitement et la sortie

Pour exemple voici quelques plugins (liste complète des plugins flexget) :

  • Plugins sources : csv, html, rss, etc.
  • Plugins de filtre : serie, imdb, etc.
  • Plugins de sortie : dowload, deluge, email, etc.

Dans la cas du sujet de cet article, les plugins utilisés pour télécharger un fichier torrent seront :

rss, serie, download, email


Installation de Flexget

En version 0.9 l’installation se résumait à une simple décompression d’une archive zip, depuis la version 1.0, il est fournis un package egg qui contient le programme mais qui gère aussi les dépendances.


Pour prendre en charge les packages python egg, il faut que le programme easy_install soit installé pour cela :

sudo aptitude install python-setuptools


On télécharge la dernière version du fichier egg sur le site Flexget puis on l’installe :

sudo easy_install FlexGet-1.0r1197-py2.6.egg


On peut simplement tester que l’installation s’est correctement effectuée par :

flexget -V

Qui devrait donner la version installée :

FlexGet 1.0r1197


Configuration

Par défaut flexget charge sa configuration d’un fichier config.yml dans le répertoire .flexget du répertoire home de l’utilisateur l’exécutant.

Il est tout fait possible de réaliser cette configuration dans un autre fichier, mais dès lors il faudra indique le nom et chemin de ce fichier dans la ligne de commande.


Le fichier de configuration doit respecter le formalisme du langage YAML (lien Wikipédia), où la hiérarchisation des données se fait via des doubles espaces, en aucun façon un fichier yml doit avoir des tabulation.

(Pour faciliter l’édition de ce genre de fichier on pourra utiliser VIM avec le paramétrage indiqué ici Afficher les caractères invisibles dans VIM)


Lors du passage à la version 1.0 de Flexget, le format du fichier de configuration à été complétement revu.


Prenons un exemple simple :

feeds:
  Series_torrent:
    rss: [URL flux RSS]
    series:
      - Une belle Serie
      - Une autre serie
    download: ~/downloads/torrentfiles

La configuration doit contenir au moins un conteneur feed qui possède en son sein autant de flux (RSS ou autre) que voulu

Chaque flux est nommé via un texte libre (ici Serie_torrent) et contient la définition/configuration des plugins à utiliser par le flux.

Chaque flux utilise couramment 3 plugins :

  • 1 plugin source : rss pour lequel on indique l’adresse du flux RSS
  • 1 plugin filtre : serie, ce plugin analyse le contenu de la source (le flux RRS) et ne retient dans ce flux que les entrées dont le nom correspond à une des séries indiqués (ici « une belle serie » et « une autre serie »)
  • 1 plugin de sortie : download, ce plugin télécharge le fichier torrent associé avec les séries filtrés dans le répertoire indiqué


Le plugin serie, est très puissant :

  • Il gère le multiple format de nom que peut avoir une série : « Une belle Serie » ou « Une.belle.Serie » ou « une belle serie »
  • Il gère les repost d’un épisode, il compris si le nom change, ainsi si l’épisode « Une.belle.Serie.S01E10.LOL » à été téléchargé et que quelques heures plus tard, l’épisode est reposté par une autre team « Une.belle.Serie.S01E10.titre.de.l’episode.VQM » ce dernier ne sera pas re-téléchargé
  • Il gère les repost pour cause de proper/repack (c’est à dire qu’un épisode est re-posté car la première version avait un problème) en re-téléchargeant l’épisode
  • Il existe des options pour ne télécharger préférentiellement les épisode répondant à une qualité donné.

Voir les autres caractéristiques ici : http://flexget.com/wiki/Plugins/series


Autre exemple utilisant la notion de qualité de l’épisode :

feeds:
  Series_torrent:
    rss: [URL flux RSS]
    series:
      Series_qualite:
        - Une belle Serie
            timeframe: 3 hours
            quality: hdtv
        - Une autre Serie
            timeframe: 3 hours
            quality: hdtv
    download: ~/downloads/torrentfiles

La qualité est définie par le mot clé quality qui peut prendre les valeurs suivantes :

1080p, 1080, 720p, 720, hr, dvd, hdtv, pdtv, dsr, dsrip


Le mot-clé timeframe indique que lorsqu’un nouvel épisode est trouvé et que celui-ci ne satisfait pas aux critères de qualité, on ne le télécharge pas tout de suite mais on attend le temps spécifié afin de s’assurer qu’un nouveau post avec la qualité voulu arrive.


Il faut définir ces options pour chaque séries, à moins d’utiliser la notion de groupe :

feeds:
  Series_torrent:
    rss: [URL flux RSS]
    series:
      settings:
        Series_qualite:
          timeframe: 3 hours
          quality: hdtv
      Series_qualite:
        - Une belle Serie
        - Une autre Serie
    download: ~/downloads/torrentfiles

On utilise ici les options de qualités et la notion de groupe.

Less options timeframe et quality sont définies dans un groupe que l’on peut nommer comme on le souhaite (ici Serie_qualite) l, lui-même défini dans un « noeud » settings

Le nom du groupe est ensuite réutilisé pour définir les séries sur lesquelles les option doivent s’appliquer.


On peut ainsi définir plusieurs groupes pour des séries différentes :

feeds:
  Series_torrent:
    rss: [URL flux RSS]
    series:
      settings:
        Series_hdtv:
          timeframe: 3 hours
          quality: hdtv
        Series_1080:
          timeframe: 3 hours
          quality: 1080p
      Series_1080:
        - Une belle Serie
      Series_hdtv:
        - Une autre serie
    download: ~/downloads/torrentfiles


Nous avons ici 2 groupes pour 2 niveaux de qualité (hdtv et 1080p), la série « Une belle serie » sera donc téléchargée en favorisant le niveau de qualité 1080p tandis que la série « une autre serie » elle sera téléchargée en qualité hdtv.


Toujours plus compliqué, si on dispose de plusieurs sources de données il faudra redéfinir les groupes dans chacun des flux, sauf si on utilise la notion de preset :

presets:
  tv:
    download: ~/downloads/torrentfiles
    series:
      settings:
        Serie_hdtv:
          timeframe: 4 hours
          quality: hdtv
      Serie_hdtv:
        - Dexter
        - Dollhouse
 
feeds:
  Series_flux_1:
    rss: [URL du flux RSS n°1]
    preset: tv
 
  Series_flux_2:
    rss: [URL du flux RSS n°2]
    preset: tv


Test

Lorsque l’on a fait son fichier de configuration il faut le tester, pour cela il existe un mode test :

flexget -c [fichier YML] --test -v


L’option « -c » est facultative si vous avez fait votre configuration dans le fichier /.flexget/config.yml

L’option « -v » indique à flexget qu’il doit afficher le détail des opérations qu’il réalise (pratique pour comprendre son fonctionnement, ses choix, débugger sa configuration)


La sortie de cette commande sera du type :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2010-03-15 22:08 INFO     manager                       Test mode,  creating a copy from database ...
2010-03-15 22:08 INFO     manager                       Test database  created
2010-03-15 22:08 INFO     feed          Series_torrent  Produced 20  entries.
...
+ filter   seen         Rejected Serie A S06E17 PROPER  HDTV XviD-2HD
+ filter   seen         Rejected Serie B S06E07 HDTV XviD-FQM
...
+ filter   series       Rejected Serie A  S06E17 HDTV  XviD-XII (already downloaded)
+ filter   series       Rejected Serie B S06E01 HDTV XviD-P0W4 (already  downloaded)
...
+ filter   series       Accepted Serie A  S06E20 HDTV XviD-2HD (quality met, timeframe unnecessary)
+ filter   series       Accepted Serie A  S06E21 HDTV XviD-2HD (quality met, timeframe unnecessary)
...
2010-03-15 22:08 INFO     feed          Series_torrent  Accepted: 0  (Rejected: 18 Undecided: 2 Failed: 0)
...
2010-03-15 22:08 INFO     download      Series_torrent  Would download: Serie A S06E20 HDTV XviD-2HD
2010-03-15 22:08 INFO     download      Series_torrent  Would download: Serie A S06E21 HDTV XviD-2HD
...
2010-03-15 22:08 INFO     download      Series_torrent  Would write: Serie A S06E20 HDTV XviD-2HD
2010-03-15 22:08 INFO     download      Series_torrent  Would write: Serie A S06E21 HDTV XviD-2HD
...
+ undecided              Serie C S04E19 HDTV XviD-LOL
+ undecided              Serie C S04E18 HDTV XviD-LOL
...
2010-03-15 22:08 INFO     manager                       Removed test  database


Ligne 1-2 : on voit que l’on est en test puisque flexget créé une base de données de test (dans il stock les séries déjà téléchargés, entre autre)

Ligne  3 : le nombre d’entrées (épisodes) détecté dans le flux

Ligne 5-6 : les entrées rejetées car déjà présente lors du lancement de flexget précédent

Ligne 8-9 : les entrées rejetés car l’épisode à déjà été téléchargé (repost d’un épisode par une autre team)

Lignes 11-12 : les entrées acceptées

Lignes 14 : récapitulatif des traitements

Lignes 16-17, 19-20 : Les 2 entrées acceptées, sont téléchargées et le fichiers est écrit sur le disque

Lignes 22-23 : des entrées/épisodes trouvés dans le flux RSS, mais la série correspondante n’est pas configurée

Linge 25 : purge de la base de test.


Exécution et plannification

Le moyen le plus efficace d’utiliser flexget est de le plannifier via Cron :

flexget -c [fichier YML] --cron


L’option « –cron » indique que l’on est dans le cas d’une utilisation en batch, ce qui pour conséquence de désactiver l’affichage des logs sur la sortie standard, de les rediriger vers un fichier de log et de diminuer la verbosité de ces dernières.


Attention lors de la plannification cron à mettre un interval d’exécution du job en adéquation avec le paramétrage du timeframe.

Si votre tache s’exécute toutes les 3 heures mais que votre timeframe est de 4 heures

Exécution 1 : un épisode ne satisfait pas le niveau de qualité, flexget doit attendre 4 heure avant de s’en satisfaire.

L’exécution  suivante (n°2) arrive 3h après, si l’épisode de bonne qualité n’existe toujours pas, flexget ne fait rien.

L’exécution  suivante (n°3) arrive 3h après, soit 6h après la première, c’est uniquement à ce moment que flexget téléchargera l’épisode de qualité moindre.

En soi ce n’est pas grave mais le paramétrage n’est pas optimal, on préférera mettre un timeframe de 3 ou 6h.


Utilisation conjointe avec un client Torrent

Flexget se contente de télécharger le fichier torrent, mais il ne télécharge par la vidéo, pour ce faire il suffit d’avoir un client torrent prenant en charge la surveillance d’un répertoire.

En paramétrant le client torrent pour qu’il surveille le répertoire dans lequel flexget télécharge les fichier torrent, le téléchargement démarre de façon automatique.


Dans Deluge ce paramétrage se fait en renseignant le paramètre « autoadd .torrent files from » :

Cf. Configuration du client torrent Deluge via l’interface WebUI


Remarque :

Flexget dispose d’un plugin deluge permettant de piloter directement Deluge de façon assez puissante, je n’ai pas encore pris le temps de m’y pencher..


Méthode certifiée Hadopi proof

L’utilisation des protocoles P2P, dont fait partie Bittorrent n’est pas du tout Hadopi compatible (mais bon Hadopi n’est pas encore arrivé), par contre les newsgroups eux le sont (pour l’instant)

Et fort heureusement Flexget dispose d’un plugin sabnzbd qui peut piloter SABnzbd, un client de newsgroup.

Bref à garder sous coude pour dans quelques mois (peut être)



Sources :

Le wiki de flexget : http://flexget.com/wiki

Sample FlexGet config.yml file for Deluge

Automating Home Entertainment • Niamu by Brendon Walsh

How to Configure FlexGet to Automatically Download TV Torrents on Ubuntu 10.04 Lucid Lynx Server – 1000umbrellas.com

Image par nrkbeta


Les commentaires sont fermés.