DokuWiki officiel de t411.li

DokuWiki officiel de t411.li

Outils pour utilisateurs

Outils du site


logiciels:flexget

Flexget

Flexget est un outils qui sert à automatiser vos téléchargements. Il est multi-plateforme mais ne dispose pas encore d'une interface graphique, ce qui rends son utilisation ardu. Si cette documentation ne répond pas à vos besoins, vous pouvez vous rendre sur le site officiel qui propose une documentation plutôt abondante mais en anglais.

Flexget permet de nombreuses possibilités mais nous verrons ici seulement un cas d'usage qui couvrira les besoins les plus courants. Nous verrons ici:

  • Comment installer Flexget
  • Comment télécharger automatiquement les nouveaux épisodes des séries que vous suivez
  • Comment télécharger automatiquement les films massivement et positevement plebicités sur IMDB
  • Comment mettre des contraintes de qualité sur les torrent téléchargés

Concrètement, à l'issu de ce tutoriel vous serez capable de demander à Flexget de chercher dans votre disque dur les séries que vous suivez, d'aller sur T411 trouver les épisodes manquants, de lancer leur téléchargement et pour finir de ranger les nouveaux épisodes dans les bons dossiers. Vous pourrez lui dire si vous voulez du VF ou du VOSTFR ou encore que vous préférez le 1080p mais que vous acceptez le 720p si le 1080p n'est pas sorti après 2 jours.


Installer Flexget

Avant d'installer Flexget à proprement parler, vous avez besoin de 2 choses:

  1. Python >= 2.6
  2. Python Package Installer (pip)
  3. mechanize (optionnel, mais conseillé pour le futur)

Chez nos amis libristes, l'installation est classique:

sudo apt-get install python python-pip
sudo pip install flexget mechanize

Nous allons maintenant finaliser l'installation en créant la routine qui exécutera à flexget chaque heure.

crontab -l | (cat;echo "@hourly /usr/local/bin/flexget --cron") | crontab

Pré-requis de configuration

A ce stade, Flexget est installé et se lance toutes les heures. Mais vous ne lui avez pas encore expliqué les tâches qu'il a à réaliser lors de ses execution. Nous allons commencer par une configuration technique pour que Flexget s'integre à votre client BitTorrent et à T411.

Dans cette section, nous allons:

  • créer le fichier de configuration,
  • définir la taille de l'espace disque à laquelle Flexget cessera de lancer de nouveau téléchargements
  • et quelques informations pour pouvoir se connecter à T411.

Localiser le fichier de configuration

Lorsque flexget se lance, il consulte un fichier situé dans le dossier personnel (le home) de l'utilisateur qui a lancé le processus. Nous avons vu plus haut que nous avions ajouté une règle dans la crontab sans définir explicitement l'utilisateur initiateur du processus. C'est le même utilisateur qui a ajouté la règle qui sera donc utilisé pour lancer Flexget. Positionnez-vous dans le dossier personnel de cet utilisateur puis créons les fichiers necessaire à la configuration de Flexget pour terminer la première étape.

cd /home/{USER}
mkdir .flexget
touch .flexget/config.yml

La syntaxe YAML

Nous allons maintenant définir la taille de l'espace disque à laquelle Flexget cessera de lancer de nouveau téléchargements. Ce petit exercice nous permettra en réalité de nous familiariser avec la syntaxe YAML plutôt de strict des fichiers de configuration Flexget. La syntaxe YAML est une alternative moins rigoureuse à XML. Comme XML, la YAML permet de décrire des informations sous forme d'abres. Dans cette syntaxe, on trouve un nombre restreint de concept: des branches et des feuilles. Les branches peuvent contenir d'autres branches ou des feuilles. Les feuilles ne peuvent contenir qu'une valeur. Ces valeurs peuvent être des nombres, des chaines de caractères ou une liste des types de nombres et chaines. Lorsqu'une liste ne contient qu'un seul élément, il n'est pas necessaire de créer une liste. Lorsque l'on veut écrire un sous-noeud ou un élément de liste, il suffira d'augmenter l'indentation de 2 caractères d'espace puis d'écrire le nom du noeud, de la feuille ou le tiret de l'élément de liste.

Pour indenter votre fichier, n'utilisez rien d'autre que 2 espaces. En cas d'oubli, les messages d'erreurs de Flexget nous aiderons pas beaucoup.

Voici deux exemples à la signification strictement identique qui vous permettront de comprendre cette équivalence et de reconnaitre les branches et les feuilles:

noeud:
  feuille: "une chaine"
  feuille: 666
  feuille:
    - une autre chaine mais qui peut foirer avec des caractères spéciaux
    - 1222
# Ceci est un commentaire et n'a aucun impact
  sous-noeud:
    feuille:
      - "je suis le seul élément de la liste"
noeud:
  feuille: "une chaine"
  feuille: 666
  feuille:
    - "une autre chaine mais qui peut foirer avec des caractères spéciaux"
    - 1222
  sous-noeud:
    feuille: "je suis le seul élément de la liste"

Organisation du fichier de configuration

Vous connaissez maintenant les rudiments de la syntaxe YAML utilisé dans les fichier de configuration. Je vais donc vous présenter la structure de base du fichier de configuration. Un fichier de configuration pour Flexget contient 2 noeuds principaux templates et tasks. tasks (tâches en français) contient les opérations à effectuer. templates est semblable à tasks à la différences que ce qui s'y trouve n'est pas traité comme des tâches. Les templates servent de modèles pour être utilisés dans plusieurs tasks. Ça peut être utile lorsque vous voulez que Flexget s'approvisionne depuis plusieurs trackers, site de DDL, etc Voici un exemple où l'on a définis 2 templates ; un pour les séries et un pour les films. Ces 2 templates sont utilisés dans 3 tâches et permettent de s'approvisionner depuis des sources différentes. Evidement, Flexget ne téléchargera pas 2 fois le même épisode.

templates:
  tv:
    series:
      - foo
      - bar
    download: ~/download/series/

  movies:
    imdb:
      min_score: 6.2
      min_votes: 5000
    download: ~/download/movies/

tasks:
  some_task:
    rss: http://example.com
    template: tv

  another_task:
    rss: http://example2.com
    template: movies

  third_task:
    rss: http://example3.com
    template: 
      - tv
      - movies

Les templates globaux et exemple d'utilisation

Les templates sont utiles pour pouvoir s'approvisionner depuis plusieurs trackers en même temps. Cependant, les templates ne sont pas la solution à tout. Immaginons que vous suivez 2 types de séries: des séries en VOSTFR et des séries en VF. Plutôt que d'écrire 2 très gros templates pour ces séries il serait interessant d'écrire 1 template commun à toutes les séries puis 2 autres, tout petit, qui précise si c'est en VF ouu VOSTFR que les épisodes doivent être télécharger. Pour définir ce type de template il faut ajouter le suffixe -global au nom de votre template général et utilisez le même prefixe pour vos template spécialisés. En français, si je crée un template général toto-global alors tout les templates qui commencent par toto- seront soumis aux règles globale. Voici un possible fichier de configuration pour notre exemple:

templates:
  tv-global:
    télécharge dans: ~/download/series/
    qualité mini: hdtv
    
  tv-vostfr:
    langue: vostfr
 
  tv-fr
    langue: fr-fr

tasks:
  some_task:
    rss: http://t411.li/rss
    template:
      - tv-vostfr
      - tv-fr

Il est possible d'écrire un template général pour tout les templates. Pour cela il suffit de ne mettre que global. C'est cette solution que nous allons choisir pour demander à Flexget d'arrêter de télécharger lorsqu'il ne reste plus beaucoup d'espace disque. La règle qui permet de définir l'espace minimal s'écrit avec un noeud nommée free_space. Ce noeud attend 2 feuilles: space pour dire quel espace il faut réserver et path pour désigner le point de montage concerné (car sous Linux, on découpe à minima le home du reste). La taille sera exprimé en Mo. Voici un exemple où l'espace minimal attendu est de 50Go:

global:
  free_space:
    path: /home/perso/Téléchargements
    space: 50000

Nous avons vu comment créer un fichier de configuration et écris notre première règle. L'objectif de ces sections était avant tout de vous familliariser avec la syntaxe YAML, la configuration de Flexget et connaitre où se positionner le fichier de configuration. Nous allons maintenant effectuer la configuration de base pour autoriser la récupération des torrents situé sur t411.li.

Permettre à Flexget de télécharger sur t411.li

T411 n'est pas un tracker publique et demande donc de s'authentifier pour pouvoir télécharger les fichiers .torrent. Il est donc necessaire que Flexget puisse s'authentifier avant de pouvoir fonctionner. De plus, t411 vérifie que le téléchargement des torrents se fait bien depuis un navigateur Web ; nous allons donc configurer Flexget pour qu'il simule un navigateur Web.

Flexget propose un module pour s'authentifier depuis un formulaire Web. Malheureusement, cette méthode n'est pas compatible avec le fait que nous simulons un navigateur Web. Cependant, il existe une parade. Lorsque de votre authentification, t411 vous donne une clef secrète que votre navigateur joint à chaque fois qu'il demande une page Web ou un fichier torrent. C'est ce que l'on appelle un cookie de session. Plutôt que de vous authentifier avec vos logins, c'est ce cookie que nous utiliserons. Un cookie a normalement une durée de vie limitée. Pour qu'un cookie reste valide indéfinniment, il faut: * vous être loggé avec l'option Rester connecté, * ne jamais cliquer sur Déconnexion pour cette session * et utiliser le cookie au moins une fois par jour.

Les opérations necessaire à la récupération du cookies et les paramètres necessaire à la simulation du navigateur sont nombreux et techniques. Nous allons utiliser une méthode semi-automatisée qui se chargera de récupérer toutes les informations et de vous fournir directement le fragment de configuration Flexget. Pour cela, commencer par vous logger sur t411.li avec l'option Rester connecté puis rendez-vous sur la console Javascript de votre navigateur. Copier, coller et executez ce bout de code qui vous renverra le fragment de configuration Flexget.

build_headers.js
(function() {
function get_session_cookie() {
	var spCookies = document.cookie.split(";");
	var rgx = /(uid|pass|authKey)=.*/;
	var result = "";
	for (var i=0; i<spCookies.length;i++) {
		aCookie=spCookies[i].trim();
		if (rgx.exec(aCookie)!=null) result+=aCookie+"; ";
	}
	return result.substr(0, result.length-2);
};
 
function build_headers_template(session_cookie, userAgent) {
    var o = {
        stack:"",
        write:function(line, level) { 
            this.stack+=this._indent(line,level)+"\n";
            return this; // approche DSL
        },
        _indent:function(line, level) {
        	if (level <=0) return line;
        	else return "  "+this._indent(line, level-1);
        }
    };
	o.write("templates:", 0)
	    .write("global:",1)
	        .write("plugin_priority:",2)
	            .write("headers: 250",3)
	        .write("headers:",2)
    	            .write('User-Agent: "'+userAgent+'"', 3)
    	            .write('Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"', 3)
    	            .write('Accept-Charset: "ISO-8859-1,utf-8;q=0.7,*;q=0.3"', 3)
    	            .write('Accept-Language: "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4"', 3)
    	            .write('Cache-Control: "max-age=0"', 3)
    	            .write('Connection: "keep-alive"', 3)
    	            .write('Cookie: "'+session_cookie+'"', 3);
 
	return o.stack;
}
 
return build_headers_template(get_session_cookie(), navigator.userAgent);
})();

Configuration pour des séries télévisuelles

Nous avons vu les principes de bases pour configurer Flexget et le rendre inter-opérable avec t411. En abordant cette section, on considérera que vous connaissez les rudiments de la syntaxe YAML, les exigences de Flexget vis-à-vis de cette syntaxe et que vous avez déjà compléter votre fichier de configuration. Dans un premier temps nous allons voir comment demander à Flexget de télécharger le fichier torrent de tout nouvel épisode d'une liste de séries télévisé. Nous aborderons progressivement de nouvelles connaissances pour vous permettre:

  • de demander à Flexget de ne pas télécharger un épisode que l'on a déjà,
  • de spécifier certaines caractéristiques que doivent avoir les épisodes téléchargés (qualité, langue)
  • et spécifier des contraintes ou des cas particuliers à l'aide d'expression régulières.

Sans conditions

Comme nous n'utiliserons pas les templates dans nos exemples nous allons commencer par créer un nouveau noeud dans tasks. Nommez toujours vos noeud de maniere canonique avec le sépareur - (tiret). mes-series est un mauvais nommage alors que tv-my_shows est correct.

Dans cette tâche nous allons préciser:

  1. les séries que Flexget doit télécharger,
  2. la page HTML où Flexget pourra trouver les liens de téléchargement,
  3. la forme que doivent avoir les liens que Flexget va analyser
  4. et ce qu'il doit faire avec le fichier torrent récupéré.

Dans notre exemple, nous souhaitons télécharger les nouveaux épisodes de Dexter et Californication. La page qui contient les liens et celle que T411 propose pour voir tout les derniers torrents. La forme que doivent avoir les liens est la même partout sur t411 car dans une page HTML, il y a quantité de liens qui ne sont pas des liens de téléchargements (NFO, Mon compte, Forum etc).

Dans la tâche, nous allons donc créer un noeud nommé series. Ce noeud est reconnu par Flexget ; il cherchera dedans toutes les series à télécharger. Flexget à ensuite besoin qu'on lui dise où trouver ce que l'on cherche. Flexget est capable de chercher les liens de téléchargements dans des pages HTML, des flux RSS ou autre. Nous devons lui dire de chercher dans les pages de recherche de t411. Pour cela on utilise le noeud html. Dans ce noeud html on créera ensuite 3 feuilles: url pour désigner la page, title_from pour désigner où trouver le titre de la série et links_re pour préciser la forme des liens de téléchargements. Il reste maintenant à dire quoi faire avec le fichier torrent. Dans cet exemple simple, on demande à Flexget d'enregistrer le fichier torrent dans un dossier quelconque. Pour ça rien de plus simple, il suffit de créer une feuille download avec le chemin comme valeur.

Flexget ne télécharge que le fichier torrent alors pensez à enregistrer ces fichiers dans un watch folder càd un dossier où les fichiers torrents sont automatiquement ajouté à votre client torrent.

Vous pouvez utiliser plusieurs fournisseurs de séries en utilisant le noeud inputs

tasks:
  tv-my_shows:
    series:
      - Dexter
      - Californication
    html:
      url: "http://www.t411.li/torrents/search/"
      title_from: title
      links_re:
        - "^http://www.t411.li/torrents/[^/]+(?!/)[^/]+$"
    download: "~/mon-watchfolder"

Mettre des critères à vos téléchargements

Flexget télécharge maintenant tout seul les épisodes de Dexter et Californication. Mais vous allez vite vous rendre compte qu'il télécharge qu'une fois chaque épisode et tant pis s'il n'est pas dans la langue ou la qualité que vous attendiez. Dans cette partie, nous allons voir 2 façon complémentaires de préciser à Flexget ce que vous voulez.

La première méthode est très simple. Plutôt que de donner à Flexget un lien vers une page de recherche qui reférence absolument tout les nouveaux torrents nous allons lui donner une page de résultat de recherche précise qui contient vos conditions. Prenons l'exemple où nous voulons nos épisodes en VOSTFR et en HDTV. Premièrement, rendez-vous sur la page de résultat recherche qui correspond à ces critères. Allez dans Rechercher un torrent, séléctionnez la catégorie Vidéos, puis la sous-catégorie Séries TV et enfin choisissez les options HDTV et VOSTFR respectivement dans Format et Langue. Deuxièmement, récupérez l'adresse URL dans la barre d'adresse de votre navigateur. Pour finir, remplacez dans votre fichier de configuration Flexget la valeur de la feuille url par la nouvelle URL.

tasks:
  tv-my_shows:
    series:
      - Dexter
      - Californication
    html:
      url: "http://www.t411.li/torrents/search/?search=&cat=210&subcat=433&term[17][]=721&term[7][]=12"
      title_from: title
      links_re:
        - "^http://www.t411.li/torrents/[^/]+(?!/)[^/]+$"
    download: "~/mon-watchfolder"

L'URL de l'exemple sera probablement différente de la votre. Dans notre exemple, nous avons supprimé &submit=Recherche et remplacer les fragments %5B et %5D par [ et ]

Dorénavant (et à condition que l'Uploader est posté dans les bonnes catégories), vos épisodes seront en HDTV et VOSTFR.

Si cette technique vous permet de répondre à la majorité des exigences, il existe encore des situations où elle ne fonctionne pas. Par exemple, il est courant chez les séries sous-titrées de d'abord sortir une version fastsub et un peu plus tard une version sous-titrée correctement. Dans ce cas, Flexget téléchargera la première version qui sortira, c'est-à-dire la version fastsub. Il n'y a aucunee option de recherche sur t411 pour exclure les version fastsub. Donc la technique que nous avons vu est insuffisante. Il existe d'autre scénario comme celui-ci comme éviter les releases XviD ou d'une team particulière. Pour éviter de télécharger ces téléchargements, nous allons demander à Flexget de regarder dans le titre pour vérifier que certaines expressions n'apparaissent pas ; ici l'expression fastsub. Pour cela il faut créer un noeud regexp et une feuille reject.

tasks:
  tv-my_shows:
    series:
      - Dexter
      - Californication
    html:
      url: "http://www.t411.li/torrents/search/?search=&cat=210&subcat=433&term[17][]=721&term[7][]=12"
      title_from: title
      links_re:
        - "^http://www.t411.li/torrents/[^/]+(?!/)[^/]+$"
    regexp:
      reject:
        - "fastsub"
    download: "~/mon-watchfolder"

Contributeur principal: lildadou3

logiciels/flexget.txt · Dernière modification: 2016/11/19 11:31 (modification externe)