KekikStream 2.1.7__tar.gz → 2.1.8__tar.gz

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 (87) hide show
  1. kekikstream-2.1.8/KekikStream/Extractors/Filemoon.py +78 -0
  2. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/RapidVid.py +15 -5
  3. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/VidHide.py +11 -2
  4. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream.egg-info/PKG-INFO +1 -1
  5. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream.egg-info/SOURCES.txt +1 -0
  6. {kekikstream-2.1.7 → kekikstream-2.1.8}/PKG-INFO +1 -1
  7. {kekikstream-2.1.7 → kekikstream-2.1.8}/setup.py +1 -1
  8. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/CLI/__init__.py +0 -0
  9. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/CLI/pypi_kontrol.py +0 -0
  10. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Extractor/ExtractorBase.py +0 -0
  11. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Extractor/ExtractorLoader.py +0 -0
  12. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Extractor/ExtractorManager.py +0 -0
  13. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Extractor/ExtractorModels.py +0 -0
  14. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Extractor/YTDLPCache.py +0 -0
  15. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Media/MediaHandler.py +0 -0
  16. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Media/MediaManager.py +0 -0
  17. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Plugin/PluginBase.py +0 -0
  18. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Plugin/PluginLoader.py +0 -0
  19. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Plugin/PluginManager.py +0 -0
  20. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/Plugin/PluginModels.py +0 -0
  21. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/UI/UIManager.py +0 -0
  22. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Core/__init__.py +0 -0
  23. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/CloseLoad.py +0 -0
  24. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/ContentX.py +0 -0
  25. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/DonilasPlay.py +0 -0
  26. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/DzenRu.py +0 -0
  27. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/ExPlay.py +0 -0
  28. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/HDPlayerSystem.py +0 -0
  29. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/JetTv.py +0 -0
  30. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/MailRu.py +0 -0
  31. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/MixPlayHD.py +0 -0
  32. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/MixTiger.py +0 -0
  33. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/MolyStream.py +0 -0
  34. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/Odnoklassniki.py +0 -0
  35. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/PeaceMakerst.py +0 -0
  36. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/PixelDrain.py +0 -0
  37. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/PlayerFilmIzle.py +0 -0
  38. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/SetPlay.py +0 -0
  39. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/SetPrime.py +0 -0
  40. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/SibNet.py +0 -0
  41. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/Sobreatsesuyp.py +0 -0
  42. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/TRsTX.py +0 -0
  43. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/TauVideo.py +0 -0
  44. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/TurboImgz.py +0 -0
  45. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/TurkeyPlayer.py +0 -0
  46. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/VCTPlay.py +0 -0
  47. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/VidMoly.py +0 -0
  48. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/VidMoxy.py +0 -0
  49. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/VidPapi.py +0 -0
  50. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/VideoSeyred.py +0 -0
  51. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/YTDLP.py +0 -0
  52. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Extractors/YildizKisaFilm.py +0 -0
  53. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/BelgeselX.py +0 -0
  54. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/DiziBox.py +0 -0
  55. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/DiziPal.py +0 -0
  56. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/DiziYou.py +0 -0
  57. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/Dizilla.py +0 -0
  58. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/FilmBip.py +0 -0
  59. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/FilmMakinesi.py +0 -0
  60. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/FilmModu.py +0 -0
  61. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/FullHDFilm.py +0 -0
  62. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
  63. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/HDFilmCehennemi.py +0 -0
  64. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/JetFilmizle.py +0 -0
  65. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/KultFilmler.py +0 -0
  66. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/RecTV.py +0 -0
  67. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/RoketDizi.py +0 -0
  68. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/SelcukFlix.py +0 -0
  69. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/SetFilmIzle.py +0 -0
  70. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/SezonlukDizi.py +0 -0
  71. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/SineWix.py +0 -0
  72. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/Sinefy.py +0 -0
  73. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/SinemaCX.py +0 -0
  74. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/Sinezy.py +0 -0
  75. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/SuperFilmGeldi.py +0 -0
  76. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/Plugins/UgurFilm.py +0 -0
  77. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/__init__.py +0 -0
  78. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/__main__.py +0 -0
  79. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream/requirements.txt +0 -0
  80. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream.egg-info/dependency_links.txt +0 -0
  81. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream.egg-info/entry_points.txt +0 -0
  82. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream.egg-info/requires.txt +0 -0
  83. {kekikstream-2.1.7 → kekikstream-2.1.8}/KekikStream.egg-info/top_level.txt +0 -0
  84. {kekikstream-2.1.7 → kekikstream-2.1.8}/LICENSE +0 -0
  85. {kekikstream-2.1.7 → kekikstream-2.1.8}/MANIFEST.in +0 -0
  86. {kekikstream-2.1.7 → kekikstream-2.1.8}/README.md +0 -0
  87. {kekikstream-2.1.7 → kekikstream-2.1.8}/setup.cfg +0 -0
@@ -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
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 2.1.7
3
+ Version: 2.1.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
@@ -31,6 +31,7 @@ KekikStream/Extractors/ContentX.py
31
31
  KekikStream/Extractors/DonilasPlay.py
32
32
  KekikStream/Extractors/DzenRu.py
33
33
  KekikStream/Extractors/ExPlay.py
34
+ KekikStream/Extractors/Filemoon.py
34
35
  KekikStream/Extractors/HDPlayerSystem.py
35
36
  KekikStream/Extractors/JetTv.py
36
37
  KekikStream/Extractors/MailRu.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 2.1.7
3
+ Version: 2.1.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
@@ -6,7 +6,7 @@ from io import open
6
6
  setup(
7
7
  # ? Genel Bilgiler
8
8
  name = "KekikStream",
9
- version = "2.1.7",
9
+ version = "2.1.8",
10
10
  url = "https://github.com/keyiflerolsun/KekikStream",
11
11
  description = "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ı",
12
12
  keywords = ["KekikStream", "KekikAkademi", "keyiflerolsun"],
File without changes
File without changes
File without changes
File without changes