KekikStream 2.0.7__tar.gz → 2.0.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.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VidMoly.py +47 -31
  2. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/PKG-INFO +1 -1
  3. {kekikstream-2.0.7 → kekikstream-2.0.8}/PKG-INFO +1 -1
  4. {kekikstream-2.0.7 → kekikstream-2.0.8}/setup.py +1 -1
  5. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/CLI/__init__.py +0 -0
  6. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/CLI/pypi_kontrol.py +0 -0
  7. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Extractor/ExtractorBase.py +0 -0
  8. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Extractor/ExtractorLoader.py +0 -0
  9. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Extractor/ExtractorManager.py +0 -0
  10. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Extractor/ExtractorModels.py +0 -0
  11. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Extractor/YTDLPCache.py +0 -0
  12. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Media/MediaHandler.py +0 -0
  13. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Media/MediaManager.py +0 -0
  14. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Plugin/PluginBase.py +0 -0
  15. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Plugin/PluginLoader.py +0 -0
  16. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Plugin/PluginManager.py +0 -0
  17. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Plugin/PluginModels.py +0 -0
  18. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/UI/UIManager.py +0 -0
  19. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/__init__.py +0 -0
  20. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/CloseLoad.py +0 -0
  21. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/ContentX.py +0 -0
  22. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/DonilasPlay.py +0 -0
  23. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/DzenRu.py +0 -0
  24. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/ExPlay.py +0 -0
  25. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/FirePlayer.py +0 -0
  26. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/HDPlayerSystem.py +0 -0
  27. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/JetTv.py +0 -0
  28. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/MailRu.py +0 -0
  29. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/MixPlayHD.py +0 -0
  30. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/MixTiger.py +0 -0
  31. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/MolyStream.py +0 -0
  32. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/Odnoklassniki.py +0 -0
  33. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/PeaceMakerst.py +0 -0
  34. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/PixelDrain.py +0 -0
  35. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/PlayerFilmIzle.py +0 -0
  36. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/RapidVid.py +0 -0
  37. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/SetPlay.py +0 -0
  38. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/SetPrime.py +0 -0
  39. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/SibNet.py +0 -0
  40. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/Sobreatsesuyp.py +0 -0
  41. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/TRsTX.py +0 -0
  42. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/TauVideo.py +0 -0
  43. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/TurboImgz.py +0 -0
  44. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/TurkeyPlayer.py +0 -0
  45. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VCTPlay.py +0 -0
  46. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VidHide.py +0 -0
  47. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VidMoxy.py +0 -0
  48. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VidPapi.py +0 -0
  49. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VideoSeyred.py +0 -0
  50. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/YTDLP.py +0 -0
  51. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/YildizKisaFilm.py +0 -0
  52. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/BelgeselX.py +0 -0
  53. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/DiziBox.py +0 -0
  54. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/DiziPal.py +0 -0
  55. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/DiziYou.py +0 -0
  56. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/Dizilla.py +0 -0
  57. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/FilmBip.py +0 -0
  58. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/FilmMakinesi.py +0 -0
  59. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/FilmModu.py +0 -0
  60. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/FullHDFilm.py +0 -0
  61. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
  62. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/HDFilmCehennemi.py +0 -0
  63. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/JetFilmizle.py +0 -0
  64. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/KultFilmler.py +0 -0
  65. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/RecTV.py +0 -0
  66. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/RoketDizi.py +0 -0
  67. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SelcukFlix.py +0 -0
  68. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SetFilmIzle.py +0 -0
  69. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SezonlukDizi.py +0 -0
  70. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SineWix.py +0 -0
  71. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/Sinefy.py +0 -0
  72. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SinemaCX.py +0 -0
  73. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/Sinezy.py +0 -0
  74. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SuperFilmGeldi.py +0 -0
  75. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/UgurFilm.py +0 -0
  76. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/__init__.py +0 -0
  77. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/__main__.py +0 -0
  78. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/requirements.txt +0 -0
  79. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/SOURCES.txt +0 -0
  80. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/dependency_links.txt +0 -0
  81. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/entry_points.txt +0 -0
  82. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/requires.txt +0 -0
  83. {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/top_level.txt +0 -0
  84. {kekikstream-2.0.7 → kekikstream-2.0.8}/LICENSE +0 -0
  85. {kekikstream-2.0.7 → kekikstream-2.0.8}/MANIFEST.in +0 -0
  86. {kekikstream-2.0.7 → kekikstream-2.0.8}/README.md +0 -0
  87. {kekikstream-2.0.7 → kekikstream-2.0.8}/setup.cfg +0 -0
@@ -23,11 +23,11 @@ class VidMoly(ExtractorBase):
23
23
  "Sec-Fetch-Dest" : "iframe",
24
24
  })
25
25
 
26
- if self.main_url.endswith(".me"):
27
- self.main_url = self.main_url.replace(".me", ".net")
26
+ if ".me" in url:
28
27
  url = url.replace(".me", ".net")
29
28
 
30
- response = await self.httpx.get(url)
29
+ # VidMoly bazen redirect ediyor, takip et
30
+ response = await self.httpx.get(url, follow_redirects=True)
31
31
  if "Select number" in response.text:
32
32
  secici = Selector(response.text)
33
33
  response = await self.httpx.post(
@@ -39,21 +39,10 @@ class VidMoly(ExtractorBase):
39
39
  "ts" : secici.css("input[name='ts']::attr(value)").get(),
40
40
  "nonce" : secici.css("input[name='nonce']::attr(value)").get(),
41
41
  "ctok" : secici.css("input[name='ctok']::attr(value)").get()
42
- }
42
+ },
43
+ follow_redirects=True
43
44
  )
44
45
 
45
- script_match = re.search(r"sources:\s*\[(.*?)\],", response.text, re.DOTALL)
46
- script_content = script_match[1] if script_match else None
47
-
48
- if not script_content:
49
- raise ValueError("Gerekli script bulunamadı.")
50
-
51
- # Video kaynaklarını ayrıştır
52
- video_data = self._add_marks(script_content, "file")
53
- try:
54
- video_sources = json.loads(f"[{video_data}]")
55
- except json.JSONDecodeError as hata:
56
- raise ValueError("Video kaynakları ayrıştırılamadı.") from hata
57
46
 
58
47
  # Altyazı kaynaklarını ayrıştır
59
48
  subtitles = []
@@ -72,22 +61,49 @@ class VidMoly(ExtractorBase):
72
61
  for sub in subtitle_sources
73
62
  if sub.get("kind") == "captions"
74
63
  ]
75
- # İlk video kaynağını al
76
- video_url = None
77
- for source in video_sources:
78
- if file_url := source.get("file"):
79
- video_url = file_url
80
- break
81
64
 
82
- if not video_url:
83
- raise ValueError("Video URL bulunamadı.")
84
-
85
- return ExtractResult(
86
- name = self.name,
87
- url = video_url,
88
- referer = self.main_url,
89
- subtitles = subtitles
90
- )
65
+ script_match = re.search(r"sources:\s*\[(.*?)\],", response.text, re.DOTALL)
66
+ if script_match:
67
+ script_content = script_match[1]
68
+ # Video kaynaklarını ayrıştır
69
+ video_data = self._add_marks(script_content, "file")
70
+ try:
71
+ video_sources = json.loads(f"[{video_data}]")
72
+ # İlk video kaynağını al
73
+ for source in video_sources:
74
+ if file_url := source.get("file"):
75
+ return ExtractResult(
76
+ name = self.name,
77
+ url = file_url,
78
+ referer = self.main_url,
79
+ subtitles = subtitles
80
+ )
81
+ except json.JSONDecodeError:
82
+ pass
83
+
84
+ # Fallback: Doğrudan file regex ile ara (Kotlin mantığı)
85
+ # file:"..." veya file: "..."
86
+ if file_match := re.search(r'file\s*:\s*["\']([^"\']+\.m3u8[^"\']*)["\']', response.text):
87
+ return ExtractResult(
88
+ name = self.name,
89
+ url = file_match.group(1),
90
+ referer = self.main_url,
91
+ subtitles = subtitles
92
+ )
93
+
94
+ # Fallback 2: Herhangi bir file (m3u8 olma şartı olmadan ama tercihen)
95
+ if file_match := re.search(r'file\s*:\s*["\']([^"\']+)["\']', response.text):
96
+ url_candidate = file_match.group(1)
97
+ # Resim dosyalarını hariç tut
98
+ if not url_candidate.endswith(('.jpg', '.png', '.jpeg')):
99
+ return ExtractResult(
100
+ name = self.name,
101
+ url = url_candidate,
102
+ referer = self.main_url,
103
+ subtitles = subtitles
104
+ )
105
+
106
+ raise ValueError("Video URL bulunamadı.")
91
107
 
92
108
  def _add_marks(self, text: str, field: str) -> str:
93
109
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 2.0.7
3
+ Version: 2.0.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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 2.0.7
3
+ Version: 2.0.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.0.7",
9
+ version = "2.0.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