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.
@@ -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
- # Use recursive extraction
47
- return await nested_extractor.extract(m3u_link, referer=final_referer)
45
+ # Nested extractor ile çıkar
46
+ return await nested_extractor.extract(m3u_link, referer=ext_ref)
48
47
  except Exception:
49
- # If recursion fails, fallback to standard result
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().strip()
79
- poster = secici.css("img.cover-img::attr(src)").get().strip()
80
- description = secici.css("div.info-description p::text").get().strip()
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().strip()
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
- iframe_src = secici.css("iframe::attr(data-src)").get()
111
+ response = []
108
112
 
109
- all_links = [iframe_src] if iframe_src else []
113
+ # Video parts linklerini ve etiketlerini al
110
114
  for link in secici.css("div.video-parts a[data-video_url]"):
111
- all_links.append(link.attrib.get("data-video_url"))
115
+ video_url = link.attrib.get("data-video_url")
116
+ label = link.css("::text").get() or ""
117
+ label = label.strip()
112
118
 
113
- response = []
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
- return response
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 self.hdch_decode(parts)
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.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=mMEYhhr5-u6GgIrLESeFTRdwDykgSXKJO4KtkMML1bw,2124
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=QtjgRjHz3wsbb76j9uNWd5xyOsCDOGEpCL9vNVg7wps,5126
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=2cJMef1avcHi-HK-FUCVoLnv_fbCV6IqNZ9uvX_5hwA,11399
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.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
76
- kekikstream-2.1.1.dist-info/METADATA,sha256=mbGw26dlO4A9DSYOrwshgR6cHiSjPDWMr_dNiiBJGM4,10090
77
- kekikstream-2.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
78
- kekikstream-2.1.1.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
79
- kekikstream-2.1.1.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
80
- kekikstream-2.1.1.dist-info/RECORD,,
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,,