diff --git a/python/seed_armbian_torrents.py b/python/seed_armbian_torrents.py index 7a82aec..da2c15d 100755 --- a/python/seed_armbian_torrents.py +++ b/python/seed_armbian_torrents.py @@ -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)