From 304ce26b628cdb3999c3084a28a26005b2f3e07a Mon Sep 17 00:00:00 2001 From: Eugene Amos Date: Tue, 28 Nov 2023 14:18:27 -0800 Subject: [PATCH] qbittorrent > updating info --- qbittorrent/README.md | 50 +++++++++++++++++++++++++++++++--- qbittorrent/assign_category.py | 39 ++++++++++++++++---------- 2 files changed, 70 insertions(+), 19 deletions(-) diff --git a/qbittorrent/README.md b/qbittorrent/README.md index dadcd86..b9fb870 100644 --- a/qbittorrent/README.md +++ b/qbittorrent/README.md @@ -10,9 +10,29 @@

# :clipboard: Notes: `assign_category.py` + A script that will auto assign a category of an incoming torrent.
assign_category.py notes +
+ +This python script will get called every time a torrent file is added to the qbittorrent application. + +This script is dependent on the `qbittorrent-api` module that will get installed on start of the main `qbittorrent` container. + +When the script is called it will do the following: + +1. Check the torrent files name for a season/episode pattern using the format of `SxxExx`. This check is also for uppercase or lowercase "s" & "e" and any number or combination of numbers in the "xx" spots. + +2. Next the script will check if "1080p" or "2160p" is in the name. + +- If both #1 and #2 are **TRUE**, then the category for that added torrent will change to `category_1080_shows`.
If both or either are **FALSE** then the script will move to #3. +- > Note: When you **right click** on a **category** in qbittorrent you can edit the **save path** location. + +3. Next the script will again check for "1080p" or "2160p" AND "YTS.MX" in the name. + +- If **TRUE** then the added torrent is a movie and the category will change to `category_1080_movies`. +- > Note: **95%** of the time I only add movies from **YTS.MX**. This can be changed to any movie identifier needed.

@@ -20,68 +40,85 @@ A script that will auto assign a category of an incoming torrent.
# :clipboard: Notes: `docker-compose-qbittorrent.yml` + This docker-compose file is traditionally used to create and start a container from the command line. For Portainer we can just copy and paste this script into the web editor field.
docker-compose-qbittorrent.yml notes
+ This will create two services or containers called **qbittorrent** and **qbittorrent-openvpn**. ## `qbittorrent container` Key parts to this container are: + - ### **image:** + - linuxserver/qbittorrent:latest:   P2P bittorrent client specially built by the linuxserver.io team. - ### **volumes:** + - `/home//docker/qbittorrent/custom_scripts:/custom-cont-init.d:ro`

This will be the location where the **linuxserver.io** image looks for custom scripts to run at the start of the container. Our custom script `extra_packages.sh` will need to go in this folder.

For more info you can see the documentation. - ### **ports:** + - The port section will not be used if we are using **qbittorrent-openvpn** container. All web traffic will be diverted threw that container. - ### **healthcheck:** + - A feature of Docker that will check to see if the container is healthy or exited (bad). You will need to change `` to home server IP address.

In this configuration it will check to see if the container has a healthy network connection every 60 seconds. On 3 failed attempts it the container will get labeled as `exited`.

It is multiple ways or reasons to use **healthcheck** but for our purposes it will be used by the `inspector_qb.py` script which will reboot the container when needed. - ### **labels:** + - `com.centurylinklabs.watchtower.depends-on: "qbittorrent-openvpn"` - Used by watchtower to for starting and stopping containers. This container will not be rebooted before `qbittorrent-openvpn` has already done so. - ### **network_mode:** + - Tells Docker that the all network activity to container `qbittorrent` will go threw `qbittorrent-openvpn` container. - ### **depends_on:** + - Tells Docker that the container `qbittorrent` can only be run/started if `qbittorrent-openvpn` has a healthy healthcheck status. ## `qbittorrent-openvpn container` The only function of this container is to establish a **VPN** network connection.

Key parts to this container are: + - ### **image:** + - haugene/transmission-openvpn:   A Docker container used as an OpenVPN network tunnel. - ### **cap_add:** + - Since we are connecting to a VPN, this container will need admin access to network related functions. - ### **ports:** + - This will open up ports that `qbittorrent` container will need for networking.

The web port for all `linuxserver.io` images are different in that both the `:` ports have to be the same. Usually for most Docker containers your `` port can change to whatever you want it to be BUT the `` port will have to stay the same.

I will be using port **8124** as indicated in the code below. The port can be changed, just remember that both port numbers will need to be the same for the `qbittorrent` container to get a network connection.

+ ``` yaml 8124:8124/tcp # qbittorrent web port 6881:6881/tcp # qbittorrent tcp connection port 6881:6881/udp # qbittorrent udp connection port ``` - + - ### **environment** + - **OpenVPN Provider Info:** This is where you will enter your credentials from your VPN provider.

I am using `Privado` for my VPN connection. You can use any provider that uses OpenVPN connections. For a list of supported providers that this container can use go here. You can also find the correct name to put in the `OPENVPN_PROVIDER` section on the same part of the website.

+ ``` yaml OPENVPN_PROVIDER= OPENVPN_USERNAME= @@ -96,39 +133,44 @@ Key parts to this container are:

- # :clipboard: Notes: `extra_packages.sh` + A script that will be executed when the `qbittorrent` container is starting.
extra_packages.sh notes
This script goes in the `/custom_script` volume folder for **qbittorrent** container. It will install three programs. + - **python3:** This is the dependant programming language needed. -- **pip3:** Package install for python. +- **pip3:** Package install for python. - **qbittorrent-api:** Client API used to interact with qbittorrent over web or CLI. linuxserver.io uses [**Alpine OS**](https://www.alpinelinux.org/releases) to build all images. Alpine OS is a lighter version of linux compared to Linux Mint or Ubuntu. Because of this **qbittorrent-api** is not in the main repo for the OS. As of writing this doc its only edge branch repo. When this script is in the `/custom_script` folder is will get executed every time **qbittorrent** container is started ensuring that it will always be ready when qbittorrent is running. The first part of the script links to the **edge repo** so we can download and install it. + ``` shell # Add the "edge" testing repository echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories ``` This will check for updates to the Alpine repo + ``` shell # Update the package list apk update ``` This will install **Python3** first then install a version of pip3 for Alpine called **py3-pip** + ``` shell # Install Python and pip apk add python3 py3-pip ``` The last part of the script will install Alpines version of **qbittorrent-api** + ``` shell # Install qbittorrent-api apk add py3-qbittorrent-api @@ -139,4 +181,4 @@ apk add py3-qbittorrent-api


-
\ No newline at end of file +
diff --git a/qbittorrent/assign_category.py b/qbittorrent/assign_category.py index ea58dae..0b15fac 100644 --- a/qbittorrent/assign_category.py +++ b/qbittorrent/assign_category.py @@ -1,22 +1,29 @@ -#!/usr/lib/python3 +#!/usr/bin/python3 # # qBittorrent-api: # https://qbittorrent-api.readthedocs.io/en/v2023.4.47/introduction.html # # # +# Make sure to set the folling variables. +# +# +# +# +# +import re import sys import qbittorrentapi -# User access info -qbitt_username = '' -qbitt_password = '' +# qbittorrent webui login crendentials. +qbitt_username = '' +qbitt_password = '' # qbittorrent webui address. #url = 'http://192.168.1.59:8080' -url = 'http://:' +url = 'http://:' -# The categories to use for matching torrents +# The categories to use for matching torrents. Change as needed. category_1080_shows = "1080+ | Shows" category_1080_movies = "1080+ | Movies" @@ -31,22 +38,24 @@ torrents = qb.torrents_info() # loop through the torrents for torrent in torrents: - #print(torrent['name']) - #print(torrent['hash']) # Get the name of the completed torrent from the command line arguments inside qbittorrent torrent_name = sys.argv[1] # Name of the added torrent as defined by "%N" in qbittorrent settings. torrent_hash = sys.argv[2] # Hash of the added torrent as defined by "%I" in qbittorrent settings. - #print(torrent_name) - #print(torrent_hash) - # Checking to see if added torrent is by YTS and is 1080p or 4k. - if "1080p" in torrent_name or "2160p" in torrent_name and "YTS.MX" in torrent_name: + # Define the regular expression pattern for 'SxxExx' or 'sxxexx' format. + pattern = r"[Ss]\d{2}[Ee]\d{2}" - # Set the category of the torrent. + # Check for 'SxxExx' or 'sxxexx' episode pattern and '1080p' or '2160p' + # If so, assign 1080 show category. + if re.search(pattern, torrent_name) and ("1080p" in torrent_name or "2160p" in torrent_name): + qb.torrents_set_category(category=category_1080_shows, hashes=torrent_hash) + qb.torrents_set_auto_management(hashes=torrent_hash, enable=True) + + # Then check for movies criteria. + elif ("1080p" in torrent_name or "2160p" in torrent_name) and "YTS.MX" in torrent_name: qb.torrents_set_category(category=category_1080_movies, hashes=torrent_hash) - # Set torrent to auto management to update the save path. - qb.torrents_set_auto_management(hashes=torrent_hash, enable=True) + qb.torrents_set_auto_management(hashes=torrent_hash, enable=True) # Disconnect from the qBittorrent API qb.auth_log_out()