KekikStream 2.1.1__py3-none-any.whl → 2.1.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- KekikStream/Extractors/MixTiger.py +5 -5
- KekikStream/Plugins/FilmMakinesi.py +24 -12
- KekikStream/Plugins/HDFilmCehennemi.py +4 -14
- {kekikstream-2.1.1.dist-info → kekikstream-2.1.4.dist-info}/METADATA +1 -1
- {kekikstream-2.1.1.dist-info → kekikstream-2.1.4.dist-info}/RECORD +9 -9
- {kekikstream-2.1.1.dist-info → kekikstream-2.1.4.dist-info}/WHEEL +0 -0
- {kekikstream-2.1.1.dist-info → kekikstream-2.1.4.dist-info}/entry_points.txt +0 -0
- {kekikstream-2.1.1.dist-info → kekikstream-2.1.4.dist-info}/licenses/LICENSE +0 -0
- {kekikstream-2.1.1.dist-info → kekikstream-2.1.4.dist-info}/top_level.txt +0 -0
|
@@ -37,16 +37,15 @@ class MixTiger(ExtractorBase):
|
|
|
37
37
|
if not m3u_link:
|
|
38
38
|
raise ValueError("Video URL not found in response")
|
|
39
39
|
|
|
40
|
-
# Recursive extraction check
|
|
40
|
+
# Recursive extraction check - başka extractor kullanılabilir mi?
|
|
41
41
|
try:
|
|
42
42
|
from KekikStream.Core.Extractor.ExtractorManager import ExtractorManager
|
|
43
|
-
# Import inside method to avoid circular dependency
|
|
44
43
|
manager = ExtractorManager()
|
|
45
44
|
if nested_extractor := manager.find_extractor(m3u_link):
|
|
46
|
-
#
|
|
47
|
-
return await nested_extractor.extract(m3u_link, referer=
|
|
45
|
+
# Nested extractor ile çıkar
|
|
46
|
+
return await nested_extractor.extract(m3u_link, referer=ext_ref)
|
|
48
47
|
except Exception:
|
|
49
|
-
#
|
|
48
|
+
# Recursive extraction başarısız olursa standart sonucu döndür
|
|
50
49
|
pass
|
|
51
50
|
|
|
52
51
|
return ExtractResult(
|
|
@@ -55,3 +54,4 @@ class MixTiger(ExtractorBase):
|
|
|
55
54
|
referer = None if "disk.yandex" in m3u_link else ext_ref,
|
|
56
55
|
subtitles = []
|
|
57
56
|
)
|
|
57
|
+
|
|
@@ -75,18 +75,22 @@ class FilmMakinesi(PluginBase):
|
|
|
75
75
|
istek = await self.httpx.get(url)
|
|
76
76
|
secici = Selector(istek.text)
|
|
77
77
|
|
|
78
|
-
title = secici.css("h1.title::text").get()
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
title = secici.css("h1.title::text").get()
|
|
79
|
+
title = title.strip() if title else ""
|
|
80
|
+
poster = secici.css("img.cover-img::attr(src)").get()
|
|
81
|
+
poster = poster.strip() if poster else ""
|
|
82
|
+
description = secici.css("div.info-description p::text").get()
|
|
83
|
+
description = description.strip() if description else ""
|
|
81
84
|
rating = secici.css("div.score::text").get()
|
|
82
85
|
if rating:
|
|
83
86
|
rating = rating.strip().split()[0]
|
|
84
|
-
year = secici.css("span.date a::text").get()
|
|
87
|
+
year = secici.css("span.date a::text").get()
|
|
88
|
+
year = year.strip() if year else ""
|
|
85
89
|
actors = secici.css("div.cast-name::text").getall()
|
|
86
90
|
tags = secici.css("div.genre a::text").getall()
|
|
87
91
|
duration = secici.css("div.time::text").get()
|
|
88
92
|
if duration:
|
|
89
|
-
duration = duration.split()[1].strip()
|
|
93
|
+
duration = duration.split()[1].strip() if len(duration.split()) > 1 else ""
|
|
90
94
|
|
|
91
95
|
return MovieInfo(
|
|
92
96
|
url = url,
|
|
@@ -104,16 +108,24 @@ class FilmMakinesi(PluginBase):
|
|
|
104
108
|
istek = await self.httpx.get(url)
|
|
105
109
|
secici = Selector(istek.text)
|
|
106
110
|
|
|
107
|
-
|
|
111
|
+
response = []
|
|
108
112
|
|
|
109
|
-
|
|
113
|
+
# Video parts linklerini ve etiketlerini al
|
|
110
114
|
for link in secici.css("div.video-parts a[data-video_url]"):
|
|
111
|
-
|
|
115
|
+
video_url = link.attrib.get("data-video_url")
|
|
116
|
+
label = link.css("::text").get() or ""
|
|
117
|
+
label = label.strip()
|
|
112
118
|
|
|
113
|
-
|
|
114
|
-
for link in all_links:
|
|
115
|
-
data = await self.extract(link)
|
|
119
|
+
data = await self.extract(video_url, prefix=label.split()[0] if label else None)
|
|
116
120
|
if data:
|
|
117
121
|
response.append(data)
|
|
118
122
|
|
|
119
|
-
|
|
123
|
+
# Eğer video-parts yoksa iframe kullan
|
|
124
|
+
if not response:
|
|
125
|
+
iframe_src = secici.css("iframe::attr(data-src)").get()
|
|
126
|
+
if iframe_src:
|
|
127
|
+
data = await self.extract(iframe_src)
|
|
128
|
+
if data:
|
|
129
|
+
response.append(data)
|
|
130
|
+
|
|
131
|
+
return response
|
|
@@ -144,16 +144,6 @@ class HDFilmCehennemi(PluginBase):
|
|
|
144
144
|
|
|
145
145
|
return results
|
|
146
146
|
|
|
147
|
-
def hdch_decode(self, value_parts: list[str]) -> str:
|
|
148
|
-
"""
|
|
149
|
-
HDFilmCehennemi için özel decoder.
|
|
150
|
-
StreamDecoder._brute_force ile 24 farklı permütasyonu dener.
|
|
151
|
-
"""
|
|
152
|
-
try:
|
|
153
|
-
return StreamDecoder._brute_force(value_parts) or ""
|
|
154
|
-
except Exception:
|
|
155
|
-
return ""
|
|
156
|
-
|
|
157
147
|
def extract_hdch_url(self, unpacked: str) -> str:
|
|
158
148
|
"""HDFilmCehennemi unpacked script'ten video URL'sini çıkar"""
|
|
159
149
|
# 1) Decode fonksiyonunun adını bul: function <NAME>(value_parts)
|
|
@@ -168,16 +158,16 @@ class HDFilmCehennemi(PluginBase):
|
|
|
168
158
|
match_call = array_call_regex.search(unpacked)
|
|
169
159
|
if not match_call:
|
|
170
160
|
return ""
|
|
171
|
-
|
|
161
|
+
|
|
172
162
|
array_body = match_call.group(1)
|
|
173
|
-
|
|
163
|
+
|
|
174
164
|
# 3) Array içindeki string parçalarını topla
|
|
175
165
|
parts = re.findall(r'["\']([^"\']+)["\']', array_body)
|
|
176
166
|
if not parts:
|
|
177
167
|
return ""
|
|
178
|
-
|
|
168
|
+
|
|
179
169
|
# 4) Özel decoder ile çöz
|
|
180
|
-
return
|
|
170
|
+
return StreamDecoder._brute_force(parts)
|
|
181
171
|
|
|
182
172
|
async def invoke_local_source(self, iframe: str, source: str, url: str):
|
|
183
173
|
self.httpx.headers.update({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: KekikStream
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.4
|
|
4
4
|
Summary: 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ı
|
|
5
5
|
Home-page: https://github.com/keyiflerolsun/KekikStream
|
|
6
6
|
Author: keyiflerolsun
|
|
@@ -25,7 +25,7 @@ KekikStream/Extractors/HDPlayerSystem.py,sha256=EgnFzx5Q4PkuwAtuff5SYU9k59B-CyOd
|
|
|
25
25
|
KekikStream/Extractors/JetTv.py,sha256=aA3WeOvR-tszac-WSwunZZb1NRy25TQH8vxY3TDscRI,1596
|
|
26
26
|
KekikStream/Extractors/MailRu.py,sha256=xQVCWwYqNoG5T43VAW1_m0v4e80FbO-1pNPKkwhTccU,1218
|
|
27
27
|
KekikStream/Extractors/MixPlayHD.py,sha256=POV_yq3KoZ6S6EqFsKYULEBz92NdUa2BpYKNo0eNQH8,1552
|
|
28
|
-
KekikStream/Extractors/MixTiger.py,sha256=
|
|
28
|
+
KekikStream/Extractors/MixTiger.py,sha256=4VbOYgE4s5H-BGVvJI0AI57M-WBWqnek_LGfCFHAucw,2116
|
|
29
29
|
KekikStream/Extractors/MolyStream.py,sha256=IeeBw9tJJrL5QQ-t2Yp-a-6lnDc3Y00UNiaN6m-o-7c,1160
|
|
30
30
|
KekikStream/Extractors/Odnoklassniki.py,sha256=YfFRCL3Ag5N4zDzK9ZLOr3HVQcsETFQpff1px02imJ0,4019
|
|
31
31
|
KekikStream/Extractors/PeaceMakerst.py,sha256=pEgJb3KDfEPAUjbuvrYbUlxIciKgED-Vd0arrRO3QCk,2317
|
|
@@ -54,11 +54,11 @@ KekikStream/Plugins/DiziPal.py,sha256=hCjf1as54Bc6aC3UV9P0T4yIbOFOP6jHIAoIgRMPbJ
|
|
|
54
54
|
KekikStream/Plugins/DiziYou.py,sha256=XTTShRhlDjTNeqgc28HF-FN9Y7tGUBzHZU0KuFgwvYA,8669
|
|
55
55
|
KekikStream/Plugins/Dizilla.py,sha256=OzZJuFDJK6q6szIcAFM-s3H1HNdUuTaK8VWVGhnONBs,11741
|
|
56
56
|
KekikStream/Plugins/FilmBip.py,sha256=bgdUJWW6f_DoaKxJPES0tJJRauy2PVpw4jsg2zAjbcI,6012
|
|
57
|
-
KekikStream/Plugins/FilmMakinesi.py,sha256=
|
|
57
|
+
KekikStream/Plugins/FilmMakinesi.py,sha256=PS2bST0IuzYSbE1D87KTeazZmWvLp7JC_gIC1lPkf6Y,5684
|
|
58
58
|
KekikStream/Plugins/FilmModu.py,sha256=ux5FACwmkuNQxx3rXQEeX-bWSXC4L7CfFxBZOhPuPFc,6524
|
|
59
59
|
KekikStream/Plugins/FullHDFilm.py,sha256=lYcGpes7HJYFHoKn_Ntk3gUL6bdm8MzDLAv0ns6S1YM,6837
|
|
60
60
|
KekikStream/Plugins/FullHDFilmizlesene.py,sha256=nimV_mSaPYYxG4_d-gnW2Bh4EKMM6hGh0Ev8RbJVs-8,6054
|
|
61
|
-
KekikStream/Plugins/HDFilmCehennemi.py,sha256=
|
|
61
|
+
KekikStream/Plugins/HDFilmCehennemi.py,sha256=LqTlqXdQkhcAME7XYcFW8HAvPxK2nSilXKkyVElsgcg,11060
|
|
62
62
|
KekikStream/Plugins/JetFilmizle.py,sha256=4gbvLgnjdzWr6f10jKYQAC4W5NEJCEOKxJnVQH36QTY,6386
|
|
63
63
|
KekikStream/Plugins/KultFilmler.py,sha256=H_U2uil9Z-aw10tZuSUB0dmMtQJrnckodGRhaA6t6gg,8944
|
|
64
64
|
KekikStream/Plugins/RecTV.py,sha256=tzIVjBP4YKL4dBvjRNIuECrAfNw6F892Fw0pXvLutoU,7187
|
|
@@ -72,9 +72,9 @@ KekikStream/Plugins/SinemaCX.py,sha256=jrE7gkvJgPKjk8XymztyxYErZtPVF9onW48E22Us9
|
|
|
72
72
|
KekikStream/Plugins/Sinezy.py,sha256=_iituEi6A7b-Y-wGcTkFknwFus-oAvZje2XKayzCZHY,6104
|
|
73
73
|
KekikStream/Plugins/SuperFilmGeldi.py,sha256=O3f8jwnX-ihF49kmZ7g6IKU2HZLmLf_RCucplDSglN4,5347
|
|
74
74
|
KekikStream/Plugins/UgurFilm.py,sha256=9vulu0uP0dWVVhWzDf-C7RQN_dLKB2AOJ2NoxU-YMlA,4672
|
|
75
|
-
kekikstream-2.1.
|
|
76
|
-
kekikstream-2.1.
|
|
77
|
-
kekikstream-2.1.
|
|
78
|
-
kekikstream-2.1.
|
|
79
|
-
kekikstream-2.1.
|
|
80
|
-
kekikstream-2.1.
|
|
75
|
+
kekikstream-2.1.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
76
|
+
kekikstream-2.1.4.dist-info/METADATA,sha256=3LauBNlXQmhyqEjU0AY9i9fxsEHs2PBl7LiY5G8TsiQ,10090
|
|
77
|
+
kekikstream-2.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
78
|
+
kekikstream-2.1.4.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
|
|
79
|
+
kekikstream-2.1.4.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
|
|
80
|
+
kekikstream-2.1.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|