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'Borító') 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)