Skip to content

Commit bab1220

Browse files
committed
feat: Improve plugin data extraction (duration, rating, poster, selectors), fix HTMLHelper regex flags, and bump version to 2.4.3.
1 parent 9117645 commit bab1220

File tree

8 files changed

+34
-19
lines changed

8 files changed

+34
-19
lines changed

KekikStream/Core/HTMLHelper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ def regex_all(self, pattern: str, target: str | int | None = None, flags: int =
197197

198198
def regex_replace(self, pattern: str, repl: str, target: str | int | None = None, flags: int = 0) -> str:
199199
"""Regex ile replace yap."""
200-
return re.sub(pattern, repl, self._regex_source(target), flags)
200+
return re.sub(pattern, repl, self._regex_source(target), flags=self._regex_flags(target, flags))
201201

202202
# ========================
203203
# ÖZEL AYIKLAYICILAR

KekikStream/Plugins/SetFilmIzle.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
151151
episodes = []
152152
for ep_item in secici.select("div#episodes ul.episodios li"):
153153
href = secici.select_attr("h4.episodiotitle a", "href", ep_item)
154-
name = secici.select_text("h4.episodiotitle a", ep_item)
154+
name = secici.select_direct_text("h4.episodiotitle a", ep_item)
155155
if href and name:
156156
s, e = secici.extract_season_episode(name)
157157
episodes.append(Episode(season=s or 1, episode=e or 1, title=name, url=self.fix_url(href)))

KekikStream/Plugins/SezonlukDizi.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ async def get_main_page(self, page: int, url: str, category: str) -> list[MainPa
7070
return results
7171

7272
async def search(self, query: str) -> list[SearchResult]:
73-
istek = await self.httpx.get(f"{self.main_url}/diziler.asp?adi={query}")
73+
istek = await self.httpx.get(f"{self.main_url}/diziler.asp?q={query}")
7474
secici = HTMLHelper(istek.text)
7575

7676
results = []

KekikStream/Plugins/Sinefy.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,22 @@ async def load_item(self, url: str) -> SeriesInfo | MovieInfo:
139139
resp = await self.httpx.get(url)
140140
sel = HTMLHelper(resp.text)
141141

142-
title = sel.select_text("h1")
143-
poster = sel.select_poster("div.ui.items img")
142+
title = sel.select_direct_text("h1")
143+
poster_attr = sel.select_attr("img.series-profile-thumb", "data-srcset") or sel.select_attr("img.series-profile-thumb", "srcset")
144+
if poster_attr:
145+
# "url 1x, url 2x" -> en sondakini (en yüksek kalite) al
146+
poster = poster_attr.split(",")[-1].strip().split(" ")[0]
147+
else:
148+
poster = sel.select_poster("img.series-profile-thumb")
144149
description = sel.select_text("p#tv-series-desc")
145150
tags = sel.select_texts("div.item.categories a")
146151
rating = sel.select_text("span.color-imdb")
147152
actors = sel.select_texts("div.content h5")
148-
year = sel.extract_year("span.item.year") or sel.regex_first(r"\((\d{4})\)", title)
149-
153+
year = sel.extract_year("div.truncate")
154+
duration = sel.regex_first(r"(\d+)", sel.select_text(".media-meta td:last-child"))
155+
if duration == year or int(duration) < 40:
156+
duration = None
157+
150158
common_info = {
151159
"url" : url,
152160
"poster" : self.fix_url(poster) if poster else None,
@@ -155,7 +163,8 @@ async def load_item(self, url: str) -> SeriesInfo | MovieInfo:
155163
"tags" : tags,
156164
"rating" : rating,
157165
"year" : str(year) if year else None,
158-
"actors" : actors
166+
"actors" : actors,
167+
"duration" : duration
159168
}
160169

161170
episodes = []

KekikStream/Plugins/SinemaCX.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,29 +84,29 @@ async def load_item(self, url: str) -> MovieInfo:
8484
secici = HTMLHelper(istek.text)
8585

8686
title = secici.select_text("div.f-bilgi h1")
87-
poster = secici.select_poster("link[rel='image_src']")
87+
poster = secici.select_poster("div.resim img")
8888
description = secici.select_text("div.ackl div.scroll-liste")
89+
rating = secici.select_text("b.puandegistir")
8990
tags = secici.select_texts("div.f-bilgi div.tur a")
90-
year = secici.extract_year("div.f-bilgi ul.detay a[href*='yapim']")
91+
year = secici.extract_year("ul.detay a[href*='yapim']")
9192
actors = secici.select_texts("li.oync li.oyuncu-k span.isim")
92-
duration = int(secici.regex_first(r"(\d+)", secici.select_text("div.f-bilgi")) or 0)
9393

9494
return MovieInfo(
9595
url = url,
9696
poster = self.fix_url(poster) if poster else None,
9797
title = title or "Bilinmiyor",
9898
description = description,
99+
rating = rating,
99100
tags = tags,
100101
year = str(year) if year else None,
101-
actors = actors,
102-
duration = duration
102+
actors = actors
103103
)
104104

105105
async def load_links(self, url: str) -> list[ExtractResult]:
106106
istek = await self.httpx.get(url)
107107
secici = HTMLHelper(istek.text)
108108

109-
iframe_list = secici.select_all_attr("iframe", "data-vsrc")
109+
iframe_list = secici.select_attrs("iframe", "data-vsrc")
110110

111111
# Sadece fragman varsa /2/ sayfasından dene
112112
has_only_trailer = all(
@@ -119,7 +119,7 @@ async def load_links(self, url: str) -> list[ExtractResult]:
119119
alt_istek = await self.httpx.get(alt_url)
120120
alt_istek = await self.httpx.get(alt_url)
121121
alt_sec = HTMLHelper(alt_istek.text)
122-
iframe_list = alt_sec.select_all_attr("iframe", "data-vsrc")
122+
iframe_list = alt_sec.select_attrs("iframe", "data-vsrc")
123123

124124
if not iframe_list:
125125
return []

KekikStream/Plugins/Sinezy.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ async def load_item(self, url: str) -> MovieInfo:
9393
tags = secici.select_texts("div.detail span a")
9494
actors = secici.select_texts("span.oyn p")
9595
year = secici.extract_year()
96+
duration = secici.regex_first(r"(\d+) Dakika", secici.select_text("div.detail p"))
9697

9798
return MovieInfo(
9899
url = url,
@@ -102,7 +103,8 @@ async def load_item(self, url: str) -> MovieInfo:
102103
tags = tags,
103104
rating = rating,
104105
year = str(year) if year else None,
105-
actors = actors
106+
actors = actors,
107+
duration = duration
106108
)
107109

108110
async def load_links(self, url: str) -> list[ExtractResult]:

KekikStream/Plugins/UgurFilm.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,26 +71,30 @@ async def load_item(self, url: str) -> MovieInfo:
7171
title = secici.select_text("div.bilgi h2")
7272
poster = secici.select_poster("div.resim img")
7373
description = secici.select_text("div.slayt-aciklama")
74+
rating = secici.select_text("b#puandegistir")
7475
tags = secici.select_texts("p.tur a[href*='/category/']")
7576
year = secici.extract_year("a[href*='/yil/']")
7677
actors = secici.select_texts("li.oyuncu-k span")
78+
duration = secici.regex_first(r"(\d+) Dakika", secici.select_text("div.bilgi b"))
7779

7880
return MovieInfo(
7981
url = url,
8082
poster = self.fix_url(poster) if poster else None,
8183
title = title or "Bilinmiyor",
8284
description = description,
85+
rating = rating,
8386
tags = tags,
8487
year = str(year) if year else None,
85-
actors = actors
88+
actors = actors,
89+
duration = duration
8690
)
8791

8892
async def load_links(self, url: str) -> list[ExtractResult]:
8993
istek = await self.httpx.get(url)
9094
secici = HTMLHelper(istek.text)
9195
results = []
9296

93-
part_links = secici.select_all_attr("li.parttab a", "href")
97+
part_links = secici.select_attrs("li.parttab a", "href")
9498

9599
for part_link in part_links:
96100
sub_response = await self.httpx.get(part_link)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
setup(
77
# ? Genel Bilgiler
88
name = "KekikStream",
9-
version = "2.4.2",
9+
version = "2.4.3",
1010
url = "https://github.com/keyiflerolsun/KekikStream",
1111
description = "terminal üzerinden medya içeriği aramanızı ve VLC/MPV gibi popüler medya oynatıcılar aracılığıyla doğrudan izlemenizi sağlayan modüler ve genişletilebilir bir bıdı bıdı",
1212
keywords = ["KekikStream", "KekikAkademi", "keyiflerolsun"],

0 commit comments

Comments
 (0)