KekikStream 2.1.4__py3-none-any.whl → 2.1.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.
Files changed (36) hide show
  1. KekikStream/Core/Plugin/PluginBase.py +20 -21
  2. KekikStream/Extractors/CloseLoad.py +17 -2
  3. KekikStream/Extractors/Filemoon.py +78 -0
  4. KekikStream/Extractors/RapidVid.py +15 -5
  5. KekikStream/Extractors/VidHide.py +11 -2
  6. KekikStream/Plugins/BelgeselX.py +7 -7
  7. KekikStream/Plugins/DiziBox.py +2 -2
  8. KekikStream/Plugins/DiziPal.py +8 -8
  9. KekikStream/Plugins/DiziYou.py +8 -8
  10. KekikStream/Plugins/Dizilla.py +2 -2
  11. KekikStream/Plugins/FilmBip.py +2 -2
  12. KekikStream/Plugins/FilmMakinesi.py +2 -2
  13. KekikStream/Plugins/FilmModu.py +8 -8
  14. KekikStream/Plugins/FullHDFilm.py +81 -22
  15. KekikStream/Plugins/FullHDFilmizlesene.py +2 -2
  16. KekikStream/Plugins/HDFilmCehennemi.py +79 -39
  17. KekikStream/Plugins/JetFilmizle.py +2 -2
  18. KekikStream/Plugins/KultFilmler.py +10 -9
  19. KekikStream/Plugins/RecTV.py +15 -15
  20. KekikStream/Plugins/RoketDizi.py +2 -2
  21. KekikStream/Plugins/SelcukFlix.py +68 -44
  22. KekikStream/Plugins/SetFilmIzle.py +21 -21
  23. KekikStream/Plugins/SezonlukDizi.py +19 -2
  24. KekikStream/Plugins/SineWix.py +13 -13
  25. KekikStream/Plugins/Sinefy.py +6 -6
  26. KekikStream/Plugins/SinemaCX.py +31 -22
  27. KekikStream/Plugins/Sinezy.py +2 -2
  28. KekikStream/Plugins/SuperFilmGeldi.py +30 -19
  29. KekikStream/Plugins/UgurFilm.py +2 -2
  30. KekikStream/__init__.py +15 -15
  31. {kekikstream-2.1.4.dist-info → kekikstream-2.1.9.dist-info}/METADATA +5 -3
  32. {kekikstream-2.1.4.dist-info → kekikstream-2.1.9.dist-info}/RECORD +36 -35
  33. {kekikstream-2.1.4.dist-info → kekikstream-2.1.9.dist-info}/WHEEL +0 -0
  34. {kekikstream-2.1.4.dist-info → kekikstream-2.1.9.dist-info}/entry_points.txt +0 -0
  35. {kekikstream-2.1.4.dist-info → kekikstream-2.1.9.dist-info}/licenses/LICENSE +0 -0
  36. {kekikstream-2.1.4.dist-info → kekikstream-2.1.9.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, Episode, SeriesInfo
3
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, Episode, SeriesInfo, ExtractResult
4
4
  import json
5
5
 
6
6
  class SineWix(PluginBase):
@@ -123,21 +123,21 @@ class SineWix(PluginBase):
123
123
  episodes = episodes,
124
124
  )
125
125
 
126
- async def load_links(self, url: str) -> list[dict]:
126
+ async def load_links(self, url: str) -> list[ExtractResult]:
127
127
  try:
128
128
  veri = json.loads(url)
129
129
  if veri.get("is_episode"):
130
- return [{
131
- "url" : veri.get("url"),
132
- "name" : veri.get("title"),
133
- "referer" : self.main_url
134
- }]
130
+ return [ExtractResult(
131
+ url = veri.get("url"),
132
+ name = veri.get("title"),
133
+ referer = self.main_url
134
+ )]
135
135
  except Exception:
136
136
  pass
137
137
 
138
138
  # Eğer JSON değilse ve direkt URL ise (eski yapı veya harici link)
139
139
  if not url.startswith(self.main_url) and not url.startswith("{"):
140
- return [{"url": url, "name": "Video"}]
140
+ return [ExtractResult(url=url, name="Video")]
141
141
 
142
142
  istek = await self.httpx.get(url)
143
143
  veri = istek.json()
@@ -149,10 +149,10 @@ class SineWix(PluginBase):
149
149
  results = []
150
150
  for video in veri.get("videos"):
151
151
  video_link = video.get("link").split("_blank\">")[-1]
152
- results.append({
153
- "url" : video_link,
154
- "name" : f"{self.name}",
155
- "referer" : self.main_url
156
- })
152
+ results.append(ExtractResult(
153
+ url = video_link,
154
+ name = f"{self.name}",
155
+ referer = self.main_url
156
+ ))
157
157
 
158
158
  return results
@@ -1,6 +1,6 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from KekikStream.Core import PluginBase, MainPageResult, SearchResult, SeriesInfo, Episode, MovieInfo
3
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, SeriesInfo, Episode, MovieInfo, ExtractResult
4
4
  from parsel import Selector
5
5
  import re, json, urllib.parse
6
6
 
@@ -223,7 +223,7 @@ class Sinefy(PluginBase):
223
223
  year = year
224
224
  )
225
225
 
226
- async def load_links(self, url: str) -> list[dict]:
226
+ async def load_links(self, url: str) -> list[ExtractResult]:
227
227
  resp = await self.httpx.get(url)
228
228
  sel = Selector(resp.text)
229
229
 
@@ -235,7 +235,7 @@ class Sinefy(PluginBase):
235
235
 
236
236
  # Always return iframe (matching Kotlin - no extractor check)
237
237
  # loadExtractor in Kotlin handles extraction internally
238
- return [{
239
- "url" : iframe_url,
240
- "name" : "Sinefy Player"
241
- }]
238
+ return [ExtractResult(
239
+ url = iframe_url,
240
+ name = "Sinefy Player"
241
+ )]
@@ -1,6 +1,6 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, Subtitle
3
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, Subtitle, ExtractResult
4
4
  from parsel import Selector
5
5
  import re
6
6
 
@@ -12,20 +12,29 @@ class SinemaCX(PluginBase):
12
12
  description = "Türkiye'nin en iyi film platformu Sinema.cc! 2026'nın en yeni ve popüler yabancı yapımları, Türkçe dublaj ve altyazılı HD kalitede, reklamsız ve ücretsiz olarak seni bekliyor. Şimdi izle!"
13
13
 
14
14
  main_page = {
15
- f"{main_url}/page/SAYFA" : "Son Eklenen Filmler",
16
- f"{main_url}/izle/aile-filmleri/page/SAYFA" : "Aile Filmleri",
17
- f"{main_url}/izle/aksiyon-filmleri/page/SAYFA" : "Aksiyon Filmleri",
18
- f"{main_url}/izle/animasyon-filmleri/page/SAYFA" : "Animasyon Filmleri",
19
- f"{main_url}/izle/belgesel/page/SAYFA" : "Belgesel Filmleri",
20
- f"{main_url}/izle/bilim-kurgu-filmleri/page/SAYFA" : "Bilim Kurgu Filmler",
21
- f"{main_url}/izle/biyografi/page/SAYFA" : "Biyografi Filmleri",
22
- f"{main_url}/izle/fantastik-filmler/page/SAYFA" : "Fantastik Filmler",
23
- f"{main_url}/izle/gizem-filmleri/page/SAYFA" : "Gizem Filmleri",
24
- f"{main_url}/izle/komedi-filmleri/page/SAYFA" : "Komedi Filmleri",
25
- f"{main_url}/izle/korku-filmleri/page/SAYFA" : "Korku Filmleri",
26
- f"{main_url}/izle/macera-filmleri/page/SAYFA" : "Macera Filmleri",
27
- f"{main_url}/izle/romantik-filmler/page/SAYFA" : "Romantik Filmler",
28
- f"{main_url}/izle/erotik-filmler/page/SAYFA" : "Erotik Film",
15
+ f"{main_url}/page/SAYFA" : "Son Eklenen Filmler",
16
+ f"{main_url}/izle/aile-filmleri/page/SAYFA" : "Aile Filmleri",
17
+ f"{main_url}/izle/aksiyon-filmleri/page/SAYFA" : "Aksiyon Filmleri",
18
+ f"{main_url}/izle/animasyon-filmleri/page/SAYFA" : "Animasyon Filmleri",
19
+ f"{main_url}/izle/belgesel/page/SAYFA" : "Belgesel Filmleri",
20
+ f"{main_url}/izle/bilim-kurgu-filmleri/page/SAYFA" : "Bilim Kurgu Filmler",
21
+ f"{main_url}/izle/biyografi/page/SAYFA" : "Biyografi Filmleri",
22
+ f"{main_url}/izle/dram-filmleri/page/SAYFA" : "Dram Filmleri",
23
+ f"{main_url}/izle/erotik-filmler/page/SAYFA" : "Erotik Film",
24
+ f"{main_url}/izle/fantastik-filmler/page/SAYFA" : "Fantastik Filmler",
25
+ f"{main_url}/izle/gerilim-filmleri/page/SAYFA" : "Gerilim Filmleri",
26
+ f"{main_url}/izle/gizem-filmleri/page/SAYFA" : "Gizem Filmleri",
27
+ f"{main_url}/izle/komedi-filmleri/page/SAYFA" : "Komedi Filmleri",
28
+ f"{main_url}/izle/korku-filmleri/page/SAYFA" : "Korku Filmleri",
29
+ f"{main_url}/izle/macera-filmleri/page/SAYFA" : "Macera Filmleri",
30
+ f"{main_url}/izle/muzikal-filmler/page/SAYFA" : "Müzikal Filmler",
31
+ f"{main_url}/izle/romantik-filmler/page/SAYFA" : "Romantik Filmler",
32
+ f"{main_url}/izle/savas-filmleri/page/SAYFA" : "Savaş Filmleri",
33
+ f"{main_url}/izle/seri-filmler/page/SAYFA" : "Seri Filmler",
34
+ f"{main_url}/izle/spor-filmleri/page/SAYFA" : "Spor Filmleri",
35
+ f"{main_url}/izle/suc-filmleri/page/SAYFA" : "Suç Filmleri",
36
+ f"{main_url}/izle/tarihi-filmler/page/SAYFA" : "Tarih Filmler",
37
+ f"{main_url}/izle/western-filmleri/page/SAYFA" : "Western Filmler",
29
38
  }
30
39
 
31
40
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
@@ -75,7 +84,7 @@ class SinemaCX(PluginBase):
75
84
  duration = int(duration_match[1]) if duration_match else None,
76
85
  )
77
86
 
78
- async def load_links(self, url: str) -> list[dict]:
87
+ async def load_links(self, url: str) -> list[ExtractResult]:
79
88
  istek = await self.httpx.get(url)
80
89
  secici = Selector(istek.text)
81
90
 
@@ -130,12 +139,12 @@ class SinemaCX(PluginBase):
130
139
  vid_data = vid_istek.json()
131
140
 
132
141
  if vid_data.get("securedLink"):
133
- results.append({
134
- "name" : f"{self.name}",
135
- "url" : vid_data["securedLink"],
136
- "referer" : iframe,
137
- "subtitles" : subtitles
138
- })
142
+ results.append(ExtractResult(
143
+ name = f"{self.name}",
144
+ url = vid_data["securedLink"],
145
+ referer = iframe,
146
+ subtitles = subtitles
147
+ ))
139
148
  else:
140
149
  # Extractor'a yönlendir
141
150
  data = await self.extract(iframe)
@@ -1,6 +1,6 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo
3
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult
4
4
  from parsel import Selector
5
5
  import re, base64
6
6
 
@@ -120,7 +120,7 @@ class Sinezy(PluginBase):
120
120
  year = year
121
121
  )
122
122
 
123
- async def load_links(self, url: str) -> list[dict]:
123
+ async def load_links(self, url: str) -> list[ExtractResult]:
124
124
  resp = await self.httpx.get(url)
125
125
 
126
126
  match = re.search(r"ilkpartkod\s*=\s*'([^']+)'", resp.text, re.IGNORECASE)
@@ -1,6 +1,6 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo
3
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult
4
4
  from parsel import Selector
5
5
  import re
6
6
 
@@ -12,17 +12,26 @@ class SuperFilmGeldi(PluginBase):
12
12
  description = "Hd film izliyerek arkadaşlarınızla ve sevdiklerinizle iyi bir vakit geçirmek istiyorsanız açın bir film eğlenmeye bakın. Bilim kurgu filmleri, aşk drama vahşet aşk romantik sıradışı korku filmlerini izle."
13
13
 
14
14
  main_page = {
15
- f"{main_url}/page/SAYFA" : "Son Eklenenler",
16
- f"{main_url}/hdizle/category/aksiyon/page/SAYFA" : "Aksiyon",
17
- f"{main_url}/hdizle/category/animasyon/page/SAYFA" : "Animasyon",
18
- f"{main_url}/hdizle/category/belgesel/page/SAYFA" : "Belgesel",
19
- f"{main_url}/hdizle/category/bilim-kurgu/page/SAYFA" : "Bilim Kurgu",
20
- f"{main_url}/hdizle/category/fantastik/page/SAYFA" : "Fantastik",
21
- f"{main_url}/hdizle/category/komedi-filmleri/page/SAYFA" : "Komedi Filmleri",
22
- f"{main_url}/hdizle/category/macera/page/SAYFA" : "Macera",
23
- f"{main_url}/hdizle/category/gerilim/page/SAYFA" : "Gerilim",
24
- f"{main_url}/hdizle/category/suc/page/SAYFA" : "Suç",
25
- f"{main_url}/hdizle/category/karete-filmleri/page/SAYFA" : "Karate Filmleri",
15
+ f"{main_url}/page/SAYFA" : "Son Eklenenler",
16
+ f"{main_url}/hdizle/category/aksiyon/page/SAYFA" : "Aksiyon",
17
+ f"{main_url}/hdizle/category/animasyon/page/SAYFA" : "Animasyon",
18
+ f"{main_url}/hdizle/category/belgesel/page/SAYFA" : "Belgesel",
19
+ f"{main_url}/hdizle/category/biyografi/page/SAYFA" : "Biyografi",
20
+ f"{main_url}/hdizle/category/bilim-kurgu/page/SAYFA" : "Bilim Kurgu",
21
+ f"{main_url}/hdizle/category/fantastik/page/SAYFA" : "Fantastik",
22
+ f"{main_url}/hdizle/category/dram/page/SAYFA" : "Dram",
23
+ f"{main_url}/hdizle/category/gerilim/page/SAYFA" : "Gerilim",
24
+ f"{main_url}/hdizle/category/gizem/page/SAYFA" : "Gizem",
25
+ f"{main_url}/hdizle/category/komedi-filmleri/page/SAYFA" : "Komedi Filmleri",
26
+ f"{main_url}/hdizle/category/karete-filmleri/page/SAYFA" : "Karate Filmleri",
27
+ f"{main_url}/hdizle/category/korku/page/SAYFA" : "Korku",
28
+ f"{main_url}/hdizle/category/muzik/page/SAYFA" : "Müzik",
29
+ f"{main_url}/hdizle/category/macera/page/SAYFA" : "Macera",
30
+ f"{main_url}/hdizle/category/romantik/page/SAYFA" : "Romantik",
31
+ f"{main_url}/hdizle/category/spor/page/SAYFA" : "Spor",
32
+ f"{main_url}/hdizle/category/savas/page/SAYFA" : "Savaş",
33
+ f"{main_url}/hdizle/category/suc/page/SAYFA" : "Suç",
34
+ f"{main_url}/hdizle/category/western/page/SAYFA" : "Western",
26
35
  }
27
36
 
28
37
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
@@ -76,7 +85,9 @@ class SuperFilmGeldi(PluginBase):
76
85
  actors = actors,
77
86
  )
78
87
 
79
- async def load_links(self, url: str) -> list[dict]:
88
+ async def load_links(self, url: str) -> list[ExtractResult]:
89
+ from KekikStream.Core import ExtractResult
90
+
80
91
  istek = await self.httpx.get(url)
81
92
  secici = Selector(istek.text)
82
93
 
@@ -104,12 +115,12 @@ class SuperFilmGeldi(PluginBase):
104
115
 
105
116
  m3u_link = iframe.split("/player")[0] + mix_point + end_point
106
117
 
107
- results.append({
108
- "name" : f"{self.name} | Mix Player",
109
- "url" : m3u_link,
110
- "referer" : iframe,
111
- "subtitles" : []
112
- })
118
+ results.append(ExtractResult(
119
+ name = f"{self.name} | Mix Player",
120
+ url = m3u_link,
121
+ referer = iframe,
122
+ subtitles = []
123
+ ))
113
124
  else:
114
125
  # Extractor'a yönlendir
115
126
  data = await self.extract(iframe)
@@ -1,6 +1,6 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo
3
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult
4
4
  from parsel import Selector
5
5
 
6
6
  class UgurFilm(PluginBase):
@@ -79,7 +79,7 @@ class UgurFilm(PluginBase):
79
79
  actors = actors,
80
80
  )
81
81
 
82
- async def load_links(self, url: str) -> list[dict]:
82
+ async def load_links(self, url: str) -> list[ExtractResult]:
83
83
  istek = await self.httpx.get(url)
84
84
  secici = Selector(istek.text)
85
85
  results = []
KekikStream/__init__.py CHANGED
@@ -1,7 +1,7 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
3
  from .CLI import konsol, cikis_yap, hata_yakala, pypi_kontrol_guncelle
4
- from .Core import PluginManager, ExtractorManager, UIManager, MediaManager, PluginBase, ExtractorBase, SeriesInfo
4
+ from .Core import PluginManager, ExtractorManager, UIManager, MediaManager, PluginBase, ExtractorBase, SeriesInfo, ExtractResult
5
5
  from asyncio import run, TaskGroup, Semaphore
6
6
  from contextlib import suppress
7
7
 
@@ -226,7 +226,7 @@ class KekikStream:
226
226
  case "Çıkış":
227
227
  cikis_yap(False)
228
228
 
229
- async def show_link_options(self, links: list[dict]):
229
+ async def show_link_options(self, links: list[ExtractResult]):
230
230
  """Bağlantı seçeneklerini göster"""
231
231
  if not links:
232
232
  konsol.print("[bold red]Bağlantı bulunamadı![/bold red]")
@@ -235,33 +235,33 @@ class KekikStream:
235
235
  # Direkt oynatma - tüm pluginlerde artık play metodu var (PluginBase'den miras)
236
236
  return await self.play_direct(links)
237
237
 
238
- async def play_direct(self, links: list[dict]):
238
+ async def play_direct(self, links: list[ExtractResult]):
239
239
  """Plugin'in kendi metoduyla oynat"""
240
240
  selected = await self.ui.select_from_list(
241
241
  message = "Bağlantı seçin:",
242
- choices = [{"name": link.get("name", "Bilinmiyor"), "value": link} for link in links]
242
+ choices = [{"name": link.name or "Bilinmiyor", "value": link} for link in links]
243
243
  )
244
244
 
245
245
  if not selected:
246
246
  return await self.content_finished()
247
247
 
248
248
  self.update_title(self.episode_title)
249
- self.update_title(selected.get("name"))
249
+ self.update_title(selected.name)
250
250
 
251
251
  await self.current_plugin.play(
252
252
  name = self.media.get_title(),
253
- url = selected.get("url"),
254
- user_agent = selected.get("user_agent"),
255
- referer = selected.get("referer"),
256
- subtitles = selected.get("subtitles", [])
253
+ url = selected.url,
254
+ user_agent = selected.user_agent,
255
+ referer = selected.referer,
256
+ subtitles = selected.subtitles or []
257
257
  )
258
258
  return await self.content_finished()
259
259
 
260
- async def play_with_extractor(self, links: list[dict], mapping: dict):
260
+ async def play_with_extractor(self, links: list[ExtractResult], mapping: dict):
261
261
  """Extractor ile oynat"""
262
262
  options = [
263
- {"name": link.get("name", mapping[link["url"]]), "value": link}
264
- for link in links if link["url"] in mapping
263
+ {"name": link.name or mapping.get(link.url, "Bilinmiyor"), "value": link}
264
+ for link in links if link.url in mapping
265
265
  ]
266
266
 
267
267
  if not options:
@@ -272,7 +272,7 @@ class KekikStream:
272
272
  if not selected:
273
273
  return await self.content_finished()
274
274
 
275
- url = selected.get("url")
275
+ url = selected.url
276
276
  extractor: ExtractorBase = self.extractor.find_extractor(url)
277
277
 
278
278
  if not extractor:
@@ -280,7 +280,7 @@ class KekikStream:
280
280
  return await self.handle_no_results()
281
281
 
282
282
  try:
283
- referer = selected.get("referer", self.current_plugin.main_url)
283
+ referer = selected.referer or self.current_plugin.main_url
284
284
  extract_data = await extractor.extract(url, referer=referer)
285
285
  except Exception as e:
286
286
  konsol.print(f"[bold red]{extractor.name} hatası: {e}[/bold red]")
@@ -298,7 +298,7 @@ class KekikStream:
298
298
 
299
299
  # Başlıkları güncelle ve oynat
300
300
  self.update_title(self.episode_title)
301
- self.update_title(selected.get("name"))
301
+ self.update_title(selected.name)
302
302
  self.update_title(extract_data.name)
303
303
 
304
304
  self.media.play_media(extract_data)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 2.1.4
3
+ Version: 2.1.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
@@ -104,7 +104,7 @@ KekikStream modüler bir plugin mimarisi kullanır; her medya kaynağı bağıms
104
104
 
105
105
  **Plugin Geliştirme:**
106
106
  ```python
107
- from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, SeriesInfo
107
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, SeriesInfo, ExtractResult
108
108
 
109
109
  class MyPlugin(PluginBase):
110
110
  name = "MyPlugin"
@@ -126,7 +126,7 @@ class MyPlugin(PluginBase):
126
126
  async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
127
127
  return details
128
128
 
129
- async def load_links(self, url: str) -> list[dict]:
129
+ async def load_links(self, url: str) -> list[ExtractResult]:
130
130
  return links
131
131
  ```
132
132
 
@@ -292,6 +292,8 @@ Projeyi geliştirmek için katkılarınızı bekliyoruz!
292
292
 
293
293
  - [keyiflerolsun/Kekik-cloudstream](https://github.com/keyiflerolsun/Kekik-cloudstream)
294
294
  - [keyiflerolsun/seyirTurk-Parser](https://github.com/keyiflerolsun/seyirTurk-Parser)
295
+ - [feroxx/Kekik-cloudstream](https://github.com/feroxx/Kekik-cloudstream)
296
+ - [kerimmkirac/cs-kerim](https://github.com/kerimmkirac/cs-kerim)
295
297
 
296
298
  ## 🌐 Telif Hakkı ve Lisans
297
299
 
@@ -1,4 +1,4 @@
1
- KekikStream/__init__.py,sha256=7WBVAkCpUNvxYgRjDiy3sCdug7efWL7yg_SDdwsB9K4,12775
1
+ KekikStream/__init__.py,sha256=nTgIxO1716DVX-cZnMvwi6OjPbuebFyeYpHvpqCJ0Js,12767
2
2
  KekikStream/__main__.py,sha256=B81dQoeGEb-T5Sycs3eNAmW7unvx0Mef0syCjs4nPds,137
3
3
  KekikStream/requirements.txt,sha256=0fO-7byqgLMr4NyJO7fQBFOnLv0zcAeqk7tLhHXqonk,76
4
4
  KekikStream/CLI/__init__.py,sha256=U6oLq_O7u5y2eHhBnmfhZNns_EqHHJXJmzl8jvZFUNY,230
@@ -11,16 +11,17 @@ KekikStream/Core/Extractor/ExtractorModels.py,sha256=Qj_gbIeGRewaZXNfYkTi4FFRRq6
11
11
  KekikStream/Core/Extractor/YTDLPCache.py,sha256=sRg5kwFxkRXA_8iRwsV29E51g9qQJvg8dWUnzfr7EwA,984
12
12
  KekikStream/Core/Media/MediaHandler.py,sha256=MEn3spPAThVloN3WcoCwWhpoyMA7tAZvcwYjmjJsX3U,7678
13
13
  KekikStream/Core/Media/MediaManager.py,sha256=AaUq2D7JSJIphjoAj2fjLOJjswm7Qf5hjYCbBdrbnDU,438
14
- KekikStream/Core/Plugin/PluginBase.py,sha256=OYmYtIlyIVq8nPXqEi7i3zBG4pren10ZoyZ-LnWb8e8,5969
14
+ KekikStream/Core/Plugin/PluginBase.py,sha256=iirN7cQHccqUa6f6Gr86x8XYg4Rr6TlkaWOtbhnzU9g,5923
15
15
  KekikStream/Core/Plugin/PluginLoader.py,sha256=GcDqN1u3nJeoGKH_oDFHCpwteJlLCxHNbmPrC5L-hZE,3692
16
16
  KekikStream/Core/Plugin/PluginManager.py,sha256=CZVg1eegi8vfMfccx0DRV0Box8kXz-aoULTQLgbPbvM,893
17
17
  KekikStream/Core/Plugin/PluginModels.py,sha256=Yvx-6Fkn8QCIcuqAkFbCP5EJcq3XBkK_P8S0tRNhS6E,2476
18
18
  KekikStream/Core/UI/UIManager.py,sha256=T4V_kdTTWa-UDamgLSKa__dWJuzcvRK9NuwBlzU9Bzc,1693
19
- KekikStream/Extractors/CloseLoad.py,sha256=rc1lYy32ThB4ApC1hZdqVQ3cAVHvRGHOMdjomWeDgaQ,884
19
+ KekikStream/Extractors/CloseLoad.py,sha256=m3wpLvbLRakqv0yn9v6OOpVlEDIqgAy6XBMIiuD5g0Q,1558
20
20
  KekikStream/Extractors/ContentX.py,sha256=x0j67e1OAw4L1m7ejUTyiIxqr1EhvpjaA_0U-s4IQ-I,3617
21
21
  KekikStream/Extractors/DonilasPlay.py,sha256=Lr60pEht96SMlXICYWo9J5dOwV4ty8fetBCCqJ3ARUY,3221
22
22
  KekikStream/Extractors/DzenRu.py,sha256=X0Rhm1-W4YjQwVrJs8YFqVcCxMaZi8rsKiLhK_ZsYlU,1185
23
23
  KekikStream/Extractors/ExPlay.py,sha256=EJNVKAbaIxlbOsCx7J9aLfNHKOFoqSLZZUw7W4QYeH0,1827
24
+ KekikStream/Extractors/Filemoon.py,sha256=l0AVyRrYA2DTuSkYoy6Jh02_w53TeBRyROkY9koiees,2684
24
25
  KekikStream/Extractors/HDPlayerSystem.py,sha256=EgnFzx5Q4PkuwAtuff5SYU9k59B-CyOdySl7lbCZ9hM,1312
25
26
  KekikStream/Extractors/JetTv.py,sha256=aA3WeOvR-tszac-WSwunZZb1NRy25TQH8vxY3TDscRI,1596
26
27
  KekikStream/Extractors/MailRu.py,sha256=xQVCWwYqNoG5T43VAW1_m0v4e80FbO-1pNPKkwhTccU,1218
@@ -31,7 +32,7 @@ KekikStream/Extractors/Odnoklassniki.py,sha256=YfFRCL3Ag5N4zDzK9ZLOr3HVQcsETFQpf
31
32
  KekikStream/Extractors/PeaceMakerst.py,sha256=pEgJb3KDfEPAUjbuvrYbUlxIciKgED-Vd0arrRO3QCk,2317
32
33
  KekikStream/Extractors/PixelDrain.py,sha256=Uk2pPvtBzaKtRXu1iNO8FLHd0EAuIOIzI1H_n02tg-U,964
33
34
  KekikStream/Extractors/PlayerFilmIzle.py,sha256=kH-O_RtQvG4iRLGKi-sFn1ST14DrxxoAa5iRT2PsdXc,2503
34
- KekikStream/Extractors/RapidVid.py,sha256=FgAZfgtnKE57KRiRIFw-6_ZES0Trp5QriNbRTfSBGQs,3139
35
+ KekikStream/Extractors/RapidVid.py,sha256=t_8ZUp5DCTIaohc5aW4s9HEQQ1A2lU5bTMX84lctmtY,3529
35
36
  KekikStream/Extractors/SetPlay.py,sha256=6XuNXoNFM1h3KOCkTxeZmcAl8QTdqzVN_pp_dEIKF8A,2235
36
37
  KekikStream/Extractors/SetPrime.py,sha256=ob09y-Sm91YR7rIRzikhZiMHX6D4Djm5QzFTg6KbO4k,1536
37
38
  KekikStream/Extractors/SibNet.py,sha256=zJTkzlr34ufKCWzKKCgJrzhb2o-fpjTjFdi38gv6N6g,849
@@ -41,40 +42,40 @@ KekikStream/Extractors/TauVideo.py,sha256=2ai9BwwM6qlCgxK7E0B642LtOF5y4hEb9tQ2aD
41
42
  KekikStream/Extractors/TurboImgz.py,sha256=nnWnP1K4JZbMj6S-YuXxej31UZtF4JcboSW4n7A4A5c,824
42
43
  KekikStream/Extractors/TurkeyPlayer.py,sha256=FX_H3vzXjAD7IjK11bjJVVw_VdPQ4n6YQLfjQ6E3t7o,1247
43
44
  KekikStream/Extractors/VCTPlay.py,sha256=1BCl2_vVIrwvG56LCzl2KE5g2CUaMAhzImOZMdZpZCQ,1377
44
- KekikStream/Extractors/VidHide.py,sha256=TVoS9CMV1WSE83vPC4FFxsNE71n-_DtVJm66_1Wt8pU,2538
45
+ KekikStream/Extractors/VidHide.py,sha256=UIAPFLbGDPRjcJVuDmaVbFN5r0ZyJoW4CRn1INH8mJs,2837
45
46
  KekikStream/Extractors/VidMoly.py,sha256=QLRRGH1uHFTREl5Oq3V8WIkVpqaZuuygmHaW1ulj1Lg,4774
46
47
  KekikStream/Extractors/VidMoxy.py,sha256=LT7wTKBtuuagXwfGjWZwQF2NQGuChurZJ-I6gM0Jcek,1771
47
48
  KekikStream/Extractors/VidPapi.py,sha256=g9ohdL9VJrxy4N7xerbIRz3ZxjsXFHlJWy0NaZ31hFY,3259
48
49
  KekikStream/Extractors/VideoSeyred.py,sha256=M6QPZ_isX9vM_7LPo-2I_8Cf1vB9awHw8vvzBODtoiQ,1977
49
50
  KekikStream/Extractors/YTDLP.py,sha256=Hy8loCSFSquu2zaL3INord-Jm6T8CM6K2-VcDA2K79g,7390
50
51
  KekikStream/Extractors/YildizKisaFilm.py,sha256=R_JlrOVeMiDlXYcuTdItnKvidyx8_u3B14fSrxew2aE,1316
51
- KekikStream/Plugins/BelgeselX.py,sha256=qVYZpmadbVImCAlBNwkak7ShHVECFgO3cr5VcPGnq6Y,8396
52
- KekikStream/Plugins/DiziBox.py,sha256=7WxUhyr-RwDpgYS3SnlwgN_TQnSPSZ-lZ5xW-mPbCek,9691
53
- KekikStream/Plugins/DiziPal.py,sha256=hCjf1as54Bc6aC3UV9P0T4yIbOFOP6jHIAoIgRMPbJQ,9686
54
- KekikStream/Plugins/DiziYou.py,sha256=XTTShRhlDjTNeqgc28HF-FN9Y7tGUBzHZU0KuFgwvYA,8669
55
- KekikStream/Plugins/Dizilla.py,sha256=OzZJuFDJK6q6szIcAFM-s3H1HNdUuTaK8VWVGhnONBs,11741
56
- KekikStream/Plugins/FilmBip.py,sha256=bgdUJWW6f_DoaKxJPES0tJJRauy2PVpw4jsg2zAjbcI,6012
57
- KekikStream/Plugins/FilmMakinesi.py,sha256=PS2bST0IuzYSbE1D87KTeazZmWvLp7JC_gIC1lPkf6Y,5684
58
- KekikStream/Plugins/FilmModu.py,sha256=ux5FACwmkuNQxx3rXQEeX-bWSXC4L7CfFxBZOhPuPFc,6524
59
- KekikStream/Plugins/FullHDFilm.py,sha256=lYcGpes7HJYFHoKn_Ntk3gUL6bdm8MzDLAv0ns6S1YM,6837
60
- KekikStream/Plugins/FullHDFilmizlesene.py,sha256=nimV_mSaPYYxG4_d-gnW2Bh4EKMM6hGh0Ev8RbJVs-8,6054
61
- KekikStream/Plugins/HDFilmCehennemi.py,sha256=LqTlqXdQkhcAME7XYcFW8HAvPxK2nSilXKkyVElsgcg,11060
62
- KekikStream/Plugins/JetFilmizle.py,sha256=4gbvLgnjdzWr6f10jKYQAC4W5NEJCEOKxJnVQH36QTY,6386
63
- KekikStream/Plugins/KultFilmler.py,sha256=H_U2uil9Z-aw10tZuSUB0dmMtQJrnckodGRhaA6t6gg,8944
64
- KekikStream/Plugins/RecTV.py,sha256=tzIVjBP4YKL4dBvjRNIuECrAfNw6F892Fw0pXvLutoU,7187
65
- KekikStream/Plugins/RoketDizi.py,sha256=hiqeFeARK9Gs2Ar933vVtCndrMXCqAkLIallxHsVw18,8544
66
- KekikStream/Plugins/SelcukFlix.py,sha256=8OnYtiQro4VBd1f9UKfdpWG96vdUhOafn2wwD2vEkhY,12351
67
- KekikStream/Plugins/SetFilmIzle.py,sha256=X31Xk1wTQgRDqFdyD9ZDQwa3LCr1dZ7aGpGfB8TDkDg,9991
68
- KekikStream/Plugins/SezonlukDizi.py,sha256=alCeuvS0X-9-3nejHkaAJPE-9WgCUX7Ly93WaW03BZE,7047
69
- KekikStream/Plugins/SineWix.py,sha256=3c1N5-2PshwnNZTE--SEzI77Yh_d30iCUZMYoT0tftA,7007
70
- KekikStream/Plugins/Sinefy.py,sha256=riB2lgSSG5MkgxnVtX1OlApBcHG6vVjfiHyJ6h8_6DM,9965
71
- KekikStream/Plugins/SinemaCX.py,sha256=jrE7gkvJgPKjk8XymztyxYErZtPVF9onW48E22Us9pA,6766
72
- KekikStream/Plugins/Sinezy.py,sha256=_iituEi6A7b-Y-wGcTkFknwFus-oAvZje2XKayzCZHY,6104
73
- KekikStream/Plugins/SuperFilmGeldi.py,sha256=O3f8jwnX-ihF49kmZ7g6IKU2HZLmLf_RCucplDSglN4,5347
74
- KekikStream/Plugins/UgurFilm.py,sha256=9vulu0uP0dWVVhWzDf-C7RQN_dLKB2AOJ2NoxU-YMlA,4672
75
- kekikstream-2.1.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
76
- kekikstream-2.1.4.dist-info/METADATA,sha256=3LauBNlXQmhyqEjU0AY9i9fxsEHs2PBl7LiY5G8TsiQ,10090
77
- kekikstream-2.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
78
- kekikstream-2.1.4.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
79
- kekikstream-2.1.4.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
80
- kekikstream-2.1.4.dist-info/RECORD,,
52
+ KekikStream/Plugins/BelgeselX.py,sha256=upxN78gIFrPdVCw3hJ0DGqwa6vtrd_ShCWbO7_JLQhg,8427
53
+ KekikStream/Plugins/DiziBox.py,sha256=3O8RHPvzMPcMB-8Wc1gwxI7GQlBitQvz4WDR6bmXuqQ,9715
54
+ KekikStream/Plugins/DiziPal.py,sha256=xwz6XeN2bMvShClfsPTK5dI4EktSZQyCrVu8Gn0x_pU,9715
55
+ KekikStream/Plugins/DiziYou.py,sha256=sH4UOCEbl-o9fIGORgz1YVMMnfbZVfjnitPsGuCl7PI,8698
56
+ KekikStream/Plugins/Dizilla.py,sha256=Rk_rS6ymlj5RT-ZBspjXS-Dv0ds3d9n46LCpGKtycP4,11765
57
+ KekikStream/Plugins/FilmBip.py,sha256=xJA79gwPXwvdQLfUu5QGdwv8kGZngjAg3csLQqQYSDU,6036
58
+ KekikStream/Plugins/FilmMakinesi.py,sha256=_Ulwi0bo-8bXZZjRxbpBKAIkAnlyG6D0qEvD1UJTsjk,5708
59
+ KekikStream/Plugins/FilmModu.py,sha256=HVawdKHuqcFb3PQ-93uwGlwv1dNhkM2kpStBlTJJXR4,6553
60
+ KekikStream/Plugins/FullHDFilm.py,sha256=fimK5MqPYjmog859lfuEuJeg8AGylYyDm36Ak3X3Msg,9768
61
+ KekikStream/Plugins/FullHDFilmizlesene.py,sha256=_-HaoNvPVzITB_aK3jOkSSAOA50SYFNdnjHH4JGCmOc,6078
62
+ KekikStream/Plugins/HDFilmCehennemi.py,sha256=I-dwkerkwfzcaSQA9XzIGh2LeRywBGydX0D0k6FmoOc,13029
63
+ KekikStream/Plugins/JetFilmizle.py,sha256=nhTOU4333Bg-au0gE9xHs74UiyjSZOKHygOlr2BkBx0,6410
64
+ KekikStream/Plugins/KultFilmler.py,sha256=ODnQu2_qLKx68dpT16MFUiIXYQlkQSDU0x15o91LWU8,9097
65
+ KekikStream/Plugins/RecTV.py,sha256=Nj4AdeetPMzvZ-VKUdUGhBC1SiFSBRYRebODgE2UeI8,7228
66
+ KekikStream/Plugins/RoketDizi.py,sha256=7cP6935unhrn_yDt0hsLoW3nboX3WUD0P2DqqRny3_M,8568
67
+ KekikStream/Plugins/SelcukFlix.py,sha256=WKMsZpVVdHn_zW69xxhAuIP7OhAPbPFxFRWzGzHBgaE,13601
68
+ KekikStream/Plugins/SetFilmIzle.py,sha256=EcoHSacJO9bvzA9lZZzDZAwAhXfaDstI4M4C3YOwvEU,10113
69
+ KekikStream/Plugins/SezonlukDizi.py,sha256=7N4S8ikA4IzHszD5WaXAUESAVfHDKSnMQeX4iQFP3KY,8457
70
+ KekikStream/Plugins/SineWix.py,sha256=z0r90lggAugEWE1g9vg8gZsInBObUZPnVFQwq7GYmJs,7052
71
+ KekikStream/Plugins/Sinefy.py,sha256=Ogw0-qjROz8T0EkV1jwbOvz0WM4FN9D24bNrJmi314k,9998
72
+ KekikStream/Plugins/SinemaCX.py,sha256=aujqCWPGZHcRqKcMFlZYEwMonj0C_UQ_J4ZqCyF59pU,7492
73
+ KekikStream/Plugins/Sinezy.py,sha256=lFOfbMwxzP6IkhPZ_C3ZWGrgwThSk58pYQAD61rCJnM,6128
74
+ KekikStream/Plugins/SuperFilmGeldi.py,sha256=dqU1IJHcTPU9zlnA9rSKsX0ehpBYSgDuz6eSlCCop8k,6044
75
+ KekikStream/Plugins/UgurFilm.py,sha256=TlMDy3tSfkEUy_ziIdCkgnfmoRtVdXEv8m4kjKeAWrE,4696
76
+ kekikstream-2.1.9.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
77
+ kekikstream-2.1.9.dist-info/METADATA,sha256=f1RXI2DzT1--Z8HhAgJ8Phn6jnOJiGV5aA1V6j1HT54,10254
78
+ kekikstream-2.1.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
79
+ kekikstream-2.1.9.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
80
+ kekikstream-2.1.9.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
81
+ kekikstream-2.1.9.dist-info/RECORD,,