KekikStream 2.4.9__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/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.9.dist-info → kekikstream-2.5.0.dist-info}/METADATA +1 -1
- {kekikstream-2.4.9.dist-info → kekikstream-2.5.0.dist-info}/RECORD +21 -20
- {kekikstream-2.4.9.dist-info → kekikstream-2.5.0.dist-info}/WHEEL +0 -0
- {kekikstream-2.4.9.dist-info → kekikstream-2.5.0.dist-info}/entry_points.txt +0 -0
- {kekikstream-2.4.9.dist-info → kekikstream-2.5.0.dist-info}/licenses/LICENSE +0 -0
- {kekikstream-2.4.9.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,17 +12,18 @@ 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
|
|
@@ -76,23 +77,23 @@ KekikStream/Plugins/FullHDFilmizlesene.py,sha256=dJ1xo1D3ujPCQE6PewpqdvSMKlBbifA
|
|
|
76
77
|
KekikStream/Plugins/HDFilm.py,sha256=m6tjV1O1l5U_jqkGKizi62GOdSMd5osyOS2_9jehS-w,10754
|
|
77
78
|
KekikStream/Plugins/HDFilmCehennemi.py,sha256=h3FTKN-psrzvN0Juw8Am83MV8QL9aX-RSWhYqXRQU-E,17368
|
|
78
79
|
KekikStream/Plugins/JetFilmizle.py,sha256=YyZmOWoh_SFGRARrKioq8fhv8VgzTiURFypJMoW8nzU,10279
|
|
79
|
-
KekikStream/Plugins/KultFilmler.py,sha256=
|
|
80
|
-
KekikStream/Plugins/RecTV.py,sha256=
|
|
81
|
-
KekikStream/Plugins/RoketDizi.py,sha256=
|
|
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
|
|
82
83
|
KekikStream/Plugins/SelcukFlix.py,sha256=8jr-HxAIXVILMUykPJRC7yD9AT1q0JU-vBwoYGxkFiM,14484
|
|
83
|
-
KekikStream/Plugins/SetFilmIzle.py,sha256=
|
|
84
|
-
KekikStream/Plugins/SezonlukDizi.py,sha256=
|
|
84
|
+
KekikStream/Plugins/SetFilmIzle.py,sha256=qplMZlKzSm8ln14pP_EuDNkctk9HJSDEbi_gNWP5PMc,10127
|
|
85
|
+
KekikStream/Plugins/SezonlukDizi.py,sha256=JcXx9O8qHCf9ZAlCA1qV3ef9n9hXfV2q12b8XjRkS64,9390
|
|
85
86
|
KekikStream/Plugins/SineWix.py,sha256=z0r90lggAugEWE1g9vg8gZsInBObUZPnVFQwq7GYmJs,7052
|
|
86
|
-
KekikStream/Plugins/Sinefy.py,sha256=
|
|
87
|
-
KekikStream/Plugins/SinemaCX.py,sha256=
|
|
88
|
-
KekikStream/Plugins/Sinezy.py,sha256=
|
|
89
|
-
KekikStream/Plugins/SuperFilmGeldi.py,sha256=
|
|
90
|
-
KekikStream/Plugins/UgurFilm.py,sha256=
|
|
91
|
-
KekikStream/Plugins/Watch32.py,sha256=
|
|
92
|
-
KekikStream/Plugins/YabanciDizi.py,sha256=
|
|
93
|
-
kekikstream-2.
|
|
94
|
-
kekikstream-2.
|
|
95
|
-
kekikstream-2.
|
|
96
|
-
kekikstream-2.
|
|
97
|
-
kekikstream-2.
|
|
98
|
-
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
|