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.
- KekikStream/Plugins/HDFilmCehennemi.py +76 -46
- {kekikstream-1.3.8.dist-info → kekikstream-1.3.9.dist-info}/METADATA +1 -1
- {kekikstream-1.3.8.dist-info → kekikstream-1.3.9.dist-info}/RECORD +7 -7
- {kekikstream-1.3.8.dist-info → kekikstream-1.3.9.dist-info}/LICENSE +0 -0
- {kekikstream-1.3.8.dist-info → kekikstream-1.3.9.dist-info}/WHEEL +0 -0
- {kekikstream-1.3.8.dist-info → kekikstream-1.3.9.dist-info}/entry_points.txt +0 -0
- {kekikstream-1.3.8.dist-info → kekikstream-1.3.9.dist-info}/top_level.txt +0 -0
@@ -1,8 +1,9 @@
|
|
1
1
|
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
2
2
|
|
3
|
-
from KekikStream.Core
|
4
|
-
from parsel
|
5
|
-
import
|
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
|
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.
|
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=
|
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.
|
85
|
-
kekikstream-1.3.
|
86
|
-
kekikstream-1.3.
|
87
|
-
kekikstream-1.3.
|
88
|
-
kekikstream-1.3.
|
89
|
-
kekikstream-1.3.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|