From ff49496a12ffe89aaa7a0552d490cb6d35ba57a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zsolt=20K=C3=A9bel?=
<25386639+zsoltkebel@users.noreply.github.com>
Date: Sun, 28 Dec 2025 23:29:01 +0100
Subject: [PATCH] Extract poster if present for torrent
---
src/ncoreparser/parser.py | 13 ++++++++++++-
src/ncoreparser/torrent.py | 3 ++-
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/ncoreparser/parser.py b/src/ncoreparser/parser.py
index 4f050aa..d7fa866 100644
--- a/src/ncoreparser/parser.py
+++ b/src/ncoreparser/parser.py
@@ -16,6 +16,7 @@ def __init__(self) -> None:
self.id_and_name_pattern = re.compile(
r''
)
+ self.id_and_poster_pattern = re.compile(r'
(.*?)
(.*?)')
self.size_pattern = re.compile(r'(.*?)
')
self.not_found_pattern = re.compile(r'Nincs találat!
')
@@ -35,6 +36,7 @@ def get_key(data: str) -> Union[str, None]:
def get_items(self, data: str) -> Generator[dict, None, None]:
types = self.type_pattern.findall(data)
ids_and_names = self.id_and_name_pattern.findall(data)
+ ids_and_posters = self.id_and_poster_pattern.findall(data)
dates_and_times = self.date_and_time_pattern.findall(data)
sizes = self.size_pattern.findall(data)
seed = self.seeders_pattern.findall(data)
@@ -46,6 +48,7 @@ def get_items(self, data: str) -> Generator[dict, None, None]:
ids, names = zip(*ids_and_names)
dates, times = zip(*dates_and_times)
key = self.get_key(data)
+ posters = dict(ids_and_posters)
else:
if not self.not_found_pattern.search(data):
raise NcoreParserError(f"Error while parse download items in {self.__class__.__name__}.")
@@ -61,6 +64,7 @@ def get_items(self, data: str) -> Generator[dict, None, None]:
"type": SearchParamType(types[i]),
"seed": seed[i],
"leech": leech[i],
+ "poster": posters.get(id),
}
def get_num_of_pages(self, data: str) -> int:
@@ -95,6 +99,7 @@ def __init__(self) -> None:
r'class="dd">(?P[0-9]+)',
re.DOTALL,
)
+ self.poster_pattern = re.compile(r'
')
def get_item(self, data: str) -> dict:
try:
@@ -125,9 +130,15 @@ def get_item(self, data: str) -> dict:
leech = peers_match.group("leech")
else:
raise NcoreParserError("Peers pattern not found in data")
+ poster_match = self.poster_pattern.search(data)
+ if poster_match:
+ poster = poster_match.group("poster")
+ else:
+ # Some torrents don't have a poster so no error if not found
+ poster = None
except AttributeError as e:
raise NcoreParserError(f"Error while parsing by detailed page. {e}") from e
- return {"title": title, "key": key, "date": date, "size": size, "type": t_type, "seed": seed, "leech": leech}
+ return {"title": title, "key": key, "date": date, "size": size, "type": t_type, "seed": seed, "leech": leech, "poster": poster}
class RssParser:
diff --git a/src/ncoreparser/torrent.py b/src/ncoreparser/torrent.py
index 6632016..2e4d054 100644
--- a/src/ncoreparser/torrent.py
+++ b/src/ncoreparser/torrent.py
@@ -11,7 +11,7 @@ def get_torrent_page_url(torrent_id: str) -> str:
class Torrent:
def __init__(
- self, id: str, title: str, key: str, size: Size, type: str, date: str, seed: str, leech: str, **params: Any
+ self, id: str, title: str, key: str, size: Size, type: str, date: str, seed: str, leech: str, poster: str, **params: Any
) -> None:
self._details = {
"id": id,
@@ -24,6 +24,7 @@ def __init__(
"leech": leech,
"download": URLs.DOWNLOAD_LINK.value.format(id=id, key=key),
"url": get_torrent_page_url(torrent_id=id),
+ "poster": poster,
}
self._details.update(params)