Télécharger vos fichiers torrent automatiquement avec FlexGet et Transmission

Aujourd’hui, nouvelle étape dans l’automatisation de nos téléchargements : au lieu d’uploader un fichier .torrent ou magnet sous Transmission, nous allons installer FlexgGet qui va nous permettre de surveiller un flux RSS pour télécharger automatiquement les fichiers bittorrent.

Une fois le fichier graine téléchargé, Transmission se chargera de télécharger les fichiers immédiatement. Tout sera donc automatisé !

En prérequis, je vous conseille d’avoir Transmission installé et configuré sur votre serveur ou machine, cela vous fera gagner pas mal de temps.

Étape 1 : configuration de Transmission

Vous avez déjà Transmission qui tourne ? Parfait, on commence par arrêter le service :

service transmission-daemon stop

On crée un nouveau répertoire qui sera surveillé par Transmission – dès qu’un fichier .torrent sera ajouté dans ce répertoire, Transmission lancera le téléchargement :

mkdir /home/transmission/torrentwatch

On lui donne les bons droits et le bon utilisateur :

chown debian-transmission:debian-transmission /home/transmission/torrentwatch
chmod 777 /home/transmission/torrentwatch

Et on édite le fichier de configuration :

nano /etc/transmission-daemon/settings.json

Je me suis aperçu qu’il me manquait deux directives importantes dans ce fichier pour surveiller un répertoire donc on les ajoute à la suite des autres directives :

   "watch-dir": "/home/transmission/torrentwatch",
    "watch-dir-enabled": true,Code language: JavaScript (javascript)

On sauvegarde le fichier et on redémarre Transmission :

service transmission-daemon start

Étape 2 : installation de Flexget

Flexget est un script Python donc il nous faut… python !

python3 -V

Cela nous retourne :

Python 3.12.3Code language: CSS (css)

On installe pip et pipx qui permet d’installer des applications python dans des environnements:

apt install python3-pip pipx

On met à jour les setuptools :

pipx install setuptools

On configure pipx :

pipx ensurepath
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrcCode language: PHP (php)

On installe flexget :

pipx install flexget

On crée le répertoire de configuration :

mkdir -p  ~/.config/flexget
cd ~/.config/flexgetCode language: JavaScript (javascript)

On crée le fichier de configuration :

nano ~/.config/flexget/config.ymlCode language: JavaScript (javascript)

Qui contient :

templates:
  # Paramètres globaux pour les séries
  series_global:
    download: /home/transmission/torrentwatch/
    # Flux RSS à récupérer
    inputs:
      - rss: { url: 'https://example.com/feed.xml' }                      # RSS
    # Vérifier si l'épisode n'est pas déjà présent
    exists_series:
      - '/home/transmission/completed'
      - '/home/transmission/torrentwatch'
  # 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: yesCode language: PHP (php)

Et le fichier de configuration des séries :

nano ~/.config/flexget/series.ymlCode language: JavaScript (javascript)

Qui contient :

series:
  settings:
    best:
      upgrade: yes
      quality: 720p hdtv+
      target: 720p
      timeframe: 6 hours
      propers: 12 hours
    normal:
      quality: "hdtv <720p"
      target: "<720p"
      timeframe: 6 hours
      propers: 12 hours
    webrip:
      quality: "webrip|webdl <720p "
      target: "<720p"
      timeframe: 6 hours
      propers: 12 hours
  # Les series pour lesquelles je souhaite avoir les versions en 720
  best:
    - Utopia
  # Les autres series avec resolution plus basse
  normal:
    - Room 104
    - Line Of Duty
    - Ray Donovan
    - Vikings
    - Suits
    - Orphan Black
    - Game of Thrones
    - The Walking Dead
  # Pour les "web series"
  webrip:
    - House of CardsCode language: PHP (php)

Sauvegardez puis lancez flexget:

flexget execute

Résultat :

VERBOSE  task_queue                    There are 2 tasks to execute. Shutdown will commence when they have completed.
VERBOSE  details       Series          Produced 50 entries.
VERBOSE  series        Series          identified by is currently on `auto` for Room 104. Multiple id types may be accepted until it locks in on the appropriate type.
VERBOSE  task          Series          ACCEPTED: `Room 104 S01E03 HDTV x264-aAF` by series plugin because target quality
INFO     download      Series          Downloading: Room 104 S01E03 HDTV x264-aAF
VERBOSE  details       Series          Summary - Accepted: 1 (Rejected: 0 Undecided: 49 Failed: 0)Code language: JavaScript (javascript)

Boom. Flexget a trouvé un fichier torrent dans le flux RSS qui correspond à une série que l’on suit, ce fichier est placé dans le répertoire surveillé par Transmission et le fichier vidéo est téléchargé automatiquement.

Étape 3 : supprimer les fichiers de Transmission une fois complétés

Abonnez-vous à la newsletter

Pour supprimer les fichiers dans Transmission une fois qu’ils sont complétés, pour ne pas avoir une liste gigantesque sans fin, il suffit de créer un nouveau fichier bash :

nano /home/scripts/transmission-rm-completed.sh

Avec :

#!/bin/bash
# Script name : Transmission Remove Completed Torrents
# Script description : delete completed torrents in Transmission automatically
# Script URL: https://www.skyminds.net/telecharger-torrents-flexget-transmission/
# Author : Matt Biscay
# Author URL : https://mattbiscay.com/
SERVER="127.0.0.1:9091"
AUTH="--auth user:password"
/usr/bin/transmission-remote $SERVER $AUTH -l | grep 100%| awk '{print $1}' | xargs -n 1 -I % /usr/bin/transmission-remote $SERVER $AUTH -t % -rCode language: PHP (php)

Vérifiez l’adresse et le port sur lesquels tourne Transmission (SERVER) et vos identifiants (AUTH).

On rend notre script exécutable :

chmod +x /home/scripts/transmission-rm-completed.sh

On arrête le service transmission-daemon :

service transmission-daemon stop

Et on édite sa configuration :

nano /etc/transmission-daemon/settings.json

Pour y modifier les valeurs suivantes :

    "script-torrent-done-enabled": true,
    "script-torrent-done-filename": "/home/scripts/transmission-rm-completed.sh",Code language: JavaScript (javascript)

On sauvegarde et on redémarre le service :

service transmission-daemon start

Étape 4 : mise en place d’un crontab

Ultime étape, nous créons une tâche planifiée qui lancera Flexget toutes les deux heures :

crontab -e

Et on ajoute en fin de fichier :

0 */2 * * * /usr/local/bin/flexget executeCode language: JavaScript (javascript)

Et voilà, vous venez d’automatiser vos téléchargements simplement et efficacement !

Vous avez un projet WordPress ou WooCommerce en tête? Transformez votre vision en réalité avec mon expertise reconnue.

Parlons de votre projet dès aujourd'hui »

Articles conseillés :

Matt

Matt Biscay est développeur WordPress et WooCommerce certifié chez Codeable, ainsi que sysadmin qualifié et enseignant-chercheur. Passionné par le code performant et les solutions sécurisées, je m'efforce d'offrir une expérience utilisateur exceptionnelle sur chaque projet.

Vous avez aimé cet article ? Vous avez un projet en tête et vous pensez que je pourrais vous aider à le concrétiser ? N'hésitez pas à me contacter, je serais ravi de discuter avec vous de votre projet !

Opinions