KekikStream 1.3.8__py3-none-any.whl → 1.3.9__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.
@@ -1,8 +1,9 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from KekikStream.Core import kekik_cache, PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult, Subtitle
4
- from parsel import Selector
5
- import random, string
3
+ from KekikStream.Core import kekik_cache, PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult, Subtitle
4
+ from parsel import Selector
5
+ from KekikStream.Helpers.Unpack import unpack
6
+ import random, string, re, base64
6
7
 
7
8
  class HDFilmCehennemi(PluginBase):
8
9
  name = "HDFilmCehennemi"
@@ -103,51 +104,12 @@ class HDFilmCehennemi(PluginBase):
103
104
  actors = actors,
104
105
  duration = duration_minutes
105
106
  )
106
-
107
+
107
108
  def generate_random_cookie(self):
108
109
  return "".join(random.choices(string.ascii_letters + string.digits, k=16))
109
110
 
110
111
  @kekik_cache(ttl=15*60)
111
- async def load_links(self, url: str) -> list[str]:
112
- self._data.clear()
113
-
114
- istek = await self.httpx.get(url)
115
- secici = Selector(istek.text)
116
-
117
- lang_code = secici.css("div.alternative-links::attr(data-lang)").get().upper()
118
- buttons = secici.css("div.alternative-links > button")
119
-
120
- link_list = []
121
-
122
- for button in buttons:
123
- source = button.css("button.alternative-link::text").get().replace("(HDrip Xbet)", "").strip() + " " + lang_code
124
- video_id = button.css("button.alternative-link::attr(data-video)").get()
125
-
126
- istek = await self.httpx.get(
127
- url = f"{self.main_url}/video/{video_id}/",
128
- headers = {
129
- "Referer" : f"{self.main_url}/",
130
- "X-Requested-With" : "fetch",
131
- "authority" : f"{self.main_url}"
132
- }
133
- )
134
-
135
- data = istek.json().get("data")
136
- secici = Selector(data["html"])
137
- iframe_url = secici.css("iframe::attr(src)").get() or secici.css("iframe::attr(data-src)").get()
138
-
139
- if "?rapidrame_id=" in iframe_url:
140
- # https://hdfilmcehennemi.mobi/video/embed/uQcCR9nhaNz/?rapidrame_id=j4b4kvc0s24l\
141
- video_id = iframe_url.split("=")[1]
142
- else:
143
- # https://www.hdfilmcehennemi.nl/rplayer/j4b4kvc0s24l/
144
- video_id = iframe_url.split("/")[-1]
145
-
146
- # print(video_id)
147
- if(video_id):
148
- break
149
-
150
- # selected_quality: low
112
+ async def cehennempass(self, video_id: str):
151
113
  istek = await self.httpx.post(
152
114
  url = "https://cehennempass.pw/process_quality_selection.php",
153
115
  headers = {
@@ -160,7 +122,6 @@ class HDFilmCehennemi(PluginBase):
160
122
  )
161
123
 
162
124
  video_url = istek.json().get("download_link")
163
- # print(video_url)
164
125
 
165
126
  self._data[self.fix_url(video_url)] = {
166
127
  "ext_name" : f"{self.name} | Düşük Kalite",
@@ -169,7 +130,6 @@ class HDFilmCehennemi(PluginBase):
169
130
  "subtitles" : []
170
131
  }
171
132
 
172
- # selected_quality: high
173
133
  istek = await self.httpx.post(
174
134
  url = "https://cehennempass.pw/process_quality_selection.php",
175
135
  headers = {
@@ -190,6 +150,76 @@ class HDFilmCehennemi(PluginBase):
190
150
  "subtitles" : []
191
151
  }
192
152
 
153
+ return None
154
+
155
+ @kekik_cache(ttl=15*60)
156
+ async def invoke_local_source(self, iframe: str, source: str, video_id: str, url: str):
157
+ self.httpx.headers.update({"Referer": f"{self.main_url}/"})
158
+ istek = await self.httpx.get(iframe)
159
+
160
+ try:
161
+ eval_func = re.compile(r'\s*(eval\(function[\s\S].*)\s*').findall(istek.text)[0]
162
+ except Exception:
163
+ await self.cehennempass(video_id)
164
+ return None, None
165
+
166
+ unpacked = unpack(eval_func)
167
+ b64_url = re.search(r'file_link=\"(.*)\"\;', unpacked)[1]
168
+ video_url = base64.b64decode(b64_url).decode("utf-8")
169
+
170
+ subtitles = []
171
+ try:
172
+ sub_data = istek.text.split("tracks: [")[1].split("]")[0]
173
+ for sub in re.findall(r'file":"([^"]+)".*?"language":"([^"]+)"', sub_data, flags=re.DOTALL):
174
+ subtitles.append(Subtitle(
175
+ name = sub[1].upper(),
176
+ url = self.fix_url(sub[0].replace("\\", "")),
177
+ ))
178
+ except Exception:
179
+ pass
180
+
181
+ data = {
182
+ "ext_name" : f"{self.name} | {source}",
183
+ "name" : f"{self.name} | {source}",
184
+ "referer" : url,
185
+ "subtitles" : subtitles
186
+ }
187
+
188
+ return video_url, data
189
+
190
+ @kekik_cache(ttl=15*60)
191
+ async def load_links(self, url: str) -> list[str]:
192
+ istek = await self.httpx.get(url)
193
+ secici = Selector(istek.text)
194
+
195
+ for alternatif in secici.css("div.alternative-links"):
196
+ lang_code = alternatif.css("::attr(data-lang)").get().upper()
197
+
198
+ for link in alternatif.css("button.alternative-link"):
199
+ source = f"{link.css('::text').get().replace('(HDrip Xbet)', '').strip()} {lang_code}"
200
+ video_id = link.css("::attr(data-video)").get()
201
+
202
+ api_get = await self.httpx.get(
203
+ url = f"{self.main_url}/video/{video_id}/",
204
+ headers = {
205
+ "Content-Type" : "application/json",
206
+ "X-Requested-With" : "fetch",
207
+ "Referer" : url,
208
+ },
209
+ )
210
+
211
+ match = re.search(r'data-src=\\"([^"]+)', api_get.text)
212
+ iframe = match[1].replace("\\", "") if match else None
213
+
214
+ if iframe and "?rapidrame_id=" in iframe:
215
+ iframe = f"{self.main_url}/playerr/{iframe.split('?rapidrame_id=')[1]}"
216
+
217
+ video_url, data = await self.invoke_local_source(iframe, source, video_id, url)
218
+ if not video_url:
219
+ continue
220
+
221
+ self._data[video_url] = data
222
+
193
223
  return list(self._data.keys())
194
224
 
195
225
  async def play(self, name: str, url: str, referer: str, subtitles: list[Subtitle]):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: KekikStream
3
- Version: 1.3.8
3
+ Version: 1.3.9
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
@@ -48,7 +48,7 @@ KekikStream/Plugins/DiziYou.py,sha256=yiLHe9cP_eG8CG6lcQ8KYEzDckjFUL3cw0A-1ixCLb
48
48
  KekikStream/Plugins/Dizilla.py,sha256=E3HehhcnZBDVJzroRa7jlFzj3ixdx9-LT7YnWKmcX3Q,6899
49
49
  KekikStream/Plugins/FilmMakinesi.py,sha256=J4v35Ln3RehWPai3I-9nWrasRLx3hN3IgrWVpt5b_HE,5712
50
50
  KekikStream/Plugins/FullHDFilmizlesene.py,sha256=AO9Il0PE77JUvg1AN4Vxl95pTrCBbOjclqFGWuzo7cY,6271
51
- KekikStream/Plugins/HDFilmCehennemi.py,sha256=RcO2nPQ60WiwcB0QnmD4z1lVN5JTAJOQkk-VfNUTLr8,8749
51
+ KekikStream/Plugins/HDFilmCehennemi.py,sha256=tZ0ymR-9ppclxjrgNs5xw0m-pIsONRzPelxWHQDliAk,9920
52
52
  KekikStream/Plugins/JetFilmizle.py,sha256=Hi_yzjUyTQryx-4kTfxNdNSqqQcwodc_JJULOTKTrBA,5483
53
53
  KekikStream/Plugins/RecTV.py,sha256=rjsaz1OZGqJAHHvmm1rzpD99K23jb9rx55zhu03BPOk,7247
54
54
  KekikStream/Plugins/SezonlukDizi.py,sha256=IvmOB6qCEHBy41BS4KFBjsTegmzEF6l-2l_CvamYrW8,6099
@@ -81,9 +81,9 @@ KekikStreamAPI/Public/Home/Static/JS/bakalim.js,sha256=1EkIAxNeX1irQIJ0hTwlXCpHN
81
81
  KekikStreamAPI/Public/Home/Templates/_html_taban.html,sha256=dW0Z4tTU2Fm07nz7u4o2TFFxOmCWmRq4CqMsdnpbneE,2600
82
82
  KekikStreamAPI/Public/Home/Templates/index.html,sha256=BqI3MfuiNnWjQxksaviYZUeMwrOh3uuvYCRPnewysJg,1307
83
83
  KekikStreamAPI/Settings/__init__.py,sha256=nmxsb7qwBuXEjG2PC5b8Jl9UOj_mAUVt98rfWnBl25I,365
84
- kekikstream-1.3.8.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
85
- kekikstream-1.3.8.dist-info/METADATA,sha256=J4dbOJgT2JX9jmwYYLfnDByOXJLWwiSoq3CQy_6EVww,5090
86
- kekikstream-1.3.8.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
87
- kekikstream-1.3.8.dist-info/entry_points.txt,sha256=UpmG0Vp32rFbTsV22loNZugX3cfO5Scdr7j_eyWOr4E,88
88
- kekikstream-1.3.8.dist-info/top_level.txt,sha256=VHi7CEC3z7vCAdeRLxLn00sb-xosSvSFsT0TJRZVDw4,27
89
- kekikstream-1.3.8.dist-info/RECORD,,
84
+ kekikstream-1.3.9.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
85
+ kekikstream-1.3.9.dist-info/METADATA,sha256=DNa9NMcLeXy5ZpZJEYa0Y3PWxiX50MAgoRX13nC-Bx4,5090
86
+ kekikstream-1.3.9.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
87
+ kekikstream-1.3.9.dist-info/entry_points.txt,sha256=UpmG0Vp32rFbTsV22loNZugX3cfO5Scdr7j_eyWOr4E,88
88
+ kekikstream-1.3.9.dist-info/top_level.txt,sha256=VHi7CEC3z7vCAdeRLxLn00sb-xosSvSFsT0TJRZVDw4,27
89
+ kekikstream-1.3.9.dist-info/RECORD,,