admin-scripts/python/seed_armbian_torrents.py

91 lines
2.6 KiB
Python
Raw Permalink Normal View History

2024-11-17 02:47:37 +01:00
# /// script
# dependencies = [
# "qbittorrent-api",
# "requests",
# "bs4",
# "docopt"
# ]
# ///
2024-11-16 20:35:35 +01:00
"""seed_armbian_torrents.py
Description:
Armbian torrents seed script
2024-11-17 02:47:37 +01:00
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.
2024-11-16 20:35:35 +01:00
Usage:
seed_armbian_torrents.py (HOSTNAME) (USERNAME) (PASSWORD)
seed_armbian_torrents.py -h
Examples:
seed_armbian_torrents.py "http://localhost:8080" "admin" "adminadmin"
seed_armbian_torrents.py "https://cat.seedhost.eu/lol/qbittorrent" "lol" "pw"
Options:
-h, --help show this help message and exit.
"""
import os
import qbittorrentapi
import requests
2024-11-17 02:47:37 +01:00
from bs4 import BeautifulSoup
2024-11-16 20:35:35 +01:00
from docopt import docopt
2024-11-17 02:47:37 +01:00
def add_torrents(args: dict):
2024-11-17 03:24:12 +01:00
archive_dir_urls = [
"https://mirrors.jevincanders.net/armbian/dl/orangepi5-plus/archive/",
"https://mirrors.jevincanders.net/armbian/dl/rockpro64/archive/",
"https://mirrors.jevincanders.net/armbian/dl/rpi4b/archive/",
]
2024-11-17 02:47:37 +01:00
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)