KekikStream 2.1.0__tar.gz → 2.1.2__tar.gz
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-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/MixTiger.py +5 -5
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/FilmMakinesi.py +15 -7
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/HDFilmCehennemi.py +2 -21
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream.egg-info/PKG-INFO +1 -1
- {kekikstream-2.1.0 → kekikstream-2.1.2}/PKG-INFO +1 -1
- {kekikstream-2.1.0 → kekikstream-2.1.2}/setup.py +1 -1
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/CLI/__init__.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/CLI/pypi_kontrol.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Extractor/ExtractorBase.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Extractor/ExtractorLoader.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Extractor/ExtractorManager.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Extractor/ExtractorModels.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Extractor/YTDLPCache.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Media/MediaHandler.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Media/MediaManager.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Plugin/PluginBase.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Plugin/PluginLoader.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Plugin/PluginManager.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/Plugin/PluginModels.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/UI/UIManager.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Core/__init__.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/CloseLoad.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/ContentX.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/DonilasPlay.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/DzenRu.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/ExPlay.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/HDPlayerSystem.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/JetTv.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/MailRu.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/MixPlayHD.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/MolyStream.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/Odnoklassniki.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/PeaceMakerst.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/PixelDrain.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/PlayerFilmIzle.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/RapidVid.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/SetPlay.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/SetPrime.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/SibNet.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/Sobreatsesuyp.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/TRsTX.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/TauVideo.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/TurboImgz.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/TurkeyPlayer.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/VCTPlay.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/VidHide.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/VidMoly.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/VidMoxy.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/VidPapi.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/VideoSeyred.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/YTDLP.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Extractors/YildizKisaFilm.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/BelgeselX.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/DiziBox.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/DiziPal.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/DiziYou.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/Dizilla.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/FilmBip.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/FilmModu.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/FullHDFilm.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/JetFilmizle.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/KultFilmler.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/RecTV.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/RoketDizi.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/SelcukFlix.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/SetFilmIzle.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/SezonlukDizi.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/SineWix.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/Sinefy.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/SinemaCX.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/Sinezy.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/SuperFilmGeldi.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/Plugins/UgurFilm.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/__init__.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/__main__.py +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream/requirements.txt +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream.egg-info/SOURCES.txt +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream.egg-info/dependency_links.txt +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream.egg-info/entry_points.txt +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream.egg-info/requires.txt +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/KekikStream.egg-info/top_level.txt +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/LICENSE +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/MANIFEST.in +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/README.md +0 -0
- {kekikstream-2.1.0 → kekikstream-2.1.2}/setup.cfg +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
|
+
|
|
@@ -104,16 +104,24 @@ class FilmMakinesi(PluginBase):
|
|
|
104
104
|
istek = await self.httpx.get(url)
|
|
105
105
|
secici = Selector(istek.text)
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
response = []
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
# Video parts linklerini ve etiketlerini al
|
|
110
110
|
for link in secici.css("div.video-parts a[data-video_url]"):
|
|
111
|
-
|
|
111
|
+
video_url = link.attrib.get("data-video_url")
|
|
112
|
+
label = link.css("::text").get() or ""
|
|
113
|
+
label = label.strip()
|
|
112
114
|
|
|
113
|
-
|
|
114
|
-
for link in all_links:
|
|
115
|
-
data = await self.extract(link)
|
|
115
|
+
data = await self.extract(video_url, prefix=label.split()[0] if label else None)
|
|
116
116
|
if data:
|
|
117
117
|
response.append(data)
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
# Eğer video-parts yoksa iframe kullan
|
|
120
|
+
if not response:
|
|
121
|
+
iframe_src = secici.css("iframe::attr(data-src)").get()
|
|
122
|
+
if iframe_src:
|
|
123
|
+
data = await self.extract(iframe_src)
|
|
124
|
+
if data:
|
|
125
|
+
response.append(data)
|
|
126
|
+
|
|
127
|
+
return response
|
|
@@ -147,29 +147,10 @@ class HDFilmCehennemi(PluginBase):
|
|
|
147
147
|
def hdch_decode(self, value_parts: list[str]) -> str:
|
|
148
148
|
"""
|
|
149
149
|
HDFilmCehennemi için özel decoder.
|
|
150
|
-
|
|
150
|
+
StreamDecoder._brute_force ile 24 farklı permütasyonu dener.
|
|
151
151
|
"""
|
|
152
152
|
try:
|
|
153
|
-
|
|
154
|
-
joined = ''.join(value_parts)
|
|
155
|
-
|
|
156
|
-
# 2. Ters çevir (REV)
|
|
157
|
-
result = StreamDecoder._reverse(joined)
|
|
158
|
-
|
|
159
|
-
# 3. İlk base64 decode (B64D)
|
|
160
|
-
result = StreamDecoder._base64_decode(result)
|
|
161
|
-
if result is None:
|
|
162
|
-
return ""
|
|
163
|
-
|
|
164
|
-
# 4. İkinci base64 decode (B64D) - JavaScript'te iki kez atob yapılıyor!
|
|
165
|
-
result = StreamDecoder._base64_decode(result)
|
|
166
|
-
if result is None:
|
|
167
|
-
return ""
|
|
168
|
-
|
|
169
|
-
# 5. Shift back (SHF)
|
|
170
|
-
result = StreamDecoder._shift_back(result)
|
|
171
|
-
|
|
172
|
-
return result
|
|
153
|
+
return StreamDecoder._brute_force(value_parts) or ""
|
|
173
154
|
except Exception:
|
|
174
155
|
return ""
|
|
175
156
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: KekikStream
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.2
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: KekikStream
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.2
|
|
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
|
|
@@ -6,7 +6,7 @@ from io import open
|
|
|
6
6
|
setup(
|
|
7
7
|
# ? Genel Bilgiler
|
|
8
8
|
name = "KekikStream",
|
|
9
|
-
version = "2.1.
|
|
9
|
+
version = "2.1.2",
|
|
10
10
|
url = "https://github.com/keyiflerolsun/KekikStream",
|
|
11
11
|
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ı",
|
|
12
12
|
keywords = ["KekikStream", "KekikAkademi", "keyiflerolsun"],
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|