KekikStream 1.2.6__py3-none-any.whl → 1.2.8__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.
@@ -3,7 +3,7 @@
3
3
  from ...CLI import konsol, cikis_yap
4
4
  from .ExtractorBase import ExtractorBase
5
5
  from pathlib import Path
6
- import os, importlib.util
6
+ import os, importlib.util, traceback
7
7
 
8
8
  class ExtractorLoader:
9
9
  def __init__(self, extractors_dir: str):
@@ -13,7 +13,7 @@ class ExtractorLoader:
13
13
 
14
14
  # Dizin kontrolü
15
15
  if not self.local_extractors_dir.exists() and not self.global_extractors_dir.exists():
16
- konsol.log(f"[red][!] Extractor dizini bulunamadı: {self.global_extractors_dir}[/red]")
16
+ # konsol.log(f"[red][!] Extractor dizini bulunamadı: {self.global_extractors_dir}[/red]")
17
17
  cikis_yap(False)
18
18
 
19
19
  def load_all(self) -> list[ExtractorBase]:
@@ -21,16 +21,16 @@ class ExtractorLoader:
21
21
 
22
22
  # Global çıkarıcıları yükle
23
23
  if self.global_extractors_dir.exists():
24
- konsol.log(f"[green][*] Global Extractor dizininden yükleniyor: {self.global_extractors_dir}[/green]")
24
+ # konsol.log(f"[green][*] Global Extractor dizininden yükleniyor: {self.global_extractors_dir}[/green]")
25
25
  global_extractors = self._load_from_directory(self.global_extractors_dir)
26
- konsol.log(f"[green]Global Extractor'lar: {[e.__name__ for e in global_extractors]}[/green]")
26
+ # konsol.log(f"[green]Global Extractor'lar: {[e.__name__ for e in global_extractors]}[/green]")
27
27
  extractors.extend(global_extractors)
28
28
 
29
29
  # Yerel çıkarıcıları yükle
30
30
  if self.local_extractors_dir.exists():
31
- konsol.log(f"[green][*] Yerel Extractor dizininden yükleniyor: {self.local_extractors_dir}[/green]")
31
+ # konsol.log(f"[green][*] Yerel Extractor dizininden yükleniyor: {self.local_extractors_dir}[/green]")
32
32
  local_extractors = self._load_from_directory(self.local_extractors_dir)
33
- konsol.log(f"[green]Yerel Extractor'lar: {[e.__name__ for e in local_extractors]}[/green]")
33
+ # konsol.log(f"[green]Yerel Extractor'lar: {[e.__name__ for e in local_extractors]}[/green]")
34
34
  extractors.extend(local_extractors)
35
35
 
36
36
  # Benzersizliği sağlama (modül adı + sınıf adı bazında)
@@ -42,7 +42,7 @@ class ExtractorLoader:
42
42
  unique_extractors.append(ext)
43
43
  seen_names.add(identifier)
44
44
 
45
- konsol.log(f"[blue]Sonuç Extractor'lar: {[e.__name__ for e in unique_extractors]}[/blue]")
45
+ # konsol.log(f"[blue]Sonuç Extractor'lar: {[e.__name__ for e in unique_extractors]}[/blue]")
46
46
 
47
47
  if not unique_extractors:
48
48
  konsol.log("[yellow][!] Yüklenecek bir Extractor bulunamadı![/yellow]")
@@ -56,12 +56,12 @@ class ExtractorLoader:
56
56
  for file in os.listdir(directory):
57
57
  if file.endswith(".py") and not file.startswith("__"):
58
58
  module_name = file[:-3] # .py uzantısını kaldır
59
- konsol.log(f"[cyan]Okunan Dosya\t\t: {module_name}[/cyan]")
59
+ # konsol.log(f"[cyan]Okunan Dosya\t\t: {module_name}[/cyan]")
60
60
  if extractor := self._load_extractor(directory, module_name):
61
- konsol.log(f"[magenta]Extractor Yüklendi\t: {extractor.__name__}[/magenta]")
61
+ # konsol.log(f"[magenta]Extractor Yüklendi\t: {extractor.__name__}[/magenta]")
62
62
  extractors.append(extractor)
63
63
 
64
- konsol.log(f"[yellow]{directory} dizininden yüklenen Extractor'lar: {[e.__name__ for e in extractors]}[/yellow]")
64
+ # konsol.log(f"[yellow]{directory} dizininden yüklenen Extractor'lar: {[e.__name__ for e in extractors]}[/yellow]")
65
65
  return extractors
66
66
 
67
67
  def _load_extractor(self, directory: Path, module_name: str):
@@ -80,10 +80,11 @@ class ExtractorLoader:
80
80
  for attr in dir(module):
81
81
  obj = getattr(module, attr)
82
82
  if obj.__module__ == module_name and isinstance(obj, type) and issubclass(obj, ExtractorBase) and obj is not ExtractorBase:
83
- konsol.log(f"[green]Yüklenen sınıf\t\t: {module_name}.{obj.__name__} ({obj.__module__}.{obj.__name__})[/green]")
83
+ # konsol.log(f"[green]Yüklenen sınıf\t\t: {module_name}.{obj.__name__} ({obj.__module__}.{obj.__name__})[/green]")
84
84
  return obj
85
85
 
86
86
  except Exception as hata:
87
87
  konsol.log(f"[red][!] Extractor yüklenirken hata oluştu: {module_name}\nHata: {hata}")
88
+ konsol.print(f"[dim]{traceback.format_exc()}[/dim]")
88
89
 
89
90
  return None
@@ -13,7 +13,7 @@ class PluginLoader:
13
13
 
14
14
  # Dizin kontrolü
15
15
  if not self.local_plugins_dir.exists() and not self.global_plugins_dir.exists():
16
- konsol.log(f"[red][!] Eklenti dizini bulunamadı: {plugins_dir}[/red]")
16
+ # konsol.log(f"[red][!] Eklenti dizini bulunamadı: {plugins_dir}[/red]")
17
17
  cikis_yap(False)
18
18
 
19
19
  def load_all(self) -> dict[str, PluginBase]:
@@ -21,12 +21,12 @@ class PluginLoader:
21
21
 
22
22
  # Global eklentileri yükle
23
23
  if self.global_plugins_dir.exists():
24
- konsol.log(f"[green][*] Global Eklenti dizininden yükleniyor: {self.global_plugins_dir}[/green]")
24
+ # konsol.log(f"[green][*] Global Eklenti dizininden yükleniyor: {self.global_plugins_dir}[/green]")
25
25
  plugins |= self._load_from_directory(self.global_plugins_dir)
26
26
 
27
27
  # Yerel eklentileri yükle
28
28
  if self.local_plugins_dir.exists():
29
- konsol.log(f"[green][*] Yerel Eklenti dizininden yükleniyor: {self.local_plugins_dir}[/green]")
29
+ # konsol.log(f"[green][*] Yerel Eklenti dizininden yükleniyor: {self.local_plugins_dir}[/green]")
30
30
  plugins |= self._load_from_directory(self.local_plugins_dir)
31
31
 
32
32
  if not plugins:
@@ -41,12 +41,12 @@ class PluginLoader:
41
41
  for file in os.listdir(directory):
42
42
  if file.endswith(".py") and not file.startswith("__"):
43
43
  module_name = file[:-3] # .py uzantısını kaldır
44
- konsol.log(f"[cyan]Okunan Dosya\t\t: {module_name}[/cyan]")
44
+ # konsol.log(f"[cyan]Okunan Dosya\t\t: {module_name}[/cyan]")
45
45
  if plugin := self._load_plugin(directory, module_name):
46
- konsol.log(f"[magenta]Eklenti Yüklendi\t: {plugin.name}[/magenta]")
46
+ # konsol.log(f"[magenta]Eklenti Yüklendi\t: {plugin.name}[/magenta]")
47
47
  plugins[module_name] = plugin
48
48
 
49
- konsol.log(f"[yellow]{directory} dizininden yüklenen Eklentiler: {list(plugins.keys())}[/yellow]")
49
+ # konsol.log(f"[yellow]{directory} dizininden yüklenen Eklentiler: {list(plugins.keys())}[/yellow]")
50
50
  return plugins
51
51
 
52
52
  def _load_plugin(self, directory: Path, module_name: str):
@@ -65,7 +65,7 @@ class PluginLoader:
65
65
  for attr in dir(module):
66
66
  obj = getattr(module, attr)
67
67
  if isinstance(obj, type) and issubclass(obj, PluginBase) and obj is not PluginBase:
68
- konsol.log(f"[yellow]Yüklenen sınıf\t\t: {module_name}.{obj.__name__} ({obj.__module__}.{obj.__name__})[/yellow]")
68
+ # konsol.log(f"[yellow]Yüklenen sınıf\t\t: {module_name}.{obj.__name__} ({obj.__module__}.{obj.__name__})[/yellow]")
69
69
  return obj()
70
70
 
71
71
  except Exception as hata:
@@ -1,13 +1,68 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from KekikStream.Core import PluginBase, SearchResult, SeriesInfo, Episode
3
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, SeriesInfo, Episode
4
4
  from parsel import Selector
5
5
  from json import loads
6
6
  from urllib.parse import urlparse, urlunparse
7
7
 
8
8
  class Dizilla(PluginBase):
9
- name = "Dizilla"
10
- main_url = "https://dizilla.club"
9
+ name = "Dizilla"
10
+ language = "tr"
11
+ main_url = "https://dizilla.club"
12
+ favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
13
+ description = "Dizilla tüm yabancı dizileri ücretsiz olarak Türkçe Dublaj ve altyazılı seçenekleri ile 1080P kalite izleyebileceğiniz yeni nesil yabancı dizi izleme siteniz."
14
+
15
+ main_page = {
16
+ f"{main_url}/tum-bolumler" : "Altyazılı Bölümler",
17
+ f"{main_url}/dublaj-bolumler" : "Dublaj Bölümler",
18
+ f"{main_url}/dizi-turu/aile" : "Aile",
19
+ f"{main_url}/dizi-turu/aksiyon" : "Aksiyon",
20
+ f"{main_url}/dizi-turu/bilim-kurgu" : "Bilim Kurgu",
21
+ f"{main_url}/dizi-turu/romantik" : "Romantik",
22
+ f"{main_url}/dizi-turu/komedi" : "Komedi"
23
+ }
24
+
25
+ async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
26
+ istek = await self.httpx.get(url)
27
+ secici = Selector(istek.text)
28
+
29
+ ana_sayfa = []
30
+
31
+ if "dizi-turu" in url:
32
+ ana_sayfa.extend([
33
+ MainPageResult(
34
+ category = category,
35
+ title = veri.css("h2::text").get(),
36
+ url = self.fix_url(veri.css("::attr(href)").get()),
37
+ poster = self.fix_url(veri.css("img::attr(src)").get() or veri.css("img::attr(data-src)").get())
38
+ )
39
+ for veri in secici.css("div.grid-cols-3 a")
40
+ ])
41
+ else:
42
+ for veri in secici.css("div.grid a"):
43
+ name = veri.css("h2::text").get()
44
+ ep_name = veri.css("div.opacity-80::text").get()
45
+ if not ep_name:
46
+ continue
47
+
48
+ ep_name = ep_name.replace(". Sezon", "x").replace(". Bölüm", "").replace("x ", "x")
49
+ title = f"{name} - {ep_name}"
50
+
51
+ ep_req = await self.httpx.get(veri.css("::attr(href)").get())
52
+ ep_secici = Selector(ep_req.text)
53
+ href = self.fix_url(ep_secici.css("a.relative::attr(href)").get())
54
+ poster = self.fix_url(ep_secici.css("img.imgt::attr(onerror)").get().split("= '")[-1].split("';")[0])
55
+
56
+ ana_sayfa.append(
57
+ MainPageResult(
58
+ category = category,
59
+ title = title,
60
+ url = href,
61
+ poster = poster
62
+ )
63
+ )
64
+
65
+ return ana_sayfa
11
66
 
12
67
  async def search(self, query: str) -> list[SearchResult]:
13
68
  ilk_istek = await self.httpx.get(self.main_url)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: KekikStream
3
- Version: 1.2.6
3
+ Version: 1.2.8
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
@@ -5,13 +5,13 @@ KekikStream/CLI/__init__.py,sha256=U6oLq_O7u5y2eHhBnmfhZNns_EqHHJXJmzl8jvZFUNY,2
5
5
  KekikStream/CLI/pypi_kontrol.py,sha256=MchatOwCWCpFBtgt09yag9Rjal9XFyh2W_oVs2p7SNg,1518
6
6
  KekikStream/Core/__init__.py,sha256=4ykq-DBlbbfjGAd5m2AZfuljTLBFYkI8DPLxV03AAcA,673
7
7
  KekikStream/Core/Extractor/ExtractorBase.py,sha256=7dmYh5e1Za5N_pLJrTZRuwFh-CqwGc0YJOBWf5dirjc,1724
8
- KekikStream/Core/Extractor/ExtractorLoader.py,sha256=ecrfz9mYizlENCjbyfjdfnOrQorxQTF4ZFGhPpU6JHk,4193
8
+ KekikStream/Core/Extractor/ExtractorLoader.py,sha256=7uxUXTAuF65KKkmbI6iRiCiUhx-IqrronB7ixhchcTU,4289
9
9
  KekikStream/Core/Extractor/ExtractorManager.py,sha256=4L1H3jiTnf0kTq4W6uS7n95bBYHlKJ8_hh0og8z4erQ,1244
10
10
  KekikStream/Core/Extractor/ExtractorModels.py,sha256=huIcPQ5VIRfMx0LcL5SS1u4dldZbHjzHKEdSEtOPlc0,456
11
11
  KekikStream/Core/Media/MediaHandler.py,sha256=AJNPTXgxWykfDMyZIyGSjWl3Vp0salT8lKDrfAwaga4,6936
12
12
  KekikStream/Core/Media/MediaManager.py,sha256=9ItiUguOkk3wg3YY5uf3mrjfwLPCvggnP8QviX0uiuE,526
13
13
  KekikStream/Core/Plugin/PluginBase.py,sha256=gXD6a0__rAVBv1hbV7qtt4Ot5Wdx15JhF02TMd2QJd0,3179
14
- KekikStream/Core/Plugin/PluginLoader.py,sha256=2UM3gNcEgd7k-FxG-JB5nTIS0K_clzvFtzGjMA_Sx7Q,3379
14
+ KekikStream/Core/Plugin/PluginLoader.py,sha256=yZxMug-OcJ5RBm4fQkoquKrZxcBU7Pvt4IcY-d0WU8g,3393
15
15
  KekikStream/Core/Plugin/PluginManager.py,sha256=CZVg1eegi8vfMfccx0DRV0Box8kXz-aoULTQLgbPbvM,893
16
16
  KekikStream/Core/Plugin/PluginModels.py,sha256=ZZJUXbC0G2k0DU7Wpbf0rwjn7spywpiaLIHE7kLajhk,2533
17
17
  KekikStream/Core/UI/UIManager.py,sha256=T4V_kdTTWa-UDamgLSKa__dWJuzcvRK9NuwBlzU9Bzc,1693
@@ -44,7 +44,7 @@ KekikStream/Extractors/VidMoxy.py,sha256=T1iqfyOasRxoepmuWAmXeVW6E7M1O18KG3264KU
44
44
  KekikStream/Extractors/VideoSeyred.py,sha256=M6QPZ_isX9vM_7LPo-2I_8Cf1vB9awHw8vvzBODtoiQ,1977
45
45
  KekikStream/Plugins/DiziBox.py,sha256=9sz8j49y7PugiTVXkBqoBTJJpfRePxL_7UVGMIVDu14,9337
46
46
  KekikStream/Plugins/DiziYou.py,sha256=1e-NTWgg-yP2lDFzYLevKNMX8Da5pScKyIWRiO2fMb0,5666
47
- KekikStream/Plugins/Dizilla.py,sha256=xDd3xxXFeY-k1L0sYSZIJB6RSrMEckuu8wIfbNdYLJA,4250
47
+ KekikStream/Plugins/Dizilla.py,sha256=s-qhYUzpRazDC-ENUs_acsGhq292LOShZgS24I35cWY,6746
48
48
  KekikStream/Plugins/FilmMakinesi.py,sha256=nDmUk-yVlP_F8r7rYtOGq5zMJrdZCCC_KO5K-edJsKA,2819
49
49
  KekikStream/Plugins/FullHDFilmizlesene.py,sha256=cOl7HVl4pNgHX8IS7ZkAJE6KFiYOQw4MppaAwBTwQlo,3077
50
50
  KekikStream/Plugins/HDFilmCehennemi.py,sha256=xpMwoCqG-HwtAdP3j4DsudqjUuEuAbxZp8fwXWZNn5o,6670
@@ -54,9 +54,9 @@ KekikStream/Plugins/SezonlukDizi.py,sha256=hKzO0Y0ypHEutmUM9c91x8e8vzRQ_zxpnwY0r
54
54
  KekikStream/Plugins/Shorten.py,sha256=arakUY8ampyA408MYzikPp0VSYUvI8scPEkuZefEnyE,8852
55
55
  KekikStream/Plugins/SineWix.py,sha256=yJzIhmWIgX0Bb7F5Q64MFKulLxq7HRy2Ytq2DwJYOYU,7025
56
56
  KekikStream/Plugins/UgurFilm.py,sha256=C9ZIUNBJJfBwgeS5-b7o-Dn07M8aXiNrNzutH6biTXw,2925
57
- kekikstream-1.2.6.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
58
- kekikstream-1.2.6.dist-info/METADATA,sha256=geXOM8geVBpkdOZdob-D9fe__5XvPYxFQV7au6Ybtn8,4508
59
- kekikstream-1.2.6.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
60
- kekikstream-1.2.6.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
61
- kekikstream-1.2.6.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
62
- kekikstream-1.2.6.dist-info/RECORD,,
57
+ kekikstream-1.2.8.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
58
+ kekikstream-1.2.8.dist-info/METADATA,sha256=5QzPcoEXL7CXf5z0Zjg1Js_JP8BTnWQ0pR_nd1IsTPc,4508
59
+ kekikstream-1.2.8.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
60
+ kekikstream-1.2.8.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
61
+ kekikstream-1.2.8.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
62
+ kekikstream-1.2.8.dist-info/RECORD,,