<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
Image par nrkbeta