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.
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VidMoly.py +47 -31
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/PKG-INFO +1 -1
- {kekikstream-2.0.7 → kekikstream-2.0.8}/PKG-INFO +1 -1
- {kekikstream-2.0.7 → kekikstream-2.0.8}/setup.py +1 -1
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/CLI/__init__.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/CLI/pypi_kontrol.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Extractor/ExtractorBase.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Extractor/ExtractorLoader.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Extractor/ExtractorManager.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Extractor/ExtractorModels.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Extractor/YTDLPCache.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Media/MediaHandler.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Media/MediaManager.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Plugin/PluginBase.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Plugin/PluginLoader.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Plugin/PluginManager.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/Plugin/PluginModels.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/UI/UIManager.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Core/__init__.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/CloseLoad.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/ContentX.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/DonilasPlay.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/DzenRu.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/ExPlay.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/FirePlayer.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/HDPlayerSystem.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/JetTv.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/MailRu.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/MixPlayHD.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/MixTiger.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/MolyStream.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/Odnoklassniki.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/PeaceMakerst.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/PixelDrain.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/PlayerFilmIzle.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/RapidVid.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/SetPlay.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/SetPrime.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/SibNet.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/Sobreatsesuyp.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/TRsTX.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/TauVideo.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/TurboImgz.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/TurkeyPlayer.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VCTPlay.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VidHide.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VidMoxy.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VidPapi.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/VideoSeyred.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/YTDLP.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Extractors/YildizKisaFilm.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/BelgeselX.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/DiziBox.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/DiziPal.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/DiziYou.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/Dizilla.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/FilmBip.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/FilmMakinesi.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/FilmModu.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/FullHDFilm.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/HDFilmCehennemi.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/JetFilmizle.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/KultFilmler.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/RecTV.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/RoketDizi.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SelcukFlix.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SetFilmIzle.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SezonlukDizi.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SineWix.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/Sinefy.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SinemaCX.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/Sinezy.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/SuperFilmGeldi.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/Plugins/UgurFilm.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/__init__.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/__main__.py +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream/requirements.txt +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/SOURCES.txt +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/dependency_links.txt +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/entry_points.txt +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/requires.txt +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/KekikStream.egg-info/top_level.txt +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/LICENSE +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/MANIFEST.in +0 -0
- {kekikstream-2.0.7 → kekikstream-2.0.8}/README.md +0 -0
- {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
|
|
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
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|