Update seed_armbian_torrents.py

This commit is contained in:
Jeffrey Serio 2024-11-16 19:47:37 -06:00
parent 796de3bdff
commit b2450248a1

View File

@ -1,15 +1,22 @@
#!/usr/bin/env python3
# /// script
# dependencies = [
# "qbittorrent-api",
# "requests",
# "bs4",
# "docopt"
# ]
# ///
"""seed_armbian_torrents.py
Description:
Armbian torrents seed script
This script will download Armbian torrent files and add them to a qBittorrent
instance. It's intended to be run under /etc/cron.weekly or used in a systemd
timer.
This is a Python implementation of https://docs.armbian.com/Community_Torrent/
for qBittorrent.
This script will scrape https://mirrors.jevincanders.net/armbian/dl/ for
torrent files and add them to a qBittorrent instance. If there are already
Armbian torrents in the qBittorrent instance, they will be removed, and new
ones will be added in their place. This script is intended to be run under
/etc/cron.weekly or used in a systemd timer.
Usage:
seed_armbian_torrents.py (HOSTNAME) (USERNAME) (PASSWORD)
@ -27,4 +34,65 @@ import os
import qbittorrentapi
import requests
from bs4 import BeautifulSoup
from docopt import docopt
def add_torrents(args: dict):
url = "https://mirrors.jevincanders.net/armbian/dl/"
response = requests.get(url, timeout=60)
soup = BeautifulSoup(response.content, "html.parser")
links = soup.find_all("a")
archive_dir_urls = []
for link in links:
if (
link.text.endswith("/")
and not link.text.startswith("_")
and not link.text == "torrent/"
):
archive_dir_urls.append(url + link.text + "archive/")
torrent_urls = []
for url in archive_dir_urls:
response = requests.get(url, timeout=60)
soup = BeautifulSoup(response.content, "html.parser")
links = soup.find_all("a")
for link in links:
if link.text.endswith(".torrent"):
torrent_urls.append(url + link.text)
try:
qbt_client = qbittorrentapi.Client(
host=args["HOSTNAME"], username=args["USERNAME"], password=args["PASSWORD"]
)
qbt_client.auth_log_in()
for url in torrent_urls:
qbt_client.torrents_add(url, category="distro")
print(f"Added {os.path.basename(url)}")
qbt_client.auth_log_out()
except qbittorrentapi.LoginFailed as e:
print(e)
def remove_torrents(args: dict):
try:
qbt_client = qbittorrentapi.Client(
host=args["HOSTNAME"], username=args["USERNAME"], password=args["PASSWORD"]
)
qbt_client.auth_log_in()
for torrent in qbt_client.torrents_info():
if torrent.name.startswith("Armbian"):
torrent.delete(delete_files=True)
print(f"Removed {torrent.name}")
qbt_client.auth_log_out()
except qbittorrentapi.LoginFailed as e:
print(e)
if __name__ == "__main__":
args = docopt(__doc__) # type: ignore
remove_torrents(args)
add_torrents(args)