KekikStream 2.4.8__py3-none-any.whl → 2.5.0__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.
Potentially problematic release.
This version of KekikStream might be problematic. Click here for more details.
- KekikStream/Core/Plugin/PluginBase.py +8 -2
- KekikStream/Extractors/Abstream.py +27 -0
- KekikStream/Extractors/Filemoon.py +2 -1
- KekikStream/Extractors/JetV.py +55 -0
- KekikStream/Extractors/Veev.py +145 -0
- KekikStream/Extractors/VidBiz.py +62 -0
- KekikStream/Extractors/VidHide.py +56 -7
- KekikStream/Extractors/Vtbe.py +38 -0
- KekikStream/Extractors/Zeus.py +61 -0
- KekikStream/Plugins/HDFilmCehennemi.py +37 -14
- KekikStream/Plugins/JetFilmizle.py +82 -49
- KekikStream/Plugins/KultFilmler.py +136 -68
- KekikStream/Plugins/RecTV.py +9 -5
- KekikStream/Plugins/RoketDizi.py +13 -22
- KekikStream/Plugins/SetFilmIzle.py +47 -19
- KekikStream/Plugins/SezonlukDizi.py +62 -34
- KekikStream/Plugins/Sinefy.py +172 -81
- KekikStream/Plugins/SinemaCX.py +138 -62
- KekikStream/Plugins/Sinezy.py +15 -16
- KekikStream/Plugins/SuperFilmGeldi.py +3 -3
- KekikStream/Plugins/UgurFilm.py +71 -24
- KekikStream/Plugins/Watch32.py +38 -53
- KekikStream/Plugins/YabanciDizi.py +158 -139
- {kekikstream-2.4.8.dist-info → kekikstream-2.5.0.dist-info}/METADATA +1 -1
- {kekikstream-2.4.8.dist-info → kekikstream-2.5.0.dist-info}/RECORD +29 -23
- {kekikstream-2.4.8.dist-info → kekikstream-2.5.0.dist-info}/WHEEL +0 -0
- {kekikstream-2.4.8.dist-info → kekikstream-2.5.0.dist-info}/entry_points.txt +0 -0
- {kekikstream-2.4.8.dist-info → kekikstream-2.5.0.dist-info}/licenses/LICENSE +0 -0
- {kekikstream-2.4.8.dist-info → kekikstream-2.5.0.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
|
2
2
|
|
|
3
3
|
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, SeriesInfo, MovieInfo, Episode, ExtractResult, HTMLHelper
|
|
4
|
-
import
|
|
4
|
+
import asyncio, time, json
|
|
5
5
|
|
|
6
6
|
class YabanciDizi(PluginBase):
|
|
7
7
|
name = "YabanciDizi"
|
|
@@ -19,17 +19,17 @@ class YabanciDizi(PluginBase):
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
istek = await self.httpx.get(
|
|
23
|
+
url = url if page == 1 else f"{url}/{page}",
|
|
24
|
+
headers = {"Referer": f"{self.main_url}/"}
|
|
25
|
+
)
|
|
26
|
+
secici = HTMLHelper(istek.text)
|
|
26
27
|
|
|
27
28
|
results = []
|
|
28
|
-
for item in
|
|
29
|
-
title =
|
|
30
|
-
href =
|
|
31
|
-
poster =
|
|
32
|
-
score = sel.select_text("span.rating", item)
|
|
29
|
+
for item in secici.select("li.mb-lg, li.segment-poster"):
|
|
30
|
+
title = secici.select_text("h2", item)
|
|
31
|
+
href = secici.select_attr("a", "href", item)
|
|
32
|
+
poster = secici.select_attr("img", "src", item)
|
|
33
33
|
|
|
34
34
|
if title and href:
|
|
35
35
|
results.append(MainPageResult(
|
|
@@ -42,29 +42,27 @@ class YabanciDizi(PluginBase):
|
|
|
42
42
|
return results
|
|
43
43
|
|
|
44
44
|
async def search(self, query: str) -> list[SearchResult]:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
resp = await self.httpx.post(search_url, headers=headers)
|
|
45
|
+
istek = await self.httpx.post(
|
|
46
|
+
url = f"{self.main_url}/search?qr={query}",
|
|
47
|
+
headers = {
|
|
48
|
+
"X-Requested-With" : "XMLHttpRequest",
|
|
49
|
+
"Referer" : f"{self.main_url}/"
|
|
50
|
+
}
|
|
51
|
+
)
|
|
53
52
|
|
|
54
53
|
try:
|
|
55
|
-
raw =
|
|
56
|
-
# Kotlin mapping: JsonResponse -> Data -> ResultItem
|
|
54
|
+
raw = istek.json()
|
|
57
55
|
res_array = raw.get("data", {}).get("result", [])
|
|
58
|
-
|
|
56
|
+
|
|
59
57
|
results = []
|
|
60
58
|
for item in res_array:
|
|
61
59
|
title = item.get("s_name")
|
|
62
60
|
image = item.get("s_image")
|
|
63
61
|
slug = item.get("s_link")
|
|
64
62
|
s_type = item.get("s_type") # 0: dizi, 1: film
|
|
65
|
-
|
|
63
|
+
|
|
66
64
|
poster = f"{self.main_url}/uploads/series/{image}" if image else None
|
|
67
|
-
|
|
65
|
+
|
|
68
66
|
if s_type == "1":
|
|
69
67
|
href = f"{self.main_url}/film/{slug}"
|
|
70
68
|
else:
|
|
@@ -81,18 +79,18 @@ class YabanciDizi(PluginBase):
|
|
|
81
79
|
return []
|
|
82
80
|
|
|
83
81
|
async def load_item(self, url: str) -> SeriesInfo | MovieInfo:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
title = (
|
|
88
|
-
poster =
|
|
89
|
-
description =
|
|
90
|
-
year =
|
|
91
|
-
tags =
|
|
92
|
-
rating =
|
|
93
|
-
duration = int(
|
|
94
|
-
actors =
|
|
95
|
-
|
|
82
|
+
istek = await self.httpx.get(url, follow_redirects=True)
|
|
83
|
+
secici = HTMLHelper(istek.text)
|
|
84
|
+
|
|
85
|
+
title = (secici.select_attr("meta[property='og:title']", "content") or "").split("|")[0].strip() or secici.select_text("h1")
|
|
86
|
+
poster = secici.select_poster("meta[property='og:image']")
|
|
87
|
+
description = secici.select_text("p#tv-series-desc")
|
|
88
|
+
year = secici.extract_year("td div.truncate")
|
|
89
|
+
tags = secici.meta_list("Türü", container_selector="div.item")
|
|
90
|
+
rating = secici.meta_value("IMDb Puanı", container_selector="div.item")
|
|
91
|
+
duration = int(secici.regex_first(r"(\d+)", secici.meta_value("Süre", container_selector="div.item")) or 0)
|
|
92
|
+
actors = secici.meta_list("Oyuncular", container_selector="div.item") or secici.select_texts("div#common-cast-list div.item h5")
|
|
93
|
+
|
|
96
94
|
common_info = {
|
|
97
95
|
"url" : url,
|
|
98
96
|
"poster" : self.fix_url(poster),
|
|
@@ -107,15 +105,20 @@ class YabanciDizi(PluginBase):
|
|
|
107
105
|
|
|
108
106
|
if "/film/" in url:
|
|
109
107
|
return MovieInfo(**common_info)
|
|
110
|
-
|
|
108
|
+
|
|
111
109
|
episodes = []
|
|
112
|
-
for bolum in
|
|
113
|
-
link =
|
|
110
|
+
for bolum in secici.select("div.episodes-list div.ui td:has(h6)"):
|
|
111
|
+
link = secici.select_first("a", bolum)
|
|
114
112
|
if link:
|
|
115
113
|
href = link.attrs.get("href")
|
|
116
|
-
name =
|
|
117
|
-
s, e =
|
|
118
|
-
episodes.append(Episode(
|
|
114
|
+
name = secici.select_text("h6", bolum) or link.text(strip=True)
|
|
115
|
+
s, e = secici.extract_season_episode(href)
|
|
116
|
+
episodes.append(Episode(
|
|
117
|
+
season = s or 1,
|
|
118
|
+
episode = e or 1,
|
|
119
|
+
title = name,
|
|
120
|
+
url = self.fix_url(href)
|
|
121
|
+
))
|
|
119
122
|
|
|
120
123
|
if episodes and (episodes[0].episode or 0) > (episodes[-1].episode or 0):
|
|
121
124
|
episodes.reverse()
|
|
@@ -123,109 +126,125 @@ class YabanciDizi(PluginBase):
|
|
|
123
126
|
return SeriesInfo(**common_info, episodes=episodes)
|
|
124
127
|
|
|
125
128
|
async def load_links(self, url: str) -> list[ExtractResult]:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
129
|
+
loop = asyncio.get_event_loop()
|
|
130
|
+
|
|
131
|
+
# 1. Ana sayfayı çek
|
|
132
|
+
istek = await loop.run_in_executor(None, lambda: self.cloudscraper.get(url, headers={"Referer": f"{self.main_url}/"}))
|
|
133
|
+
secici = HTMLHelper(istek.text)
|
|
134
|
+
|
|
130
135
|
results = []
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
timestamp_ms = int(time.time() * 1000) - 50000
|
|
137
|
+
|
|
138
|
+
# 2. Dil Tablarını Bul
|
|
139
|
+
tabs = secici.select("div#series-tabs a")
|
|
140
|
+
|
|
141
|
+
async def process_tab(tab_el):
|
|
142
|
+
data_eid = tab_el.attrs.get("data-eid")
|
|
143
|
+
data_type = tab_el.attrs.get("data-type") # 1: Altyazı, 2: Dublaj
|
|
144
|
+
if not data_eid or not data_type:
|
|
145
|
+
return []
|
|
146
|
+
|
|
147
|
+
dil_adi = "Dublaj" if data_type == "2" else "Altyazı"
|
|
148
|
+
|
|
140
149
|
try:
|
|
141
|
-
post_resp = self.cloudscraper.post(
|
|
142
|
-
f"{self.main_url}/ajax/service",
|
|
143
|
-
data = {
|
|
144
|
-
"link" : data_link,
|
|
145
|
-
"hash" : data_hash,
|
|
146
|
-
"querytype" : q_type,
|
|
147
|
-
"type" : "videoGet"
|
|
148
|
-
},
|
|
150
|
+
post_resp = await loop.run_in_executor(None, lambda: self.cloudscraper.post(
|
|
151
|
+
url = f"{self.main_url}/ajax/service",
|
|
149
152
|
headers = {
|
|
150
153
|
"X-Requested-With" : "XMLHttpRequest",
|
|
151
|
-
"Referer" :
|
|
152
|
-
},
|
|
153
|
-
cookies = {"udys": "1760709729873", "level": "1"}
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
service_data = post_resp.json()
|
|
157
|
-
api_iframe = service_data.get("api_iframe")
|
|
158
|
-
if api_iframe:
|
|
159
|
-
extract_res = await self._fetch_and_extract(api_iframe, prefix="Alt")
|
|
160
|
-
if extract_res:
|
|
161
|
-
results.extend(extract_res if isinstance(extract_res, list) else [extract_res])
|
|
162
|
-
except Exception:
|
|
163
|
-
continue
|
|
164
|
-
|
|
165
|
-
# Method 2: pointing[data-eid]
|
|
166
|
-
for id_el in sel.select("a.ui.pointing[data-eid]"):
|
|
167
|
-
dil = id_el.text(strip=True)
|
|
168
|
-
v_lang = "tr" if "Dublaj" in dil else "en"
|
|
169
|
-
data_eid = id_el.attrs.get("data-eid")
|
|
170
|
-
|
|
171
|
-
try:
|
|
172
|
-
post_resp = self.cloudscraper.post(
|
|
173
|
-
f"{self.main_url}/ajax/service",
|
|
174
|
-
data = {
|
|
175
|
-
"e_id" : data_eid,
|
|
176
|
-
"v_lang" : v_lang,
|
|
177
|
-
"type" : "get_whatwehave"
|
|
154
|
+
"Referer" : url
|
|
178
155
|
},
|
|
179
|
-
|
|
180
|
-
"
|
|
181
|
-
"
|
|
156
|
+
data = {
|
|
157
|
+
"lang" : data_type,
|
|
158
|
+
"episode" : data_eid,
|
|
159
|
+
"type" : "langTab"
|
|
182
160
|
},
|
|
183
|
-
cookies = {"udys":
|
|
184
|
-
)
|
|
185
|
-
|
|
186
|
-
service_data = post_resp.json()
|
|
187
|
-
api_iframe = service_data.get("api_iframe")
|
|
188
|
-
if api_iframe:
|
|
189
|
-
extract_res = await self._fetch_and_extract(api_iframe, prefix=dil)
|
|
190
|
-
if extract_res:
|
|
191
|
-
results.extend(extract_res if isinstance(extract_res, list) else [extract_res])
|
|
192
|
-
except Exception:
|
|
193
|
-
continue
|
|
161
|
+
cookies = {"udys": str(timestamp_ms)}
|
|
162
|
+
))
|
|
194
163
|
|
|
195
|
-
|
|
164
|
+
res_json = post_resp.json()
|
|
165
|
+
if not res_json.get("data"): return []
|
|
166
|
+
|
|
167
|
+
res_sel = HTMLHelper(res_json["data"])
|
|
168
|
+
sources = []
|
|
169
|
+
|
|
170
|
+
for item in res_sel.select("div.item"):
|
|
171
|
+
name = item.text(strip=True)
|
|
172
|
+
data_link = item.attrs.get("data-link")
|
|
173
|
+
if not data_link: continue
|
|
174
|
+
|
|
175
|
+
# Link normalizasyonu
|
|
176
|
+
safe_link = data_link.replace("/", "_").replace("+", "-")
|
|
177
|
+
|
|
178
|
+
# API Endpoint belirleme
|
|
179
|
+
api_path = None
|
|
180
|
+
if "VidMoly" in name:
|
|
181
|
+
api_path = "moly"
|
|
182
|
+
elif "Okru" in name:
|
|
183
|
+
api_path = "ruplay"
|
|
184
|
+
elif "Mac" in name:
|
|
185
|
+
api_path = "drive"
|
|
186
|
+
|
|
187
|
+
if api_path:
|
|
188
|
+
sources.append({
|
|
189
|
+
"name" : name,
|
|
190
|
+
"api_url" : f"{self.main_url}/api/{api_path}/{safe_link}",
|
|
191
|
+
"dil" : dil_adi
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
tab_results = []
|
|
195
|
+
for src in sources:
|
|
196
|
+
try:
|
|
197
|
+
# API sayfasını çekip içindeki iframe'i bulalım
|
|
198
|
+
api_resp = await loop.run_in_executor(None, lambda: self.cloudscraper.get(
|
|
199
|
+
src["api_url"],
|
|
200
|
+
headers={"Referer": f"{self.main_url}/"},
|
|
201
|
+
cookies={"udys": str(timestamp_ms)}
|
|
202
|
+
))
|
|
203
|
+
|
|
204
|
+
api_sel = HTMLHelper(api_resp.text)
|
|
205
|
+
iframe = api_sel.select_attr("iframe", "src")
|
|
206
|
+
|
|
207
|
+
if not iframe and "drive" in src["api_url"]:
|
|
208
|
+
t_sec = int(time.time())
|
|
209
|
+
drives_url = f"{src['api_url'].replace('/api/drive/', '/api/drives/')}?t={t_sec}"
|
|
210
|
+
api_resp = await loop.run_in_executor(None, lambda: self.cloudscraper.get(
|
|
211
|
+
drives_url,
|
|
212
|
+
headers={"Referer": src["api_url"]},
|
|
213
|
+
cookies={"udys": str(timestamp_ms)}
|
|
214
|
+
))
|
|
215
|
+
api_sel = HTMLHelper(api_resp.text)
|
|
216
|
+
iframe = api_sel.select_attr("iframe", "src")
|
|
217
|
+
|
|
218
|
+
if iframe:
|
|
219
|
+
prefix = f"{src['dil']} | {src['name']}"
|
|
220
|
+
extracted = await self.extract(self.fix_url(iframe), prefix=prefix)
|
|
221
|
+
if extracted:
|
|
222
|
+
tab_results.extend(extracted if isinstance(extracted, list) else [extracted])
|
|
223
|
+
except Exception:
|
|
224
|
+
continue
|
|
225
|
+
return tab_results
|
|
196
226
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
return final_iframe
|
|
223
|
-
|
|
224
|
-
async def _fetch_and_extract(self, iframe_url, prefix=""):
|
|
225
|
-
final_iframe = self._fetch_and_extract_sync(iframe_url, prefix)
|
|
226
|
-
|
|
227
|
-
if final_iframe:
|
|
228
|
-
final_url = self.fix_url(final_iframe)
|
|
229
|
-
return await self.extract(final_url, referer=f"{self.main_url}/", prefix=prefix)
|
|
230
|
-
|
|
231
|
-
return None
|
|
227
|
+
except Exception:
|
|
228
|
+
return []
|
|
229
|
+
|
|
230
|
+
if tabs:
|
|
231
|
+
results_groups = await asyncio.gather(*(process_tab(tab) for tab in tabs))
|
|
232
|
+
for group in results_groups:
|
|
233
|
+
results.extend(group)
|
|
234
|
+
else:
|
|
235
|
+
# Tab yoksa mevcut sayfada iframe ara
|
|
236
|
+
iframe = secici.select_attr("iframe", "src")
|
|
237
|
+
if iframe:
|
|
238
|
+
extracted = await self.extract(self.fix_url(iframe), name_override="Main")
|
|
239
|
+
if extracted:
|
|
240
|
+
results.extend(extracted if isinstance(extracted, list) else [extracted])
|
|
241
|
+
|
|
242
|
+
# Duplicate kontrolü
|
|
243
|
+
unique_results = []
|
|
244
|
+
seen = set()
|
|
245
|
+
for res in results:
|
|
246
|
+
if res.url and res.url not in seen:
|
|
247
|
+
unique_results.append(res)
|
|
248
|
+
seen.add(res.url)
|
|
249
|
+
|
|
250
|
+
return unique_results
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: KekikStream
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.5.0
|
|
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
|
|
@@ -12,22 +12,24 @@ KekikStream/Core/Extractor/ExtractorModels.py,sha256=Qj_gbIeGRewaZXNfYkTi4FFRRq6
|
|
|
12
12
|
KekikStream/Core/Extractor/YTDLPCache.py,sha256=sRg5kwFxkRXA_8iRwsV29E51g9qQJvg8dWUnzfr7EwA,984
|
|
13
13
|
KekikStream/Core/Media/MediaHandler.py,sha256=MEn3spPAThVloN3WcoCwWhpoyMA7tAZvcwYjmjJsX3U,7678
|
|
14
14
|
KekikStream/Core/Media/MediaManager.py,sha256=AaUq2D7JSJIphjoAj2fjLOJjswm7Qf5hjYCbBdrbnDU,438
|
|
15
|
-
KekikStream/Core/Plugin/PluginBase.py,sha256=
|
|
15
|
+
KekikStream/Core/Plugin/PluginBase.py,sha256=t6zaDlwDfnevIu-NLUgmQkBnw0mcRisb3jnUWlcv5tU,7335
|
|
16
16
|
KekikStream/Core/Plugin/PluginLoader.py,sha256=6LE5id0571bB-gJZxaLfd973XcG6oaGeMhLVcYYY7kw,3768
|
|
17
17
|
KekikStream/Core/Plugin/PluginManager.py,sha256=6a0Q2mHtzIpx1ttdSTsVHg2HfLJIO0r_iHjK3Kui1Rw,939
|
|
18
18
|
KekikStream/Core/Plugin/PluginModels.py,sha256=7g1uHjJstfnrdTabDgyrBnu1ojIQ025hsmw85cDXFS8,2353
|
|
19
19
|
KekikStream/Core/UI/UIManager.py,sha256=T4V_kdTTWa-UDamgLSKa__dWJuzcvRK9NuwBlzU9Bzc,1693
|
|
20
|
+
KekikStream/Extractors/Abstream.py,sha256=Xz2Ok84BJU5YRhQZjIM0rJA8GFju2BQimV8mHLXq3vc,905
|
|
20
21
|
KekikStream/Extractors/CloseLoad.py,sha256=eoXr9Dxgfy3BUdQpXrvS69bqCFBmag95cmJLGhsHslE,1922
|
|
21
22
|
KekikStream/Extractors/ContentX.py,sha256=832xDeKoudQYJBRxJntOuJ0G8xYFVq2vHhycdnzcMeg,2539
|
|
22
23
|
KekikStream/Extractors/DonilasPlay.py,sha256=yIh6ZOVjXzHKc_Zi8j0Cpr4vWibwkSeoZxeFfU8IfmQ,1844
|
|
23
24
|
KekikStream/Extractors/DzenRu.py,sha256=tUrQexHkclw9EdoFD_ACejW-QwlOnTDFTxA0v-1jIVU,932
|
|
24
25
|
KekikStream/Extractors/ExPlay.py,sha256=hrG31pRFD5s_0wNls0fF8AdMn6ve5OD-mOAV32_1H2I,1324
|
|
25
|
-
KekikStream/Extractors/Filemoon.py,sha256=
|
|
26
|
+
KekikStream/Extractors/Filemoon.py,sha256=bdPKk58_HXgRL_ysNcpuESXrijTxKMETyBnXdmR0b_0,2289
|
|
26
27
|
KekikStream/Extractors/HDMomPlayer.py,sha256=ui8aH9sc3NDlN2uKlhJiySUHA__mpSSvAPHRzde6F2k,1177
|
|
27
28
|
KekikStream/Extractors/HDPlayerSystem.py,sha256=hoPN7fqVRBK97BnQ7vF_5TlEO28BD3DrsngDW48rw5E,936
|
|
28
29
|
KekikStream/Extractors/HotStream.py,sha256=37H9pK4HSEqGR6QKgxz887JCBXfXB1NXDpBGuhvPmXo,1078
|
|
29
30
|
KekikStream/Extractors/JFVid.py,sha256=rdy0bmqZIruejn1G1YNxVM3wlqxkdFRd4zunxxZlev4,746
|
|
30
31
|
KekikStream/Extractors/JetTv.py,sha256=Cdx1XZEtQZkrmOdZdgM9E1iBkCNzVTExjrI_F-3Nv-I,1176
|
|
32
|
+
KekikStream/Extractors/JetV.py,sha256=knyDiOCSBMC1eQHo5LRFx5apn3NQflKY3xyloLDGkaI,2069
|
|
31
33
|
KekikStream/Extractors/MailRu.py,sha256=n87wBc9jQ4nP8OJbqS7LsHHCKuRxlsgdtL_xHVn0rdY,779
|
|
32
34
|
KekikStream/Extractors/MixPlayHD.py,sha256=otA2SKDnJisY4Zt9DCuNdjNVHtSquHoMVvP3_5Q0poY,1205
|
|
33
35
|
KekikStream/Extractors/MixTiger.py,sha256=kF_AKkJoyAS6peQ94eu3pLzS-VeZ_8IYjpaDrTo3x_I,1135
|
|
@@ -46,15 +48,19 @@ KekikStream/Extractors/TauVideo.py,sha256=2ai9BwwM6qlCgxK7E0B642LtOF5y4hEb9tQ2aD
|
|
|
46
48
|
KekikStream/Extractors/TurboImgz.py,sha256=-RyC4EWtJdK85Ei01lntqivnSmk4tXOlmSXv70cQJ70,679
|
|
47
49
|
KekikStream/Extractors/TurkeyPlayer.py,sha256=zdX0IOO3M-kgAYWex2WwJJu9aGf8WhOY-ZIrRmZRiC0,1246
|
|
48
50
|
KekikStream/Extractors/VCTPlay.py,sha256=MdCH9GhhKod4oPT3ePH8rhicUWuNT-GsE42S72o1NJ4,876
|
|
49
|
-
KekikStream/Extractors/
|
|
51
|
+
KekikStream/Extractors/Veev.py,sha256=DowOuKhCAmVs0sMeQRxxhWRUf4MR6fhx1yeNUmy_Le4,5271
|
|
52
|
+
KekikStream/Extractors/VidBiz.py,sha256=V9nTt8Uaqn5F9x9WMZbW3wqaeajGLdBhLryXoeStChk,2212
|
|
53
|
+
KekikStream/Extractors/VidHide.py,sha256=YswpcBz6Eqq_qGZhHpRcxcvTK0S3hZSNPfNjQRrn_W4,4109
|
|
50
54
|
KekikStream/Extractors/VidMoly.py,sha256=LUUomzPvf4J7PG3rf7drV4WM-sBHOupsllj017eluew,4106
|
|
51
55
|
KekikStream/Extractors/VidMoxy.py,sha256=qTkTFRqTgQVi-E94zY5lQC2-AYFhkl8LqaOJpgGdErc,1452
|
|
52
56
|
KekikStream/Extractors/VidPapi.py,sha256=yqjA5gadCE2lZ9ksT6zZOz-1zCcCYJxZsg0Ccgz2X10,1988
|
|
53
57
|
KekikStream/Extractors/VideoSeyred.py,sha256=sNxw5OHQ8AzRJIRGXGjql8nK1E6Cbg9qhKP5PuOyeM8,1216
|
|
54
58
|
KekikStream/Extractors/Videostr.py,sha256=CGL9GDzN0QzDir6ss8oUvDYYbGt2k8323P2_z5tVZVI,2563
|
|
55
59
|
KekikStream/Extractors/Vidoza.py,sha256=VSqCI-SYnLh6COnLHpg0feRX37t2WhPxbo08us5wCcc,655
|
|
60
|
+
KekikStream/Extractors/Vtbe.py,sha256=d_ZnLHnYiQltwMOWsop-EbLb0cqMiRyp5foiOm5k2es,1392
|
|
56
61
|
KekikStream/Extractors/YTDLP.py,sha256=vE08jS9kLrLxiZA8TpofPQg2-ec_6d5DkM9esoh_GI8,7419
|
|
57
62
|
KekikStream/Extractors/YildizKisaFilm.py,sha256=jeCCSIwZvQUr-CSylleUIP--JtN18_wUGl0vQXMCsV4,936
|
|
63
|
+
KekikStream/Extractors/Zeus.py,sha256=OifOjIVZWeXSoGu4F2wpxv0c-ABm-2UYD9g5L4dwkjs,2003
|
|
58
64
|
KekikStream/Plugins/BelgeselX.py,sha256=tJw1GZQoqxE7HISCVYUEL2ZP-8Mftdl4WytYA0ftSUc,9648
|
|
59
65
|
KekikStream/Plugins/DiziBox.py,sha256=SuRQxNZetwJJTlobuxB0h7NMeHUMrYMv_94JuCXydds,10204
|
|
60
66
|
KekikStream/Plugins/DiziMom.py,sha256=mRu9YUHs7XeLzXOqKIWcsI82yeltTW-6Q423wt71D5U,8044
|
|
@@ -69,25 +75,25 @@ KekikStream/Plugins/Filmatek.py,sha256=AdOeBVP1rfq5R1YJlQj2saT77rnzVHX54tEOAH-t9
|
|
|
69
75
|
KekikStream/Plugins/FilmciBaba.py,sha256=miwQ7ODHGcAOBacUZf0lqolBElpvOk8oeckWVJYJau0,6936
|
|
70
76
|
KekikStream/Plugins/FullHDFilmizlesene.py,sha256=dJ1xo1D3ujPCQE6PewpqdvSMKlBbifA67uU7BAMmvVM,6274
|
|
71
77
|
KekikStream/Plugins/HDFilm.py,sha256=m6tjV1O1l5U_jqkGKizi62GOdSMd5osyOS2_9jehS-w,10754
|
|
72
|
-
KekikStream/Plugins/HDFilmCehennemi.py,sha256=
|
|
73
|
-
KekikStream/Plugins/JetFilmizle.py,sha256=
|
|
74
|
-
KekikStream/Plugins/KultFilmler.py,sha256=
|
|
75
|
-
KekikStream/Plugins/RecTV.py,sha256=
|
|
76
|
-
KekikStream/Plugins/RoketDizi.py,sha256=
|
|
78
|
+
KekikStream/Plugins/HDFilmCehennemi.py,sha256=h3FTKN-psrzvN0Juw8Am83MV8QL9aX-RSWhYqXRQU-E,17368
|
|
79
|
+
KekikStream/Plugins/JetFilmizle.py,sha256=YyZmOWoh_SFGRARrKioq8fhv8VgzTiURFypJMoW8nzU,10279
|
|
80
|
+
KekikStream/Plugins/KultFilmler.py,sha256=D5aAFrv0ACtSBinwHTfNvP1Jp0W8W7-mwUsju_YPilk,10841
|
|
81
|
+
KekikStream/Plugins/RecTV.py,sha256=6rYxZV6J84rr2CZKTmP_0raYVp4pa5EMXQD6mMbZHbE,7315
|
|
82
|
+
KekikStream/Plugins/RoketDizi.py,sha256=TnupXb3cRJMDJAA7hclOPwECgOt5mOJx1hYEL_oK6rk,8488
|
|
77
83
|
KekikStream/Plugins/SelcukFlix.py,sha256=8jr-HxAIXVILMUykPJRC7yD9AT1q0JU-vBwoYGxkFiM,14484
|
|
78
|
-
KekikStream/Plugins/SetFilmIzle.py,sha256=
|
|
79
|
-
KekikStream/Plugins/SezonlukDizi.py,sha256=
|
|
84
|
+
KekikStream/Plugins/SetFilmIzle.py,sha256=qplMZlKzSm8ln14pP_EuDNkctk9HJSDEbi_gNWP5PMc,10127
|
|
85
|
+
KekikStream/Plugins/SezonlukDizi.py,sha256=JcXx9O8qHCf9ZAlCA1qV3ef9n9hXfV2q12b8XjRkS64,9390
|
|
80
86
|
KekikStream/Plugins/SineWix.py,sha256=z0r90lggAugEWE1g9vg8gZsInBObUZPnVFQwq7GYmJs,7052
|
|
81
|
-
KekikStream/Plugins/Sinefy.py,sha256=
|
|
82
|
-
KekikStream/Plugins/SinemaCX.py,sha256=
|
|
83
|
-
KekikStream/Plugins/Sinezy.py,sha256=
|
|
84
|
-
KekikStream/Plugins/SuperFilmGeldi.py,sha256=
|
|
85
|
-
KekikStream/Plugins/UgurFilm.py,sha256=
|
|
86
|
-
KekikStream/Plugins/Watch32.py,sha256=
|
|
87
|
-
KekikStream/Plugins/YabanciDizi.py,sha256=
|
|
88
|
-
kekikstream-2.
|
|
89
|
-
kekikstream-2.
|
|
90
|
-
kekikstream-2.
|
|
91
|
-
kekikstream-2.
|
|
92
|
-
kekikstream-2.
|
|
93
|
-
kekikstream-2.
|
|
87
|
+
KekikStream/Plugins/Sinefy.py,sha256=tRfXKeDkIiKrrl9mWQ8WGQV1r0MNFblE9Q9NNBm5wKQ,12514
|
|
88
|
+
KekikStream/Plugins/SinemaCX.py,sha256=DRHD3bZXeIwm6TGsGQZyky0m61L77vy7LLIGch56eoA,10844
|
|
89
|
+
KekikStream/Plugins/Sinezy.py,sha256=2vTRsCUFXSJgKZJbXxDoGRJ8_i4ZZptuPTjeQ4EiZWk,5733
|
|
90
|
+
KekikStream/Plugins/SuperFilmGeldi.py,sha256=hXhYYuQkVbYJ07P8y5QjY5iR3rVgUfAWc_MkOWtsXdM,6306
|
|
91
|
+
KekikStream/Plugins/UgurFilm.py,sha256=2U3-rC9JzwDoF1c8t3VyE3jMcz-SB51uxFX-8DqrQ7M,6778
|
|
92
|
+
KekikStream/Plugins/Watch32.py,sha256=wAw-glE9bQNsyfzhv1zlFIjYAhSvK58mUri-XGytuHs,7318
|
|
93
|
+
KekikStream/Plugins/YabanciDizi.py,sha256=aqdPLQ3Oajs32JNkgIPeqHuYgcM8K2jGHT0Ikw8Q6jY,10582
|
|
94
|
+
kekikstream-2.5.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
95
|
+
kekikstream-2.5.0.dist-info/METADATA,sha256=b2aOr4KjuY8SlMbdZoIHGFzdSHiAKc72llc6a_R2Oi8,10745
|
|
96
|
+
kekikstream-2.5.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
97
|
+
kekikstream-2.5.0.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
|
|
98
|
+
kekikstream-2.5.0.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
|
|
99
|
+
kekikstream-2.5.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|