diff --git a/IPTVPlayer/hosts/hostzaluknijcc.py b/IPTVPlayer/hosts/hostzaluknijcc.py index 6c5b7138..785bb45b 100644 --- a/IPTVPlayer/hosts/hostzaluknijcc.py +++ b/IPTVPlayer/hosts/hostzaluknijcc.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Last Modified: 27.04.2026 - damagic +# Last Modified: 01.05.2026 - damagic ################################################### import re import json @@ -31,6 +31,7 @@ def __init__(self): self.MAIN_URL = gettytul() self.cacheLinks = {} self.cacheDescriptions = {} + self.cacheDetails = {} self.MENU = [ {"category": "list_items", "title": "Filmy Premiery", "url": self.getFullUrl("filmy-online/sort:premiere/")}, {"category": "list_items", "title": "Filmy Nowe Linki", "url": self.getFullUrl("filmy-online/sort:link/")}, @@ -43,7 +44,6 @@ def __init__(self): def getPage(self, baseUrl, addParams=None, post_data=None, max_retries=5): if addParams is None: addParams = dict(self.defaultParams) - addParams["cloudflare_params"] = { "cookie_file": addParams["cookiefile"], "User-Agent": self.HEADER.get("User-Agent"), @@ -51,11 +51,9 @@ def getPage(self, baseUrl, addParams=None, post_data=None, max_retries=5): "timeout": 30, "use_mye2iserver": True } - for attempt in range(max_retries): if attempt > 0: time.sleep(2) - try: sts, data = self.cm.getPageCFProtection(baseUrl, addParams, post_data) if sts and data and len(data) > 1000: @@ -63,9 +61,7 @@ def getPage(self, baseUrl, addParams=None, post_data=None, max_retries=5): return sts, data except Exception as e: printDBG("Zaluknij.getPage - attempt %d exception: %s" % (attempt + 1, str(e))) - printDBG("Zaluknij.getPage - attempt %d failed for %s" % (attempt + 1, baseUrl)) - return False, "" def fixIconUrl(self, icon_url): @@ -73,32 +69,88 @@ def fixIconUrl(self, icon_url): icon_url = icon_url.replace("thumb", "big") return icon_url + def extractMovieDetails(self, data): + details = {"categories": [], "version": "", "quality": "", "year": ""} + year = self.cm.ph.getSearchGroups(data, r'(\d{4})') + if year: + details["year"] = year[0] + cat_pattern = r'
([^<]+)') - if not desc: - desc = self.cm.ph.getSearchGroups(data, r'([^<]+)') + if not desc: + desc = self.cm.ph.getSearchGroups(data, r'([^<]+)') if desc: desc = desc[0] else: desc = "" - - data = re.findall(r'href="([^"]+)">\W(s\d+e\d+)', data, re.DOTALL) - for url, episode_num in data: + episodes = re.findall(r'href="([^"]+)">\W(s\d+e\d+)', data, re.DOTALL) + for url, episode_num in episodes: params = dict(cItem) title = cItem["title"] title = re.sub(r"\s*\[\]\s*", "", title) title = title.strip() - params.update({"good_for_fav": True, "title": "%s [%s]" % (title, episode_num.upper()), "url": self.getFullUrl(url), "icon": icon, "desc": desc}) self.addVideo(params) @@ -183,43 +232,35 @@ def listEpisodesDirect(self, cItem): sts, htm = self.getPage(cItem["url"]) if not sts: return - nextPage = self.cm.ph.getSearchGroups(htm, r"""href=['"]([^"']+)["'](?: data-pagenumber='\d+'>|>)Nast""") if nextPage: nextPage = nextPage[0] - data = self.cm.ph.getAllItemsBeetwenMarkers(htm, 'role="listitem', "") or self.cm.ph.getAllItemsBeetwenMarkers(htm, 'class="col-sm-4">', "") - for item in data: url = self.cm.ph.getSearchGroups(item, 'href="([^"]+)') if not url: continue url = url[0] - icon = self.cm.ph.getSearchGroups(item, 'src="([^"]+)') if icon: icon = self.getFullUrl(icon[0]) else: icon = self.DEFAULT_ICON_URL - title = self.cm.ph.getSearchGroups(item, 'title="([^"]+)') if title: title = self.cleanHtmlStr(title[0]) else: title = "Brak tytułu" title = re.sub(r"\s*\[\]\s*", "", title) - meta_line = self.cm.ph.getSearchGroups(item, r'') if meta_line: meta_line = self.cleanHtmlStr(meta_line[0]) title = "%s [%s]" % (title, meta_line) title = re.sub(r"\s*\[\]\s*", "", title) title = title.strip() - params = dict(cItem) params.update({"good_for_fav": True, "category": "video", "title": title.replace("amp;", ""), "url": url, "icon": icon}) self.addVideo(params) - if nextPage: params = dict(cItem) next_url = cItem["url"].split("?")[0] + nextPage.replace("amp;", "") @@ -286,24 +327,20 @@ def getLinksForVideo(self, cItem): cacheTab = self.cacheLinks.get(cacheKey, []) if len(cacheTab): return cacheTab - retTab = [] url = cItem["url"] sts, data = self.getPage(url, max_retries=3) if not sts: return [] - desc = self.cm.ph.getSearchGroups(data, r'
([^<]+)') if desc: self.cacheDescriptions[url] = self.cleanHtmlStr(desc[0]) - link_list_div = "" link_list_parts = self.cm.ph.getDataBeetwenNodes(data, ("