mirror of
https://github.com/g0ldyy/comet.git
synced 2026-01-12 01:16:12 +01:00
feat: jackettio scraper
This commit is contained in:
@@ -119,6 +119,11 @@ AIOSTREAMS_URL=https://aio.example.com # Full manifest URL without /manifest.jso
|
||||
# Multi-instance example:
|
||||
# AIOSTREAMS_URL='["https://aio1.example.com", "https://aio2.example.com"]'
|
||||
|
||||
SCRAPE_JACKETTIO=True # Works only with Telkaoss's fork
|
||||
JACKETTIO_URL=https://jackettio.example.com # Full manifest URL without /manifest.json at the end
|
||||
# Multi-instance example:
|
||||
# JACKETTIO_URL='["https://jackettio1.example.com", "https://jackettio2.example.com"]'
|
||||
|
||||
# ============================== #
|
||||
# Debrid Stream Proxy Settings #
|
||||
# ============================== #
|
||||
|
||||
@@ -236,6 +236,12 @@ def start_log():
|
||||
f"AIOStreams Scraper: {bool(settings.SCRAPE_AIOSTREAMS)}{aiostreams_url}",
|
||||
)
|
||||
|
||||
jackettio_url = f" - {settings.JACKETTIO_URL}" if settings.SCRAPE_JACKETTIO else ""
|
||||
logger.log(
|
||||
"COMET",
|
||||
f"Jackettio Scraper: {bool(settings.SCRAPE_JACKETTIO)}{jackettio_url}",
|
||||
)
|
||||
|
||||
logger.log(
|
||||
"COMET",
|
||||
f"Debrid Stream Proxy: {bool(settings.PROXY_DEBRID_STREAM)} - Password: {settings.PROXY_DEBRID_STREAM_PASSWORD} - Max Connections: {settings.PROXY_DEBRID_STREAM_MAX_CONNECTIONS} - Default Debrid Service: {settings.PROXY_DEBRID_STREAM_DEBRID_DEFAULT_SERVICE} - Default Debrid API Key: {settings.PROXY_DEBRID_STREAM_DEBRID_DEFAULT_APIKEY}",
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
import re
|
||||
|
||||
|
||||
from comet.utils.general import (
|
||||
size_to_bytes,
|
||||
log_scraper_error,
|
||||
fetch_with_proxy_fallback,
|
||||
)
|
||||
|
||||
|
||||
data_pattern = re.compile(
|
||||
r"💾 ([\d.]+ [KMGT]B)\s+👥 (\d+)\s+⚙️ (\w+)",
|
||||
)
|
||||
|
||||
|
||||
async def get_jackettio(manager, url: str):
|
||||
torrents = []
|
||||
try:
|
||||
results = await fetch_with_proxy_fallback(
|
||||
f"{url}/stream/{manager.media_type}/{manager.media_id}.json"
|
||||
)
|
||||
|
||||
for torrent in results["streams"]:
|
||||
title_full = torrent["title"]
|
||||
|
||||
title = title_full.split("\n")[0]
|
||||
|
||||
match = data_pattern.search(title_full)
|
||||
|
||||
size = size_to_bytes(match.group(1))
|
||||
seeders = int(match.group(2))
|
||||
tracker = match.group(3)
|
||||
|
||||
torrents.append(
|
||||
{
|
||||
"title": title,
|
||||
"infoHash": torrent["infoHash"],
|
||||
"fileIndex": None,
|
||||
"seeders": seeders,
|
||||
"size": size,
|
||||
"tracker": f"Jackettio|{tracker}",
|
||||
"sources": None,
|
||||
}
|
||||
)
|
||||
except Exception as e:
|
||||
log_scraper_error("Jackettio", url, manager.media_id, e)
|
||||
|
||||
await manager.filter_manager(torrents)
|
||||
@@ -27,6 +27,7 @@ from .prowlarr import get_prowlarr
|
||||
from .comet import get_comet
|
||||
from .stremthru import get_stremthru
|
||||
from .aiostreams import get_aiostreams
|
||||
from .jackettio import get_jackettio
|
||||
|
||||
|
||||
class TorrentManager:
|
||||
@@ -82,6 +83,8 @@ class TorrentManager:
|
||||
tasks.extend(get_all_stremthru_tasks(self, session))
|
||||
if settings.SCRAPE_AIOSTREAMS:
|
||||
tasks.extend(get_all_aiostreams_tasks(self))
|
||||
if settings.SCRAPE_JACKETTIO:
|
||||
tasks.extend(get_all_jackettio_tasks(self))
|
||||
if settings.INDEXER_MANAGER_API_KEY:
|
||||
queries = [self.title]
|
||||
|
||||
@@ -437,3 +440,14 @@ def get_all_aiostreams_tasks(manager):
|
||||
for url in urls:
|
||||
tasks.append(get_aiostreams(manager, url))
|
||||
return tasks
|
||||
|
||||
|
||||
def get_all_jackettio_tasks(manager):
|
||||
urls = settings.JACKETTIO_URL
|
||||
if isinstance(urls, str):
|
||||
urls = [urls]
|
||||
|
||||
tasks = []
|
||||
for url in urls:
|
||||
tasks.append(get_jackettio(manager, url))
|
||||
return tasks
|
||||
|
||||
@@ -68,6 +68,8 @@ class AppSettings(BaseSettings):
|
||||
MEDIAFUSION_LIVE_SEARCH: Optional[bool] = True
|
||||
SCRAPE_AIOSTREAMS: Optional[bool] = False
|
||||
AIOSTREAMS_URL: Optional[Union[str, List[str]]] = None
|
||||
SCRAPE_JACKETTIO: Optional[bool] = False
|
||||
JACKETTIO_URL: Optional[Union[str, List[str]]] = None
|
||||
CUSTOM_HEADER_HTML: Optional[str] = None
|
||||
PROXY_DEBRID_STREAM: Optional[bool] = False
|
||||
PROXY_DEBRID_STREAM_PASSWORD: Optional[str] = "".join(
|
||||
|
||||
Reference in New Issue
Block a user