KekikStream 2.1.7__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.
@@ -0,0 +1,78 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Core import ExtractorBase, ExtractResult
4
+ from Kekik.Sifreleme import Packer
5
+ from parsel import Selector
6
+ import re
7
+
8
+ class Filemoon(ExtractorBase):
9
+ name = "Filemoon"
10
+ main_url = "https://filemoon.to"
11
+
12
+ # Filemoon'un farklı domainlerini destekle
13
+ supported_domains = [
14
+ "filemoon.to",
15
+ "filemoon.in",
16
+ "filemoon.sx",
17
+ "filemoon.nl",
18
+ "filemoon.com"
19
+ ]
20
+
21
+ def can_handle_url(self, url: str) -> bool:
22
+ return any(domain in url for domain in self.supported_domains)
23
+
24
+ async def extract(self, url: str, referer: str = None) -> ExtractResult:
25
+ headers = {
26
+ "Referer" : url,
27
+ "Sec-Fetch-Dest" : "iframe",
28
+ "Sec-Fetch-Mode" : "navigate",
29
+ "Sec-Fetch-Site" : "cross-site",
30
+ }
31
+ self.httpx.headers.update(headers)
32
+
33
+ # İlk sayfayı al
34
+ istek = await self.httpx.get(url)
35
+ response = istek.text
36
+ secici = Selector(response)
37
+
38
+ # Eğer iframe varsa, iframe'e git
39
+ iframe_src = secici.css("iframe::attr(src)").get()
40
+ if iframe_src:
41
+ iframe_url = self.fix_url(iframe_src)
42
+ self.httpx.headers.update({
43
+ "Accept-Language" : "en-US,en;q=0.5",
44
+ "Sec-Fetch-Dest" : "iframe"
45
+ })
46
+ istek = await self.httpx.get(iframe_url)
47
+ response = istek.text
48
+
49
+ # Packed script'i bul ve unpack et
50
+ m3u8_url = None
51
+
52
+ if Packer.detect_packed(response):
53
+ try:
54
+ unpacked = Packer.unpack(response)
55
+ # sources:[{file:"..." pattern'ını ara
56
+ if match := re.search(r'sources:\s*\[\s*\{\s*file:\s*"([^"]+)"', unpacked):
57
+ m3u8_url = match.group(1)
58
+ elif match := re.search(r'file:\s*"([^"]*?\.m3u8[^"]*)"', unpacked):
59
+ m3u8_url = match.group(1)
60
+ except Exception:
61
+ pass
62
+
63
+ # Fallback: Doğrudan response'ta ara
64
+ if not m3u8_url:
65
+ if match := re.search(r'sources:\s*\[\s*\{\s*file:\s*"([^"]+)"', response):
66
+ m3u8_url = match.group(1)
67
+ elif match := re.search(r'file:\s*"([^"]*?\.m3u8[^"]*)"', response):
68
+ m3u8_url = match.group(1)
69
+
70
+ if not m3u8_url:
71
+ raise ValueError(f"Filemoon: Video URL bulunamadı. {url}")
72
+
73
+ return ExtractResult(
74
+ name = self.name,
75
+ url = self.fix_url(m3u8_url),
76
+ referer = f"{self.main_url}/",
77
+ subtitles = []
78
+ )
@@ -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 ExtractorBase, ExtractResult, Subtitle
4
- from Kekik.Sifreleme import Packer, HexCodec
4
+ from Kekik.Sifreleme import Packer, HexCodec, StreamDecoder
5
5
  import re, base64
6
6
 
7
7
  class RapidVid(ExtractorBase):
@@ -39,15 +39,25 @@ class RapidVid(ExtractorBase):
39
39
  subtitles.append(Subtitle(name=decoded_lang, url=sub_url.replace("\\", "")))
40
40
 
41
41
  try:
42
+ decoded_url = None
43
+
44
+ # Method 1: file": "..." pattern (HexCodec)
42
45
  if extracted_value := re.search(r'file": "(.*)",', istek.text):
43
46
  escaped_hex = extracted_value[1]
44
47
  decoded_url = HexCodec.decode(escaped_hex)
45
- else:
46
- av_encoded = re.search(r"av\('([^']+)'\)", istek.text)
47
- if not av_encoded:
48
- raise ValueError("AV encoding not found.")
49
48
 
49
+ # Method 2: av('...') pattern
50
+ elif av_encoded := re.search(r"av\('([^']+)'\)", istek.text):
50
51
  decoded_url = self.decode_secret(av_encoded[1])
52
+
53
+ # Method 3: Packed script with dc_* function (StreamDecoder)
54
+ elif Packer.detect_packed(istek.text):
55
+ unpacked = Packer.unpack(istek.text)
56
+ decoded_url = StreamDecoder.extract_stream_url(unpacked)
57
+
58
+ if not decoded_url:
59
+ raise ValueError("No valid video URL pattern found.")
60
+
51
61
  except Exception as hata:
52
62
  raise RuntimeError(f"Extraction failed: {hata}") from hata
53
63
 
@@ -9,6 +9,12 @@ class VidHide(ExtractorBase):
9
9
  name = "VidHide"
10
10
  main_url = "https://vidhidepro.com"
11
11
 
12
+ # Birden fazla domain destekle
13
+ supported_domains = ["vidhidepro.com", "vidhide.com", "rubyvidhub.com"]
14
+
15
+ def can_handle_url(self, url: str) -> bool:
16
+ return any(domain in url for domain in self.supported_domains)
17
+
12
18
  def get_embed_url(self, url: str) -> str:
13
19
  if "/d/" in url:
14
20
  return url.replace("/d/", "/v/")
@@ -20,6 +26,9 @@ class VidHide(ExtractorBase):
20
26
  return url.replace("/f/", "/v/")
21
27
 
22
28
  async def extract(self, url: str, referer: str = None) -> ExtractResult:
29
+ # Dinamik base URL kullan
30
+ base_url = self.get_base_url(url)
31
+
23
32
  if referer:
24
33
  self.httpx.headers.update({"Referer": referer})
25
34
 
@@ -27,7 +36,7 @@ class VidHide(ExtractorBase):
27
36
  "Sec-Fetch-Dest" : "empty",
28
37
  "Sec-Fetch-Mode" : "cors",
29
38
  "Sec-Fetch-Site" : "cross-site",
30
- "Origin" : self.main_url,
39
+ "Origin" : base_url,
31
40
  })
32
41
 
33
42
  embed_url = self.get_embed_url(url)
@@ -66,7 +75,7 @@ class VidHide(ExtractorBase):
66
75
  return ExtractResult(
67
76
  name = self.name,
68
77
  url = self.fix_url(m3u8_url),
69
- referer = f"{self.main_url}/",
78
+ referer = f"{base_url}/",
70
79
  user_agent = self.httpx.headers.get("User-Agent", ""),
71
80
  subtitles = []
72
81
  )
@@ -20,6 +20,23 @@ class SezonlukDizi(PluginBase):
20
20
  f"{main_url}/diziler.asp?siralama_tipi=id&kat=4&s=" : "Animasyonlar",
21
21
  f"{main_url}/diziler.asp?siralama_tipi=id&kat=5&s=" : "Animeler",
22
22
  f"{main_url}/diziler.asp?siralama_tipi=id&kat=6&s=" : "Belgeseller",
23
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=aile&s=" : "Aile",
24
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=aksiyon&s=" : "Aksiyon",
25
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=bilimkurgu&s=" : "Bilim Kurgu",
26
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=biyografik&s=" : "Biyografi",
27
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=dram&s=" : "Dram",
28
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=fantastik&s=" : "Fantastik",
29
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=gerilim&s=" : "Gerilim",
30
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=gizem&s=" : "Gizem",
31
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=korku&s=" : "Korku",
32
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=komedi&s=" : "Komedi",
33
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=macera&s=" : "Macera",
34
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=muzikal&s=" : "Müzikal",
35
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=suc&s=" : "Suç",
36
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=romantik&s=" : "Romantik",
37
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=savas&s=" : "Savaş",
38
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=tarihi&s=" : "Tarihi",
39
+ f"{main_url}/diziler.asp?siralama_tipi=id&tur=western&s=" : "Western"
23
40
  }
24
41
 
25
42
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 2.1.7
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
@@ -21,6 +21,7 @@ KekikStream/Extractors/ContentX.py,sha256=x0j67e1OAw4L1m7ejUTyiIxqr1EhvpjaA_0U-s
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,7 +42,7 @@ 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
@@ -65,16 +66,16 @@ KekikStream/Plugins/RecTV.py,sha256=Nj4AdeetPMzvZ-VKUdUGhBC1SiFSBRYRebODgE2UeI8,
65
66
  KekikStream/Plugins/RoketDizi.py,sha256=7cP6935unhrn_yDt0hsLoW3nboX3WUD0P2DqqRny3_M,8568
66
67
  KekikStream/Plugins/SelcukFlix.py,sha256=WKMsZpVVdHn_zW69xxhAuIP7OhAPbPFxFRWzGzHBgaE,13601
67
68
  KekikStream/Plugins/SetFilmIzle.py,sha256=EcoHSacJO9bvzA9lZZzDZAwAhXfaDstI4M4C3YOwvEU,10113
68
- KekikStream/Plugins/SezonlukDizi.py,sha256=rSxXcJoCqr9wDfIW9xyfAk0Ud73pf-cEmJuJ31M9MKw,7071
69
+ KekikStream/Plugins/SezonlukDizi.py,sha256=7N4S8ikA4IzHszD5WaXAUESAVfHDKSnMQeX4iQFP3KY,8457
69
70
  KekikStream/Plugins/SineWix.py,sha256=z0r90lggAugEWE1g9vg8gZsInBObUZPnVFQwq7GYmJs,7052
70
71
  KekikStream/Plugins/Sinefy.py,sha256=Ogw0-qjROz8T0EkV1jwbOvz0WM4FN9D24bNrJmi314k,9998
71
72
  KekikStream/Plugins/SinemaCX.py,sha256=aujqCWPGZHcRqKcMFlZYEwMonj0C_UQ_J4ZqCyF59pU,7492
72
73
  KekikStream/Plugins/Sinezy.py,sha256=lFOfbMwxzP6IkhPZ_C3ZWGrgwThSk58pYQAD61rCJnM,6128
73
74
  KekikStream/Plugins/SuperFilmGeldi.py,sha256=dqU1IJHcTPU9zlnA9rSKsX0ehpBYSgDuz6eSlCCop8k,6044
74
75
  KekikStream/Plugins/UgurFilm.py,sha256=TlMDy3tSfkEUy_ziIdCkgnfmoRtVdXEv8m4kjKeAWrE,4696
75
- kekikstream-2.1.7.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
76
- kekikstream-2.1.7.dist-info/METADATA,sha256=-rH6IXawYy_VoHlNrY5YZh4ounZYSKX7o952j4nq97w,10254
77
- kekikstream-2.1.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
78
- kekikstream-2.1.7.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
79
- kekikstream-2.1.7.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
80
- kekikstream-2.1.7.dist-info/RECORD,,
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,,