Merge pull request #378 from g0ldyy/feat/debridio-scraper-fix

feat: fix Debridio scraper
This commit is contained in:
Goldy
2025-11-24 17:18:20 +01:00
committed by GitHub
6 changed files with 77 additions and 27 deletions
+2
View File
@@ -155,6 +155,8 @@ JACKETTIO_URL=https://jackettio.example.com # Full manifest URL without /manifes
SCRAPE_DEBRIDIO=False
DEBRIDIO_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
DEBRIDIO_PROVIDER=realdebrid # alldebrid, debrider, debridlink, easydebrid, premiumize, realdebrid, torbox
DEBRIDIO_PROVIDER_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SCRAPE_TORBOX=False
TORBOX_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+3 -3
View File
@@ -288,14 +288,14 @@ def start_log():
f"Jackettio Scraper: {settings.format_scraper_mode(settings.SCRAPE_JACKETTIO)}{jackettio_url}",
)
debridio_api_key = (
f" - {settings.DEBRIDIO_API_KEY}"
debridio_info = (
f" - {settings.DEBRIDIO_API_KEY} - {settings.DEBRIDIO_PROVIDER}|{settings.DEBRIDIO_PROVIDER_KEY}"
if settings.is_any_context_enabled(settings.SCRAPE_DEBRIDIO)
else ""
)
logger.log(
"COMET",
f"Debridio Scraper: {settings.format_scraper_mode(settings.SCRAPE_DEBRIDIO)}{debridio_api_key}",
f"Debridio Scraper: {settings.format_scraper_mode(settings.SCRAPE_DEBRIDIO)}{debridio_info}",
)
torbox_api_key = (
+66 -20
View File
@@ -1,46 +1,92 @@
import aiohttp
import base64
import orjson
import re
from functools import lru_cache
from comet.utils.general import log_scraper_error, size_to_bytes
from comet.utils.torrent import extract_trackers_from_magnet
from comet.utils.models import settings
DATA_PATTERN = re.compile(
r"💾\s+([\d.,]+\s+[KMGT]B|Unknown|\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2})(?:\s+👤\s+(\d+|Unknown|undefined))?(?:\s+⚙️\s+(.+?))?(?:\n|$)",
re.IGNORECASE,
)
@lru_cache(maxsize=1)
def get_debridio_config():
config = {
"api_key": settings.DEBRIDIO_API_KEY,
"provider": settings.DEBRIDIO_PROVIDER,
"providerKey": settings.DEBRIDIO_PROVIDER_KEY,
"disableUncached": False,
"maxSize": "",
"maxReturnPerQuality": "",
"resolutions": ["4k", "1440p", "1080p", "720p", "480p", "360p", "unknown"],
"excludedQualities": [],
}
return base64.b64encode(orjson.dumps(config)).decode("utf-8")
async def get_debridio(manager, session: aiohttp.ClientSession):
if (
not settings.DEBRIDIO_API_KEY
or not settings.DEBRIDIO_PROVIDER
or not settings.DEBRIDIO_PROVIDER_KEY
):
return
torrents = []
b64_config = get_debridio_config()
try:
data = await session.get(
f"https://debapi.debridio.com/{settings.DEBRIDIO_API_KEY}/search/{manager.media_only_id}"
results = await session.get(
f"https://addon.debridio.com/{b64_config}/stream/{manager.media_type}/{manager.media_id}.json"
)
data = await data.json()
results = await results.json()
for torrent in data:
size = torrent["size"]
if isinstance(size, str) and size != "Unknown":
size = size_to_bytes(size.replace(",", ""))
elif isinstance(size, int):
pass
else:
size = 0
for torrent in results["streams"]:
title_full = torrent["title"]
torrent_name = title_full.split("\n")[0]
seeders = torrent["seeders"]
if seeders == "Unknown":
seeders = None
match = DATA_PATTERN.search(title_full)
size_str = match.group(1)
size = (
0
if not size_str or "Unknown" in size_str or "-" in size_str
else size_to_bytes(size_str.replace(",", ""))
)
seeders_str = match.group(2)
seeders = (
None
if not seeders_str or seeders_str in ["undefined", "Unknown"]
else int(seeders_str)
)
tracker = f"Debridio|{match.group(3)}"
info_hash = torrent["url"].split("/")[-2]
torrents.append(
{
"title": torrent["name"],
"infoHash": torrent["hash"],
"title": torrent_name,
"infoHash": info_hash,
"fileIndex": None,
"seeders": seeders,
"size": size,
"tracker": f"Debridio|{torrent['indexer']}",
"sources": extract_trackers_from_magnet(torrent["magnet"]),
"tracker": tracker,
"sources": [],
}
)
except Exception as e:
log_scraper_error(
"Debridio", settings.DEBRIDIO_API_KEY, manager.media_only_id, e
"Debridio",
f"{settings.DEBRIDIO_PROVIDER}|{settings.DEBRIDIO_PROVIDER_KEY}",
manager.media_id,
e,
)
await manager.filter_manager("Debridio", torrents)
+2 -2
View File
@@ -8,7 +8,7 @@ from comet.utils.general import (
)
data_pattern = re.compile(
DATA_PATTERN = re.compile(
r"(?:👤 (\d+) )?💾 ([\d.]+ [KMGT]B)(?: ⚙️ (\w+))?", re.IGNORECASE
)
@@ -28,7 +28,7 @@ async def get_torrentio(manager, url: str):
else:
title = title_full.split("\n")[0]
match = data_pattern.search(title_full)
match = DATA_PATTERN.search(title_full)
seeders = int(match.group(1)) if match.group(1) else None
size = size_to_bytes(match.group(2))
+2
View File
@@ -84,6 +84,8 @@ class AppSettings(BaseSettings):
JACKETTIO_URL: Optional[Union[str, List[str]]] = None
SCRAPE_DEBRIDIO: Union[bool, str] = False
DEBRIDIO_API_KEY: Optional[str] = None
DEBRIDIO_PROVIDER: Optional[str] = None
DEBRIDIO_PROVIDER_KEY: Optional[str] = None
SCRAPE_TORBOX: Union[bool, str] = False
TORBOX_API_KEY: Optional[str] = None
CUSTOM_HEADER_HTML: Optional[str] = None
+2 -2
View File
@@ -18,7 +18,7 @@ from comet.utils.logger import logger
from comet.utils.models import settings, database
from comet.utils.general import is_video, default_dump
info_hash_pattern = re.compile(r"btih:([a-fA-F0-9]{40}|[a-zA-Z0-9]{32})")
INFO_HASH_PATTERN = re.compile(r"btih:([a-fA-F0-9]{40}|[a-zA-Z0-9]{32})")
def extract_trackers_from_magnet(magnet_uri: str):
@@ -41,7 +41,7 @@ async def download_torrent(session: aiohttp.ClientSession, url: str):
location = response.headers.get("Location", "")
if location:
match = info_hash_pattern.search(location)
match = INFO_HASH_PATTERN.search(location)
if match:
info_hash = match.group(1)
if len(info_hash) == 32: