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.

@@ -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 json, asyncio, time
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
- full_url = url if page == 1 else f"{url}/{page}"
23
-
24
- resp = await self.httpx.get(full_url, headers={"Referer": f"{self.main_url}/"})
25
- sel = HTMLHelper(resp.text)
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 sel.select("li.mb-lg, li.segment-poster"):
29
- title = sel.select_text("h2", item)
30
- href = sel.select_attr("a", "href", item)
31
- poster = sel.select_attr("img", "src", item)
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
- search_url = f"{self.main_url}/search?qr={query}"
46
-
47
- headers = {
48
- "X-Requested-With" : "XMLHttpRequest",
49
- "Referer" : f"{self.main_url}/"
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 = resp.json()
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
- resp = await self.httpx.get(url, follow_redirects=True)
85
- sel = HTMLHelper(resp.text)
86
-
87
- title = (sel.select_attr("meta[property='og:title']", "content") or "").split("|")[0].strip() or sel.select_text("h1")
88
- poster = sel.select_poster("meta[property='og:image']")
89
- description = sel.select_text("p#tv-series-desc")
90
- year = sel.extract_year("td div.truncate")
91
- tags = sel.meta_list("Türü", container_selector="div.item")
92
- rating = sel.meta_value("IMDb Puanı", container_selector="div.item")
93
- duration = int(sel.regex_first(r"(\d+)", sel.meta_value("Süre", container_selector="div.item")) or 0)
94
- actors = sel.meta_list("Oyuncular", container_selector="div.item") or sel.select_texts("div#common-cast-list div.item h5")
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 sel.select("div.episodes-list div.ui td:has(h6)"):
113
- link = sel.select_first("a", bolum)
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 = sel.select_text("h6", bolum) or link.text(strip=True)
117
- s, e = sel.extract_season_episode(href)
118
- episodes.append(Episode(season=s or 1, episode=e or 1, title=name, url=self.fix_url(href)))
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
- # Use cloudscraper to bypass Cloudflare
127
- resp = self.cloudscraper.get(url, headers={"Referer": f"{self.main_url}/"})
128
- sel = HTMLHelper(resp.text)
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
- # Method 1: alternatives-for-this (include active too)
133
- for alt in sel.select("div.alternatives-for-this div.item"):
134
- data_hash = alt.attrs.get("data-hash")
135
- data_link = alt.attrs.get("data-link")
136
- q_type = alt.attrs.get("data-querytype")
137
-
138
- if not data_hash or not data_link: continue
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" : f"{self.main_url}/"
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
- headers = {
180
- "X-Requested-With" : "XMLHttpRequest",
181
- "Referer" : f"{self.main_url}/"
156
+ data = {
157
+ "lang" : data_type,
158
+ "episode" : data_eid,
159
+ "type" : "langTab"
182
160
  },
183
- cookies = {"udys": "1760709729873", "level": "1"}
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
- return results
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
- def _fetch_and_extract_sync(self, iframe_url, prefix=""):
198
- """Synchronous helper for _fetch_and_extract using cloudscraper."""
199
- # Initial fetch
200
- resp = self.cloudscraper.get(
201
- iframe_url,
202
- headers = {"Referer": f"{self.main_url}/"},
203
- cookies = {"udys": "1760709729873", "level": "1"}
204
- )
205
-
206
- # Handle "Lütfen bekleyiniz" check from Kotlin
207
- if "Lütfen bekleyiniz" in resp.text:
208
- import time as time_module
209
- time_module.sleep(1)
210
- timestamp = int(time_module.time())
211
- # Retry with t=timestamp as in Kotlin
212
- sep = "&" if "?" in iframe_url else "?"
213
- resp = self.cloudscraper.get(
214
- f"{iframe_url}{sep}t={timestamp}",
215
- headers = {"Referer": f"{self.main_url}/"},
216
- cookies = resp.cookies # Use cookies from first response
217
- )
218
-
219
- sel = HTMLHelper(resp.text)
220
- final_iframe = sel.select_attr("iframe", "src")
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.4.8
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=7CjtXAdIJfOmBDgbpK0rLEng65kerOAfAxuVmZEs4Yo,7069
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=y3VQpTVR2o4PGbRfLEXOlxQ0NM-JblaMUpoFhpka5iI,2263
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/VidHide.py,sha256=xJSferkaCLOQ-kLgsA_eDZCmGagiL2711boOdogOlWw,1918
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=8uaQPRprs64kdyGeC1pCkocCWPNHmddjcp_tfmHMCBE,15176
73
- KekikStream/Plugins/JetFilmizle.py,sha256=D3feoxmTNhOMH6d0LwGdYnGVfvUkMmjrNdj3Yo5teOQ,8181
74
- KekikStream/Plugins/KultFilmler.py,sha256=iHk3X8CwNxHRgGFZRK6BDqvZLs0p9GK5oi8IAm6w3Lw,8441
75
- KekikStream/Plugins/RecTV.py,sha256=MRoP8KQF2V9kVlRNTQkRz9YFkBmMy3_skiNE47-RAlk,7151
76
- KekikStream/Plugins/RoketDizi.py,sha256=2OIDct56NgmQJyv0gIi9ZprpxSL3u41ZdEst5q1mhq4,9222
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=5sEE1PagUFEqNo5McLrii7bgb9lcxRp6Wu8UXeOhe-Y,9073
79
- KekikStream/Plugins/SezonlukDizi.py,sha256=Q2I_LKEeSIFl1mdWvC3q3cyqpL7W4vAF-N7MxzgDYcw,8428
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=EtdRXbCzLBmi1C64ZJMQu9nxfzNdW-nvHdO9MjwqoRM,8504
82
- KekikStream/Plugins/SinemaCX.py,sha256=VPaBPIBxk9m4QdOMUV8S_vlJSTQUdvXa5Rtz63vjarA,7536
83
- KekikStream/Plugins/Sinezy.py,sha256=I3DO0NytJz-7F2_0JZpmNLflvo3vunb4SLZBy2DadMg,5712
84
- KekikStream/Plugins/SuperFilmGeldi.py,sha256=jJKBrLPI4rXI8n55lIdZOTyzNccPAEEIkmTrQtTKPhY,6303
85
- KekikStream/Plugins/UgurFilm.py,sha256=NO6c1hHlylCfoP8fM-aVsxpBIyTAyu4uBHVM8CjybuI,5037
86
- KekikStream/Plugins/Watch32.py,sha256=NeESk1unb5SYs6kwkb3dDymv2yYOkRU2QJCPI9izXKk,7915
87
- KekikStream/Plugins/YabanciDizi.py,sha256=m4I8OM7Br_RRUSY0RAMpqcZ-_BwyjKXWHQuF_jS4EnE,9876
88
- kekikstream-2.4.8.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
89
- kekikstream-2.4.8.dist-info/METADATA,sha256=O9lxMnAoFFOSn8TH6Hp4AEwiJ35fMOQVjqVvQp8pTvc,10745
90
- kekikstream-2.4.8.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
91
- kekikstream-2.4.8.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
92
- kekikstream-2.4.8.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
93
- kekikstream-2.4.8.dist-info/RECORD,,
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,,