KekikStream 1.8.4__py3-none-any.whl → 1.8.5__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.
@@ -1,7 +1,6 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
3
  from abc import ABC, abstractmethod
4
- from curl_cffi import AsyncSession
5
4
  from cloudscraper import CloudScraper
6
5
  from httpx import AsyncClient
7
6
  from typing import Optional
@@ -12,7 +11,6 @@ class ExtractorBase(ABC):
12
11
  # Çıkarıcının temel özellikleri
13
12
  name = "Extractor"
14
13
  main_url = ""
15
- requires_cffi = False
16
14
 
17
15
  def __init__(self):
18
16
  # cloudscraper - for bypassing Cloudflare
@@ -21,19 +19,11 @@ class ExtractorBase(ABC):
21
19
  # httpx - lightweight and safe for most HTTP requests
22
20
  self.httpx = AsyncClient(
23
21
  timeout = 3,
24
- follow_redirects = True,
22
+ follow_redirects = True
25
23
  )
26
24
  self.httpx.headers.update(self.cloudscraper.headers)
27
25
  self.httpx.cookies.update(self.cloudscraper.cookies)
28
26
 
29
- # curl_cffi - only initialize if needed for anti-bot bypass
30
- self.cffi = None
31
-
32
- if self.requires_cffi:
33
- self.cffi = AsyncSession(impersonate="firefox135")
34
- self.cffi.cookies.update(self.cloudscraper.cookies)
35
- self.cffi.headers.update({"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:135.0) Gecko/20100101 Firefox/135.0"})
36
-
37
27
  def can_handle_url(self, url: str) -> bool:
38
28
  # URL'nin bu çıkarıcı tarafından işlenip işlenemeyeceğini kontrol et
39
29
  return self.main_url in url
@@ -44,10 +34,8 @@ class ExtractorBase(ABC):
44
34
  pass
45
35
 
46
36
  async def close(self):
47
- """Close both HTTP clients if they exist."""
37
+ """Close HTTP client."""
48
38
  await self.httpx.aclose()
49
- if self.cffi:
50
- await self.cffi.close()
51
39
 
52
40
  def fix_url(self, url: str) -> str:
53
41
  # Eksik URL'leri düzelt ve tam URL formatına çevir
@@ -1,7 +1,6 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
3
  from abc import ABC, abstractmethod
4
- from curl_cffi import AsyncSession
5
4
  from cloudscraper import CloudScraper
6
5
  from httpx import AsyncClient
7
6
  from .PluginModels import MainPageResult, SearchResult, MovieInfo
@@ -17,8 +16,6 @@ class PluginBase(ABC):
17
16
  favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
18
17
  description = "No description provided."
19
18
 
20
- requires_cffi = False
21
-
22
19
  main_page = {}
23
20
 
24
21
  async def url_update(self, new_url: str):
@@ -33,19 +30,11 @@ class PluginBase(ABC):
33
30
  # httpx - lightweight and safe for most HTTP requests
34
31
  self.httpx = AsyncClient(
35
32
  timeout = 3,
36
- follow_redirects = True,
33
+ follow_redirects = True
37
34
  )
38
35
  self.httpx.headers.update(self.cloudscraper.headers)
39
36
  self.httpx.cookies.update(self.cloudscraper.cookies)
40
37
 
41
- # curl_cffi - only initialize if needed for anti-bot bypass
42
- self.cffi = None
43
-
44
- if self.requires_cffi:
45
- self.cffi = AsyncSession(impersonate="firefox135")
46
- self.cffi.cookies.update(self.cloudscraper.cookies)
47
- self.cffi.headers.update({"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:135.0) Gecko/20100101 Firefox/135.0"})
48
-
49
38
  self.media_handler = MediaHandler()
50
39
  self.ex_manager = ExtractorManager()
51
40
 
@@ -90,10 +79,8 @@ class PluginBase(ABC):
90
79
  pass
91
80
 
92
81
  async def close(self):
93
- """Close both HTTP clients if they exist."""
82
+ """Close HTTP client."""
94
83
  await self.httpx.aclose()
95
- if self.cffi:
96
- await self.cffi.close()
97
84
 
98
85
  def fix_url(self, url: str) -> str:
99
86
  if not url:
@@ -12,8 +12,7 @@ class HDFilmCehennemi(PluginBase):
12
12
  favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
13
13
  description = "Türkiye'nin en hızlı hd film izleme sitesi"
14
14
 
15
- # Bu site domain değişikliği yapıyor ve potansiyel anti-bot koruması var
16
- requires_cffi = True
15
+
17
16
 
18
17
  main_page = {
19
18
  f"{main_url}" : "Yeni Eklenen Filmler",
@@ -33,7 +32,7 @@ class HDFilmCehennemi(PluginBase):
33
32
  }
34
33
 
35
34
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
36
- istek = await self.cffi.get(f"{url}", allow_redirects=True)
35
+ istek = await self.httpx.get(f"{url}", follow_redirects=True)
37
36
  secici = Selector(istek.text)
38
37
 
39
38
  return [
@@ -47,7 +46,7 @@ class HDFilmCehennemi(PluginBase):
47
46
  ]
48
47
 
49
48
  async def search(self, query: str) -> list[SearchResult]:
50
- istek = await self.cffi.get(
49
+ istek = await self.httpx.get(
51
50
  url = f"{self.main_url}/search/?q={query}",
52
51
  headers = {
53
52
  "Referer" : f"{self.main_url}/",
@@ -75,7 +74,7 @@ class HDFilmCehennemi(PluginBase):
75
74
  return results
76
75
 
77
76
  async def load_item(self, url: str) -> MovieInfo:
78
- istek = await self.cffi.get(url, headers = {"Referer": f"{self.main_url}/"})
77
+ istek = await self.httpx.get(url, headers = {"Referer": f"{self.main_url}/"})
79
78
  secici = Selector(istek.text)
80
79
 
81
80
  title = secici.css("h1.section-title::text").get().strip()
@@ -111,7 +110,7 @@ class HDFilmCehennemi(PluginBase):
111
110
  async def cehennempass(self, video_id: str) -> list[dict]:
112
111
  results = []
113
112
 
114
- istek = await self.cffi.post(
113
+ istek = await self.httpx.post(
115
114
  url = "https://cehennempass.pw/process_quality_selection.php",
116
115
  headers = {
117
116
  "Referer" : f"https://cehennempass.pw/download/{video_id}",
@@ -128,7 +127,7 @@ class HDFilmCehennemi(PluginBase):
128
127
  "referer" : f"https://cehennempass.pw/download/{video_id}"
129
128
  })
130
129
 
131
- istek = await self.cffi.post(
130
+ istek = await self.httpx.post(
132
131
  url = "https://cehennempass.pw/process_quality_selection.php",
133
132
  headers = {
134
133
  "Referer" : f"https://cehennempass.pw/download/{video_id}",
@@ -148,8 +147,8 @@ class HDFilmCehennemi(PluginBase):
148
147
  return results
149
148
 
150
149
  async def invoke_local_source(self, iframe: str, source: str, url: str):
151
- self.cffi.headers.update({"Referer": f"{self.main_url}/"})
152
- istek = await self.cffi.get(iframe)
150
+ self.httpx.headers.update({"Referer": f"{self.main_url}/"})
151
+ istek = await self.httpx.get(iframe)
153
152
 
154
153
  try:
155
154
  eval_func = re.compile(r'\s*(eval\(function[\s\S].*)\s*').findall(istek.text)[0]
@@ -178,7 +177,7 @@ class HDFilmCehennemi(PluginBase):
178
177
  }]
179
178
 
180
179
  async def load_links(self, url: str) -> list[dict]:
181
- istek = await self.cffi.get(url)
180
+ istek = await self.httpx.get(url)
182
181
  secici = Selector(istek.text)
183
182
 
184
183
  results = []
@@ -189,7 +188,7 @@ class HDFilmCehennemi(PluginBase):
189
188
  source = f"{link.css('::text').get().replace('(HDrip Xbet)', '').strip()} {lang_code}"
190
189
  video_id = link.css("::attr(data-video)").get()
191
190
 
192
- api_get = await self.cffi.get(
191
+ api_get = await self.httpx.get(
193
192
  url = f"{self.main_url}/video/{video_id}/",
194
193
  headers = {
195
194
  "Content-Type" : "application/json",
@@ -11,8 +11,7 @@ class RoketDizi(PluginBase):
11
11
  favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
12
12
  description = "Türkiye'nin en tatlış yabancı dizi izleme sitesi. Türkçe dublaj, altyazılı, eski ve yeni yabancı dizilerin yanı sıra kore (asya) dizileri izleyebilirsiniz."
13
13
 
14
- # Domain doğrulama ve anti-bot mekanizmaları var
15
- requires_cffi = True
14
+
16
15
 
17
16
  main_page = {
18
17
  "dizi/tur/aksiyon" : "Aksiyon",
@@ -27,7 +26,7 @@ class RoketDizi(PluginBase):
27
26
 
28
27
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
29
28
  full_url = f"{self.main_url}/{url}?&page={page}"
30
- resp = await self.cffi.get(full_url)
29
+ resp = await self.httpx.get(full_url)
31
30
  sel = Selector(resp.text)
32
31
 
33
32
  results = []
@@ -55,7 +54,7 @@ class RoketDizi(PluginBase):
55
54
  "Referer" : f"{self.main_url}/",
56
55
  }
57
56
 
58
- search_req = await self.cffi.post(post_url, headers=headers)
57
+ search_req = await self.httpx.post(post_url, headers=headers)
59
58
 
60
59
  try:
61
60
  resp_json = search_req.json()
@@ -99,7 +98,7 @@ class RoketDizi(PluginBase):
99
98
 
100
99
  async def load_item(self, url: str) -> SeriesInfo:
101
100
  # Note: Handling both Movie and Series logic in one, returning SeriesInfo generally or MovieInfo
102
- resp = await self.cffi.get(url)
101
+ resp = await self.httpx.get(url)
103
102
  sel = Selector(resp.text)
104
103
 
105
104
  title = sel.css("h1.text-white::text").get()
@@ -183,7 +182,7 @@ class RoketDizi(PluginBase):
183
182
  )
184
183
 
185
184
  async def load_links(self, url: str) -> list[dict]:
186
- resp = await self.cffi.get(url)
185
+ resp = await self.httpx.get(url)
187
186
  sel = Selector(resp.text)
188
187
 
189
188
  next_data = sel.css("script#__NEXT_DATA__::text").get()
@@ -1,10 +1,9 @@
1
1
  setuptools
2
2
  wheel
3
-
4
3
  Kekik
5
- curl-cffi
6
- cloudscraper
7
4
  httpx
5
+ cloudscraper
8
6
  parsel
9
7
  pydantic
10
8
  InquirerPy
9
+ yt-dlp
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 1.8.4
3
+ Version: 1.8.5
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
@@ -17,7 +17,6 @@ Requires-Dist: setuptools
17
17
  Requires-Dist: wheel
18
18
  Requires-Dist: Kekik
19
19
  Requires-Dist: httpx
20
- Requires-Dist: curl-cffi
21
20
  Requires-Dist: cloudscraper
22
21
  Requires-Dist: parsel
23
22
  Requires-Dist: pydantic
@@ -1,16 +1,16 @@
1
1
  KekikStream/__init__.py,sha256=JcSKsLRyJM5ZPNHq4DLSaj4FzOjxSp8M8JuM3YN8Ye4,13456
2
2
  KekikStream/__main__.py,sha256=B81dQoeGEb-T5Sycs3eNAmW7unvx0Mef0syCjs4nPds,137
3
- KekikStream/requirements.txt,sha256=ENISGfW7D7abbqEh-1Yp2BaQdFJyYIJ0p8zNTUscuwU,80
3
+ KekikStream/requirements.txt,sha256=0fO-7byqgLMr4NyJO7fQBFOnLv0zcAeqk7tLhHXqonk,76
4
4
  KekikStream/CLI/__init__.py,sha256=U6oLq_O7u5y2eHhBnmfhZNns_EqHHJXJmzl8jvZFUNY,230
5
5
  KekikStream/CLI/pypi_kontrol.py,sha256=q6fNs6EKJDc5VuUFig9DBzLzNPp_kMD1vOVgLElcii8,1487
6
6
  KekikStream/Core/__init__.py,sha256=ar2MZQF83ryfLfydEXcfjdwNe4Too_HT6bP-D_4TopA,710
7
- KekikStream/Core/Extractor/ExtractorBase.py,sha256=0GO8u5YzsboYMLk6kmSJmzqLZAbX_HQq6so8-2lBuqQ,2177
7
+ KekikStream/Core/Extractor/ExtractorBase.py,sha256=Yj7CGvm2ZKxlvuUkZu0X1Pl0JMH250W7hyqv09duTmE,1637
8
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=Qj_gbIeGRewaZXNfYkTi4FFRRq6XBOc0HS0tXGDwajI,445
11
11
  KekikStream/Core/Media/MediaHandler.py,sha256=taLA3rXsN_VfNn7nIc_OZKaaif8kuEZznhH_EaOiQQk,6874
12
12
  KekikStream/Core/Media/MediaManager.py,sha256=AaUq2D7JSJIphjoAj2fjLOJjswm7Qf5hjYCbBdrbnDU,438
13
- KekikStream/Core/Plugin/PluginBase.py,sha256=hlvErfJd_11wuhpIzI0Bfa0y3R4g5xM4VakSQJ-54mY,4425
13
+ KekikStream/Core/Plugin/PluginBase.py,sha256=uzJb8DqJfXOteteSBhG9QWUrFgb4JTByV_GbODz-9gs,3872
14
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=Yvx-6Fkn8QCIcuqAkFbCP5EJcq3XBkK_P8S0tRNhS6E,2476
@@ -64,11 +64,11 @@ KekikStream/Plugins/FilmMakinesi.py,sha256=izPKGbqQuA6AmLAnFjlBoe8iwnNOrr0Pcy5L2
64
64
  KekikStream/Plugins/FilmModu.py,sha256=b27hchMoYZwG3I-kM1sveW7rHKOF5OuepdjPgKIehEM,6706
65
65
  KekikStream/Plugins/FullHDFilm.py,sha256=kkb-JtWf23uiEzP9f_uds0tROYiKOyxcX0D-jNtQFi0,7005
66
66
  KekikStream/Plugins/FullHDFilmizlesene.py,sha256=FAacwtXo72DIl_1bHWgHPIxqmqBJAVPtNQ3yIZPYjlU,6152
67
- KekikStream/Plugins/HDFilmCehennemi.py,sha256=iPNAdwB5P4yVG3UJOfOad9NMeO8JNhov84JoZp_nLK0,9640
67
+ KekikStream/Plugins/HDFilmCehennemi.py,sha256=D2VvgNvCcHfjkitzSfA19OFp-mI0sgUm6OSVej0ZgTY,9544
68
68
  KekikStream/Plugins/JetFilmizle.py,sha256=3tcx4ZT7oQs_xolhQeiqgirpWtknBjP7J7Qgy0bvIeM,5963
69
69
  KekikStream/Plugins/KultFilmler.py,sha256=VZET3RUoOVYKE-C2YbkMW8oNcxz6zE2pR7a3z-B4nD4,8987
70
70
  KekikStream/Plugins/RecTV.py,sha256=dF3Ogf7KE_zpfLQRjVcEJQMuWtBtHo6iB73_ECQEJ58,7544
71
- KekikStream/Plugins/RoketDizi.py,sha256=C6ID2sfEwf0Tw8_tO-pc1nx8TB0Ii_rCVRzlHA7E-oA,8547
71
+ KekikStream/Plugins/RoketDizi.py,sha256=isVijJ6YRtsBQ6DVB2K3n6uV-1GXZahujLF7IWvBrqs,8472
72
72
  KekikStream/Plugins/SelcukFlix.py,sha256=WYVtGMxngpqrXk7PX_B4ya6Pji7dOjQsXoukk30f2d0,12744
73
73
  KekikStream/Plugins/SezonlukDizi.py,sha256=dT2xPPkdaYV43qsL4Le_5Yel8eoPkHtnXIOXqz-Ya-c,6326
74
74
  KekikStream/Plugins/SineWix.py,sha256=xdTeg8GHUpyZsY6EQ5I1ZIT4-lB_qwBwvHQVmdMPpEI,7364
@@ -77,9 +77,9 @@ KekikStream/Plugins/SinemaCX.py,sha256=DUvYa7J4a2D5ivLO_sQiaStoV5FDxmz8onJyFwAid
77
77
  KekikStream/Plugins/Sinezy.py,sha256=EttAZogKoKMP8RP_X1fSfi8vVxA2RWizwgnLkmnhERQ,5675
78
78
  KekikStream/Plugins/SuperFilmGeldi.py,sha256=Ohm21BPsJH_S1tx5i2APEgAOD25k2NiwRP7rSgAKvRs,5289
79
79
  KekikStream/Plugins/UgurFilm.py,sha256=eKGzmSi8k_QbXnYPWXZRdmCxxc32zZh4rynmdxCbm1o,4832
80
- kekikstream-1.8.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
81
- kekikstream-1.8.4.dist-info/METADATA,sha256=dmWG5qnauBIV5QUU-wFXlsHcF35UeyN-IvIJ35H8TMQ,4983
82
- kekikstream-1.8.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
83
- kekikstream-1.8.4.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
84
- kekikstream-1.8.4.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
85
- kekikstream-1.8.4.dist-info/RECORD,,
80
+ kekikstream-1.8.5.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
81
+ kekikstream-1.8.5.dist-info/METADATA,sha256=PA0T8ikorAFyFbYMnmhrz3dJIpkHYUQAc5DSXtvx0ek,4958
82
+ kekikstream-1.8.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
83
+ kekikstream-1.8.5.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
84
+ kekikstream-1.8.5.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
85
+ kekikstream-1.8.5.dist-info/RECORD,,