From a96986cec7a2266bf07685e1a09a63b0646bfff4 Mon Sep 17 00:00:00 2001 From: g0ldyy <153996346+g0ldyy@users.noreply.github.com> Date: Sun, 7 Sep 2025 00:55:01 +0200 Subject: [PATCH] feat: Nyaa scraper --- .env-sample | 3 + comet/main.py | 5 ++ comet/scrapers/manager.py | 3 + comet/scrapers/nyaa.py | 129 ++++++++++++++++++++++++++++++++++++++ comet/utils/database.py | 22 +++---- comet/utils/models.py | 2 + comet/utils/torrent.py | 4 +- 7 files changed, 156 insertions(+), 12 deletions(-) create mode 100644 comet/scrapers/nyaa.py diff --git a/.env-sample b/.env-sample index 1c16a7d..6d33fab 100644 --- a/.env-sample +++ b/.env-sample @@ -89,6 +89,9 @@ COMET_URL=https://comet.elfhosted.com # Multi-instance example: # COMET_URL='["https://comet1.example.com", "https://comet2.example.com"]' +SCRAPE_NYAA=True +NYAA_MAX_CONCURRENT_PAGES=5 # Maximum number of concurrent requests to Nyaa (consider reducing if you are often ratelimited by Nyaa) + SCRAPE_ZILEAN=True ZILEAN_URL=https://zilean.elfhosted.com # Multi-instance example: diff --git a/comet/main.py b/comet/main.py index 11639e1..b664b8e 100644 --- a/comet/main.py +++ b/comet/main.py @@ -195,6 +195,11 @@ def start_log(): f"Comet Scraper: {bool(settings.SCRAPE_COMET)}{comet_url}", ) + logger.log( + "COMET", + f"Nyaa Scraper: {bool(settings.SCRAPE_NYAA)}", + ) + zilean_url = f" - {settings.ZILEAN_URL}" if settings.SCRAPE_ZILEAN else "" logger.log( "COMET", diff --git a/comet/scrapers/manager.py b/comet/scrapers/manager.py index 65765ec..7a4b8f1 100644 --- a/comet/scrapers/manager.py +++ b/comet/scrapers/manager.py @@ -30,6 +30,7 @@ from .aiostreams import get_aiostreams from .jackettio import get_jackettio from .debridio import get_debridio from .torbox import get_torbox +from .nyaa import get_nyaa class TorrentManager: @@ -79,6 +80,8 @@ class TorrentManager: tasks.extend(get_all_torrentio_tasks(self)) if settings.SCRAPE_MEDIAFUSION: tasks.extend(get_all_mediafusion_tasks(self)) + if settings.SCRAPE_NYAA: + tasks.extend(get_nyaa(self)) if settings.SCRAPE_ZILEAN: tasks.extend(get_all_zilean_tasks(self, session)) if settings.SCRAPE_STREMTHRU: diff --git a/comet/scrapers/nyaa.py b/comet/scrapers/nyaa.py new file mode 100644 index 0000000..527492b --- /dev/null +++ b/comet/scrapers/nyaa.py @@ -0,0 +1,129 @@ +import re +import asyncio + +from curl_cffi import requests + +from comet.utils.general import log_scraper_error, size_to_bytes +from comet.utils.torrent import extract_trackers_from_magnet +from comet.utils.logger import logger +from comet.utils.models import settings + +PAGE_PATTERN = re.compile(r'(\d+)(?=">\d+<\/a><\/li>