KekikStream 2.0.5__tar.gz → 2.0.6__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.
Files changed (87) hide show
  1. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/HDFilmCehennemi.py +82 -7
  2. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/SetFilmIzle.py +17 -1
  3. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream.egg-info/PKG-INFO +1 -1
  4. {kekikstream-2.0.5 → kekikstream-2.0.6}/PKG-INFO +1 -1
  5. {kekikstream-2.0.5 → kekikstream-2.0.6}/setup.py +1 -1
  6. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/CLI/__init__.py +0 -0
  7. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/CLI/pypi_kontrol.py +0 -0
  8. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Extractor/ExtractorBase.py +0 -0
  9. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Extractor/ExtractorLoader.py +0 -0
  10. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Extractor/ExtractorManager.py +0 -0
  11. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Extractor/ExtractorModels.py +0 -0
  12. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Extractor/YTDLPCache.py +0 -0
  13. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Media/MediaHandler.py +0 -0
  14. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Media/MediaManager.py +0 -0
  15. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Plugin/PluginBase.py +0 -0
  16. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Plugin/PluginLoader.py +0 -0
  17. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Plugin/PluginManager.py +0 -0
  18. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/Plugin/PluginModels.py +0 -0
  19. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/UI/UIManager.py +0 -0
  20. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Core/__init__.py +0 -0
  21. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/CloseLoad.py +0 -0
  22. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/ContentX.py +0 -0
  23. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/DonilasPlay.py +0 -0
  24. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/DzenRu.py +0 -0
  25. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/ExPlay.py +0 -0
  26. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/FirePlayer.py +0 -0
  27. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/HDPlayerSystem.py +0 -0
  28. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/JetTv.py +0 -0
  29. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/MailRu.py +0 -0
  30. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/MixPlayHD.py +0 -0
  31. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/MixTiger.py +0 -0
  32. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/MolyStream.py +0 -0
  33. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/Odnoklassniki.py +0 -0
  34. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/PeaceMakerst.py +0 -0
  35. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/PixelDrain.py +0 -0
  36. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/PlayerFilmIzle.py +0 -0
  37. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/RapidVid.py +0 -0
  38. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/SetPlay.py +0 -0
  39. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/SetPrime.py +0 -0
  40. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/SibNet.py +0 -0
  41. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/Sobreatsesuyp.py +0 -0
  42. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/TRsTX.py +0 -0
  43. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/TauVideo.py +0 -0
  44. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/TurboImgz.py +0 -0
  45. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/TurkeyPlayer.py +0 -0
  46. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/VCTPlay.py +0 -0
  47. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/VidHide.py +0 -0
  48. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/VidMoly.py +0 -0
  49. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/VidMoxy.py +0 -0
  50. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/VidPapi.py +0 -0
  51. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/VideoSeyred.py +0 -0
  52. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/YTDLP.py +0 -0
  53. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Extractors/YildizKisaFilm.py +0 -0
  54. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/BelgeselX.py +0 -0
  55. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/DiziBox.py +0 -0
  56. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/DiziPal.py +0 -0
  57. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/DiziYou.py +0 -0
  58. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/Dizilla.py +0 -0
  59. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/FilmBip.py +0 -0
  60. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/FilmMakinesi.py +0 -0
  61. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/FilmModu.py +0 -0
  62. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/FullHDFilm.py +0 -0
  63. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
  64. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/JetFilmizle.py +0 -0
  65. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/KultFilmler.py +0 -0
  66. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/RecTV.py +0 -0
  67. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/RoketDizi.py +0 -0
  68. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/SelcukFlix.py +0 -0
  69. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/SezonlukDizi.py +0 -0
  70. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/SineWix.py +0 -0
  71. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/Sinefy.py +0 -0
  72. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/SinemaCX.py +0 -0
  73. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/Sinezy.py +0 -0
  74. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/SuperFilmGeldi.py +0 -0
  75. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/Plugins/UgurFilm.py +0 -0
  76. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/__init__.py +0 -0
  77. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/__main__.py +0 -0
  78. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream/requirements.txt +0 -0
  79. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream.egg-info/SOURCES.txt +0 -0
  80. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream.egg-info/dependency_links.txt +0 -0
  81. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream.egg-info/entry_points.txt +0 -0
  82. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream.egg-info/requires.txt +0 -0
  83. {kekikstream-2.0.5 → kekikstream-2.0.6}/KekikStream.egg-info/top_level.txt +0 -0
  84. {kekikstream-2.0.5 → kekikstream-2.0.6}/LICENSE +0 -0
  85. {kekikstream-2.0.5 → kekikstream-2.0.6}/MANIFEST.in +0 -0
  86. {kekikstream-2.0.5 → kekikstream-2.0.6}/README.md +0 -0
  87. {kekikstream-2.0.5 → kekikstream-2.0.6}/setup.cfg +0 -0
@@ -3,7 +3,7 @@
3
3
  from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult, Subtitle
4
4
  from parsel import Selector
5
5
  from Kekik.Sifreleme import Packer, StreamDecoder
6
- import random, string, re
6
+ import random, string, re, base64
7
7
 
8
8
  class HDFilmCehennemi(PluginBase):
9
9
  name = "HDFilmCehennemi"
@@ -146,17 +146,85 @@ class HDFilmCehennemi(PluginBase):
146
146
 
147
147
  return results
148
148
 
149
+ def hdch_decode(self, value_parts: list[str]) -> str:
150
+ """
151
+ HDFilmCehennemi için özel decoder.
152
+ JavaScript sırası: join -> reverse -> atob -> atob -> shift_back
153
+ """
154
+ try:
155
+ # 1. Parçaları birleştir
156
+ joined = ''.join(value_parts)
157
+
158
+ # 2. Ters çevir (REV)
159
+ result = StreamDecoder._reverse(joined)
160
+
161
+ # 3. İlk base64 decode (B64D)
162
+ result = StreamDecoder._base64_decode(result)
163
+ if result is None:
164
+ return ""
165
+
166
+ # 4. İkinci base64 decode (B64D) - JavaScript'te iki kez atob yapılıyor!
167
+ result = StreamDecoder._base64_decode(result)
168
+ if result is None:
169
+ return ""
170
+
171
+ # 5. Shift back (SHF)
172
+ result = StreamDecoder._shift_back(result)
173
+
174
+ return result
175
+ except Exception:
176
+ return ""
177
+
178
+ def extract_hdch_url(self, unpacked: str) -> str:
179
+ """HDFilmCehennemi unpacked script'ten video URL'sini çıkar"""
180
+ # 1) Decode fonksiyonunun adını bul: function <NAME>(value_parts)
181
+ match_fn = re.search(r'function\s+(\w+)\s*\(\s*value_parts\s*\)', unpacked)
182
+ if not match_fn:
183
+ return ""
184
+
185
+ fn_name = match_fn.group(1)
186
+
187
+ # 2) Bu fonksiyonun array ile çağrıldığı yeri bul: <NAME>([ ... ])
188
+ array_call_regex = re.compile(rf'{re.escape(fn_name)}\(\s*\[(.*?)\]\s*\)', re.DOTALL)
189
+ match_call = array_call_regex.search(unpacked)
190
+ if not match_call:
191
+ return ""
192
+
193
+ array_body = match_call.group(1)
194
+
195
+ # 3) Array içindeki string parçalarını topla
196
+ parts = re.findall(r'["\']([^"\']+)["\']', array_body)
197
+ if not parts:
198
+ return ""
199
+
200
+ # 4) Özel decoder ile çöz
201
+ return self.hdch_decode(parts)
202
+
149
203
  async def invoke_local_source(self, iframe: str, source: str, url: str):
150
- self.httpx.headers.update({"Referer": f"{self.main_url}/"})
204
+ self.httpx.headers.update({
205
+ "Referer": f"{self.main_url}/",
206
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0"
207
+ })
151
208
  istek = await self.httpx.get(iframe)
152
209
 
210
+ if not istek.text:
211
+ return await self.cehennempass(iframe.split("/")[-1])
212
+
213
+ # eval(function...) içeren packed script bul
214
+ eval_match = re.search(r'(eval\(function[\s\S]+)', istek.text)
215
+ if not eval_match:
216
+ return await self.cehennempass(iframe.split("/")[-1])
217
+
153
218
  try:
154
- eval_func = re.compile(r'\s*(eval\(function[\s\S].*)\s*').findall(istek.text)[0]
219
+ unpacked = Packer.unpack(eval_match.group(1))
155
220
  except Exception:
156
221
  return await self.cehennempass(iframe.split("/")[-1])
157
222
 
158
- unpacked = Packer.unpack(eval_func)
159
- video_url = StreamDecoder.extract_stream_url(unpacked)
223
+ # HDFilmCehennemi özel decoder ile video URL'sini çıkar
224
+ video_url = self.extract_hdch_url(unpacked)
225
+
226
+ if not video_url:
227
+ return await self.cehennempass(iframe.split("/")[-1])
160
228
 
161
229
  subtitles = []
162
230
  try:
@@ -200,8 +268,15 @@ class HDFilmCehennemi(PluginBase):
200
268
  match = re.search(r'data-src=\\\"([^"]+)', api_get.text)
201
269
  iframe = match[1].replace("\\", "") if match else None
202
270
 
203
- if iframe and "?rapidrame_id=" in iframe:
204
- iframe = f"{self.main_url}/playerr/{iframe.split('?rapidrame_id=')[1]}"
271
+ if not iframe:
272
+ continue
273
+
274
+ # mobi URL'si varsa direkt kullan (query string'i kaldır)
275
+ if "mobi" in iframe:
276
+ iframe = iframe.split("?")[0] # rapidrame_id query param'ı kaldır
277
+ # mobi değilse ve rapidrame varsa rplayer kullan
278
+ elif "rapidrame" in iframe and "?rapidrame_id=" in iframe:
279
+ iframe = f"{self.main_url}/rplayer/{iframe.split('?rapidrame_id=')[1]}"
205
280
 
206
281
  video_data_list = await self.invoke_local_source(iframe, source, url)
207
282
  if not video_data_list:
@@ -199,6 +199,13 @@ class SetFilmIzle(PluginBase):
199
199
 
200
200
  nonce = secici.css("div#playex::attr(data-nonce)").get() or ""
201
201
 
202
+ # partKey to dil label mapping
203
+ part_key_labels = {
204
+ "turkcedublaj" : "Türkçe Dublaj",
205
+ "turkcealtyazi" : "Türkçe Altyazı",
206
+ "orijinal" : "Orijinal"
207
+ }
208
+
202
209
  links = []
203
210
  for player in secici.css("nav.player a"):
204
211
  source_id = player.css("::attr(data-post-id)").get()
@@ -233,10 +240,19 @@ class SetFilmIzle(PluginBase):
233
240
  if "setplay" not in iframe_url and part_key:
234
241
  iframe_url = f"{iframe_url}?partKey={part_key}"
235
242
 
243
+ # Dil etiketi oluştur
244
+ label = part_key_labels.get(part_key, "")
245
+ if not label and part_key:
246
+ label = part_key.replace("_", " ").title()
247
+
236
248
  extractor = self.ex_manager.find_extractor(iframe_url)
249
+ name = extractor.name if extractor else player_name or "Direct Link"
250
+ if label:
251
+ name = f"{name} | {label}"
252
+
237
253
  links.append({
238
254
  "url" : iframe_url,
239
- "name" : extractor.name if extractor else player_name or "Direct Link",
255
+ "name" : name,
240
256
  "referer" : self.main_url
241
257
  })
242
258
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 2.0.5
3
+ Version: 2.0.6
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.0.5
3
+ Version: 2.0.6
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.0.5",
9
+ version = "2.0.6",
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