KekikStream 2.5.6__tar.gz → 2.5.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.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/HotStream.py +7 -2
- kekikstream-2.5.8/KekikStream/Extractors/LuciferPlays.py +65 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/FilmciBaba.py +3 -3
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/JetFilmizle.py +1 -1
- kekikstream-2.5.8/KekikStream/Plugins/RealFilmIzle.py +94 -0
- kekikstream-2.5.8/KekikStream/Plugins/SuperFilmIzle.py +178 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/UgurFilm.py +1 -1
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream.egg-info/PKG-INFO +1 -1
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream.egg-info/SOURCES.txt +3 -1
- {kekikstream-2.5.6 → kekikstream-2.5.8}/PKG-INFO +1 -1
- {kekikstream-2.5.6 → kekikstream-2.5.8}/setup.py +1 -1
- kekikstream-2.5.6/KekikStream/Plugins/SuperFilmGeldi.py +0 -142
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/CLI/__init__.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/CLI/pypi_kontrol.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Extractor/ExtractorBase.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Extractor/ExtractorLoader.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Extractor/ExtractorManager.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Extractor/ExtractorModels.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Extractor/YTDLPCache.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/HTMLHelper.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Media/MediaHandler.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Media/MediaManager.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Plugin/PluginBase.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Plugin/PluginLoader.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Plugin/PluginManager.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/Plugin/PluginModels.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/UI/UIManager.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Core/__init__.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/Abstream.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/CloseLoad.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/ContentX.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/DonilasPlay.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/DzenRu.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/ExPlay.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/Filemoon.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/HDMomPlayer.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/HDPlayerSystem.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/JFVid.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/JetTv.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/JetV.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/MailRu.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/MixPlayHD.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/MixTiger.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/MolyStream.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/Odnoklassniki.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/PeaceMakerst.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/PixelDrain.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/PlayerFilmIzle.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/RapidVid.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/SetPlay.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/SetPrime.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/SibNet.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/Sobreatsesuyp.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/TRsTX.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/TauVideo.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/TurboImgz.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/TurkeyPlayer.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/VCTPlay.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/Veev.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/VidBiz.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/VidHide.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/VidMoly.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/VidMoxy.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/VidPapi.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/VideoSeyred.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/Videostr.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/Vidoza.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/Vtbe.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/YTDLP.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/YildizKisaFilm.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Extractors/Zeus.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/BelgeselX.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/DiziBox.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/DiziMom.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/DiziPal.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/DiziYou.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/Dizilla.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/FilmBip.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/FilmEkseni.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/FilmMakinesi.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/FilmModu.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/Filmatek.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/HDFilm.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/HDFilmCehennemi.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/KultFilmler.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/RecTV.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/RoketDizi.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/SelcukFlix.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/SetFilmIzle.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/SezonlukDizi.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/SineWix.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/Sinefy.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/SinemaCX.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/Sinezy.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/Watch32.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/Plugins/YabanciDizi.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/__init__.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/__main__.py +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream/requirements.txt +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream.egg-info/dependency_links.txt +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream.egg-info/entry_points.txt +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream.egg-info/requires.txt +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/KekikStream.egg-info/top_level.txt +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/LICENSE +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/MANIFEST.in +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/README.md +0 -0
- {kekikstream-2.5.6 → kekikstream-2.5.8}/setup.cfg +0 -0
|
@@ -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, HTMLHelper
|
|
4
|
-
from Kekik.Sifreleme
|
|
4
|
+
from Kekik.Sifreleme import AESManager
|
|
5
5
|
import contextlib
|
|
6
6
|
|
|
7
7
|
class HotStream(ExtractorBase):
|
|
@@ -24,4 +24,9 @@ class HotStream(ExtractorBase):
|
|
|
24
24
|
if not m3u8_url:
|
|
25
25
|
raise ValueError(f"HotStream: Video linki bulunamadı. {url}")
|
|
26
26
|
|
|
27
|
-
return ExtractResult(
|
|
27
|
+
return ExtractResult(
|
|
28
|
+
name = self.name,
|
|
29
|
+
url = self.fix_url(m3u8_url),
|
|
30
|
+
referer = url,
|
|
31
|
+
user_agent = self.httpx.headers.get("User-Agent")
|
|
32
|
+
)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
|
2
|
+
|
|
3
|
+
from KekikStream.Core import ExtractorBase, ExtractResult, Subtitle, HTMLHelper
|
|
4
|
+
from Kekik.Sifreleme import AESManager
|
|
5
|
+
import json, contextlib
|
|
6
|
+
|
|
7
|
+
class LuciferPlays(ExtractorBase):
|
|
8
|
+
name = "LuciferPlays"
|
|
9
|
+
main_url = "https://luciferplays.com"
|
|
10
|
+
|
|
11
|
+
async def extract(self, url: str, referer: str = None) -> ExtractResult:
|
|
12
|
+
# LuciferPlays genelde referer olarak kendi ana dizinini veya gömüldüğü sayfayı bekler
|
|
13
|
+
self.httpx.headers.update({"Referer": referer or url})
|
|
14
|
+
|
|
15
|
+
resp = await self.httpx.get(url)
|
|
16
|
+
sel = HTMLHelper(resp.text)
|
|
17
|
+
|
|
18
|
+
m3u8_url = None
|
|
19
|
+
subtitles = []
|
|
20
|
+
|
|
21
|
+
# 1. bePlayer (AES Decryption)
|
|
22
|
+
# patern: bePlayer('pass', '{"ct":"...", "iv":"...", "s":"..."}');
|
|
23
|
+
if match := sel.regex_first(r"bePlayer\('([^']+)',\s*'(\{[^}]+\})'\);", group=None):
|
|
24
|
+
pass_val, data_val = match
|
|
25
|
+
with contextlib.suppress(Exception):
|
|
26
|
+
decrypted = AESManager.decrypt(data_val, pass_val)
|
|
27
|
+
|
|
28
|
+
# Çözülen içerik genelde JSON formatındadır
|
|
29
|
+
try:
|
|
30
|
+
data = json.loads(decrypted)
|
|
31
|
+
|
|
32
|
+
# Video Lokasyonu (Donilas/HDMom Style)
|
|
33
|
+
m3u8_url = data.get("video_location")
|
|
34
|
+
|
|
35
|
+
# Altyazılar
|
|
36
|
+
for sub in data.get("strSubtitles", []):
|
|
37
|
+
sub_url = self.fix_url(sub.get("file"))
|
|
38
|
+
if sub_url and "Forced" not in sub.get("label", ""):
|
|
39
|
+
subtitles.append(Subtitle(
|
|
40
|
+
name = sub.get("label", "TR").upper(),
|
|
41
|
+
url = sub_url
|
|
42
|
+
))
|
|
43
|
+
|
|
44
|
+
# Eğer video_location bulunamadıysa MixPlay style kontrol et
|
|
45
|
+
if not m3u8_url:
|
|
46
|
+
client_data = data.get("schedule", {}).get("client", "")
|
|
47
|
+
m3u8_url = HTMLHelper(client_data).regex_first(r'"video_location":"([^"]+)"')
|
|
48
|
+
|
|
49
|
+
except json.JSONDecodeError:
|
|
50
|
+
# JSON değilse düz metin içinde ara
|
|
51
|
+
m3u8_url = HTMLHelper(decrypted).regex_first(r'"video_location":"([^"]+)"')
|
|
52
|
+
|
|
53
|
+
# 2. Fallback (Düz JS içinde file ara)
|
|
54
|
+
if not m3u8_url:
|
|
55
|
+
m3u8_url = sel.regex_first(r'file\s*:\s*"([^"]+)"')
|
|
56
|
+
|
|
57
|
+
if not m3u8_url:
|
|
58
|
+
raise ValueError(f"LuciferPlays: Video linki bulunamadı. {url}")
|
|
59
|
+
|
|
60
|
+
return ExtractResult(
|
|
61
|
+
name = self.name,
|
|
62
|
+
url = self.fix_url(m3u8_url),
|
|
63
|
+
referer = url,
|
|
64
|
+
subtitles = subtitles
|
|
65
|
+
)
|
|
@@ -5,7 +5,7 @@ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo
|
|
|
5
5
|
class FilmciBaba(PluginBase):
|
|
6
6
|
name = "FilmciBaba"
|
|
7
7
|
language = "tr"
|
|
8
|
-
main_url = "https://
|
|
8
|
+
main_url = "https://izle.live"
|
|
9
9
|
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
10
10
|
description = "Filmci Baba, film izleme sitesi 4k Full film izle, 1080p ve 4k kalite de sinema filmleri ve dizileri, tek parça hd kalitede türkçe dublajlı filmler seyret."
|
|
11
11
|
|
|
@@ -38,7 +38,7 @@ class FilmciBaba(PluginBase):
|
|
|
38
38
|
istek = await self.httpx.get(f"{url}/{page}/")
|
|
39
39
|
secici = HTMLHelper(istek.text)
|
|
40
40
|
|
|
41
|
-
results = []
|
|
41
|
+
results = []
|
|
42
42
|
for item in secici.select("div.movie-preview"):
|
|
43
43
|
title_el = secici.select_first(".movie-title a", item)
|
|
44
44
|
if not title_el:
|
|
@@ -67,7 +67,7 @@ class FilmciBaba(PluginBase):
|
|
|
67
67
|
if not title_el:
|
|
68
68
|
continue
|
|
69
69
|
|
|
70
|
-
title = self.clean_title(title_el.text(strip=True))
|
|
70
|
+
title = self.clean_title(title_el.text(strip=True))
|
|
71
71
|
href = self.fix_url(title_el.attrs.get("href"))
|
|
72
72
|
poster = self.fix_url(secici.select_poster(".movie-poster img", item))
|
|
73
73
|
|
|
@@ -6,7 +6,7 @@ import asyncio
|
|
|
6
6
|
class JetFilmizle(PluginBase):
|
|
7
7
|
name = "JetFilmizle"
|
|
8
8
|
language = "tr"
|
|
9
|
-
main_url = "https://jetfilmizle.
|
|
9
|
+
main_url = "https://jetfilmizle.net"
|
|
10
10
|
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
11
11
|
description = "Film izle, Yerli, Yabancı film izle, Türkçe dublaj, alt yazılı seçenekleriyle ödül almış filmleri Full HD kalitesiyle ve jetfilmizle hızıyla donmadan ücretsizce izleyebilirsiniz."
|
|
12
12
|
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
|
2
|
+
|
|
3
|
+
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult, HTMLHelper
|
|
4
|
+
|
|
5
|
+
class RealFilmIzle(PluginBase):
|
|
6
|
+
name = "RealFilmIzle"
|
|
7
|
+
language = "tr"
|
|
8
|
+
main_url = "https://realfilmizle.com"
|
|
9
|
+
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
10
|
+
description = "realfilmizle.com, sinemayı seven kullanıcılar için hazırlanmış, zengin içerik yapısına sahip bir online film izleme sitesidir."
|
|
11
|
+
|
|
12
|
+
main_page = {
|
|
13
|
+
f"{main_url}/dizi/aile-filmleri/page" : "Aile",
|
|
14
|
+
f"{main_url}/dizi/aksiyon-filmleri/page" : "Aksiyon",
|
|
15
|
+
f"{main_url}/dizi/animasyon-filmleri/page" : "Animasyon",
|
|
16
|
+
f"{main_url}/dizi/anime-filmleri/page" : "Anime",
|
|
17
|
+
f"{main_url}/dizi/belgeseler-filmleri/page" : "Belgeseler",
|
|
18
|
+
f"{main_url}/dizi/bilim-kurgu-filmleri/page" : "Bilim-Kurgu",
|
|
19
|
+
f"{main_url}/dizi/biyografi-filmleri/page" : "Biyoğrafi",
|
|
20
|
+
f"{main_url}/dizi/dram-filmleri/page" : "Dram",
|
|
21
|
+
f"{main_url}/dizi/erotik-filmleri/page" : "Erotik",
|
|
22
|
+
f"{main_url}/dizi/fantastik-filmleri/page" : "Fantastik",
|
|
23
|
+
f"{main_url}/dizi/gerilim-filmleri/page" : "Gerilim",
|
|
24
|
+
f"{main_url}/dizi/gizem-filmleri/page" : "Gizem",
|
|
25
|
+
f"{main_url}/dizi/hint-filmleri/page" : "Hint",
|
|
26
|
+
f"{main_url}/dizi/komedi-filmleri/page" : "Komedi",
|
|
27
|
+
f"{main_url}/dizi/korku-filmleri/page" : "Korku",
|
|
28
|
+
f"{main_url}/dizi/macera-filmleri/page" : "Macera",
|
|
29
|
+
f"{main_url}/dizi/muzikal-filmleri/page" : "Müzikal",
|
|
30
|
+
f"{main_url}/dizi/netflix-filmleri/page" : "Netflix",
|
|
31
|
+
f"{main_url}/dizi/romantik-filmleri/page" : "Romantik",
|
|
32
|
+
f"{main_url}/dizi/savas-filmleri/page" : "Savaş",
|
|
33
|
+
f"{main_url}/dizi/spor-filmleri/page" : "Spor",
|
|
34
|
+
f"{main_url}/dizi/suc-filmleri/page" : "Suç",
|
|
35
|
+
f"{main_url}/dizi/tarihi-filmleri/page" : "Tarihi",
|
|
36
|
+
f"{main_url}/dizi/western-filmleri/page" : "Western",
|
|
37
|
+
f"{main_url}/dizi/yerli-filmleri/page" : "Yerli",
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async def get_articles(self, secici: HTMLHelper) -> list[dict]:
|
|
41
|
+
articles = []
|
|
42
|
+
for veri in secici.select("article.movie-box"):
|
|
43
|
+
title = secici.select_text("div.name a", veri)
|
|
44
|
+
href = secici.select_attr("div.name a", "href", veri)
|
|
45
|
+
poster = secici.select_poster("img", veri)
|
|
46
|
+
|
|
47
|
+
articles.append({
|
|
48
|
+
"title" : self.clean_title(title),
|
|
49
|
+
"url" : self.fix_url(href),
|
|
50
|
+
"poster": self.fix_url(poster),
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
return articles
|
|
54
|
+
|
|
55
|
+
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
|
56
|
+
istek = await self.httpx.get(f"{url}/{page}")
|
|
57
|
+
secici = HTMLHelper(istek.text)
|
|
58
|
+
veriler = await self.get_articles(secici)
|
|
59
|
+
|
|
60
|
+
return [MainPageResult(**veri, category=category) for veri in veriler if veri]
|
|
61
|
+
|
|
62
|
+
async def search(self, query: str) -> list[SearchResult]:
|
|
63
|
+
istek = await self.httpx.get(f"{self.main_url}/?s={query}")
|
|
64
|
+
secici = HTMLHelper(istek.text)
|
|
65
|
+
veriler = await self.get_articles(secici)
|
|
66
|
+
|
|
67
|
+
return [SearchResult(**veri) for veri in veriler if veri]
|
|
68
|
+
|
|
69
|
+
async def load_item(self, url: str) -> MovieInfo:
|
|
70
|
+
istek = await self.httpx.get(url)
|
|
71
|
+
secici = HTMLHelper(istek.text)
|
|
72
|
+
|
|
73
|
+
title = self.clean_title(secici.select_text("div.film h1"))
|
|
74
|
+
poster = secici.select_poster("div.poster img")
|
|
75
|
+
description = secici.select_direct_text("div.description")
|
|
76
|
+
tags = secici.select_texts("ol.scheme-breadcrumbs li a")
|
|
77
|
+
tags = [tag.replace("✅ ", "").replace(" Filmleri", "") for tag in tags if tag != "Film izle"]
|
|
78
|
+
|
|
79
|
+
return MovieInfo(
|
|
80
|
+
url = url,
|
|
81
|
+
poster = self.fix_url(poster),
|
|
82
|
+
title = self.clean_title(title),
|
|
83
|
+
description = description,
|
|
84
|
+
tags = tags
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
async def load_links(self, url: str) -> list[ExtractResult]:
|
|
88
|
+
istek = await self.httpx.get(url)
|
|
89
|
+
secici = HTMLHelper(istek.text)
|
|
90
|
+
|
|
91
|
+
iframe = secici.select_attr("div.video-content iframe", "src")
|
|
92
|
+
result = await self.extract(iframe)
|
|
93
|
+
|
|
94
|
+
return [result] if result else []
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
|
2
|
+
|
|
3
|
+
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult, HTMLHelper
|
|
4
|
+
import asyncio
|
|
5
|
+
|
|
6
|
+
class SuperFilmIzle(PluginBase):
|
|
7
|
+
name = "SuperFilmIzle"
|
|
8
|
+
language = "tr"
|
|
9
|
+
main_url = "https://superfilmizle.com"
|
|
10
|
+
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
11
|
+
description = "Superfilmizle ile HD Kalite film izle türkçe altyazılı olarak super kalitede donmadan izleyin."
|
|
12
|
+
|
|
13
|
+
main_page = {
|
|
14
|
+
f"{main_url}/category/aile-filmleri/page/" : "Aile Filmleri",
|
|
15
|
+
f"{main_url}/category/aksiyon-filmleri/page/" : "Aksiyon Filmleri",
|
|
16
|
+
f"{main_url}/category/animasyon-filmleri/page/" : "Animasyon Filmleri",
|
|
17
|
+
f"{main_url}/category/bilim-kurgu/page/" : "Bilim Kurgu",
|
|
18
|
+
f"{main_url}/category/biyografi-filmleri/page/" : "Biyografi Filmleri",
|
|
19
|
+
f"{main_url}/category/dram-filmleri/page/" : "Dram Filmleri",
|
|
20
|
+
f"{main_url}/category/editor-secim/page/" : "Editör Seçim",
|
|
21
|
+
f"{main_url}/category/erotik-film/page/" : "Erotik Film",
|
|
22
|
+
f"{main_url}/category/fantastik-filmler/page/" : "Fantastik Filmler",
|
|
23
|
+
f"{main_url}/category/gelecek-filmler/page/" : "Gelecek Filmler",
|
|
24
|
+
f"{main_url}/category/gerilim-filmleri/page/" : "Gerilim Filmleri",
|
|
25
|
+
f"{main_url}/category/hint-filmleri/page/" : "Hint Filmleri",
|
|
26
|
+
f"{main_url}/category/komedi-filmleri/page/" : "Komedi Filmleri",
|
|
27
|
+
f"{main_url}/category/kore-filmleri/page/" : "Kore Filmleri",
|
|
28
|
+
f"{main_url}/category/korku-filmleri/page/" : "Korku Filmleri",
|
|
29
|
+
f"{main_url}/category/macera-filmleri/page/" : "Macera Filmleri",
|
|
30
|
+
f"{main_url}/category/muzikal-filmler/page/" : "Müzikal Filmler",
|
|
31
|
+
f"{main_url}/category/romantik-filmler/page/" : "Romantik Filmler",
|
|
32
|
+
f"{main_url}/category/savas-filmleri/page/" : "Savaş Filmleri",
|
|
33
|
+
f"{main_url}/category/spor-filmleri/page/" : "Spor Filmleri",
|
|
34
|
+
f"{main_url}/category/suc-filmleri/page/" : "Suç Filmleri",
|
|
35
|
+
f"{main_url}/category/tarih-filmleri/page/" : "Tarih Filmleri",
|
|
36
|
+
f"{main_url}/category/western-filmleri/page/" : "Western Filmleri",
|
|
37
|
+
f"{main_url}/category/yerli-filmler/page/" : "Yerli Filmler",
|
|
38
|
+
f"{main_url}/category/yetiskin-filmleri/page/" : "Yetişkin Filmleri"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
|
42
|
+
istek = await self.httpx.get(f"{url}{page}")
|
|
43
|
+
secici = HTMLHelper(istek.text)
|
|
44
|
+
|
|
45
|
+
results = []
|
|
46
|
+
for veri in secici.select("div.movie-box"):
|
|
47
|
+
title_text = secici.select_text("div.name a", veri)
|
|
48
|
+
if not title_text:
|
|
49
|
+
continue
|
|
50
|
+
|
|
51
|
+
href = secici.select_attr("div.name a", "href", veri)
|
|
52
|
+
poster = secici.select_poster("img", veri)
|
|
53
|
+
|
|
54
|
+
results.append(MainPageResult(
|
|
55
|
+
category = category,
|
|
56
|
+
title = self.clean_title(title_text),
|
|
57
|
+
url = self.fix_url(href),
|
|
58
|
+
poster = self.fix_url(poster),
|
|
59
|
+
))
|
|
60
|
+
|
|
61
|
+
return results
|
|
62
|
+
|
|
63
|
+
async def search(self, query: str) -> list[SearchResult]:
|
|
64
|
+
istek = await self.httpx.get(f"{self.main_url}?s={query}")
|
|
65
|
+
secici = HTMLHelper(istek.text)
|
|
66
|
+
|
|
67
|
+
results = []
|
|
68
|
+
for veri in secici.select("div.movie-box"):
|
|
69
|
+
title_text = secici.select_text("div.name a", veri)
|
|
70
|
+
if not title_text:
|
|
71
|
+
continue
|
|
72
|
+
|
|
73
|
+
href = secici.select_attr("div.name a", "href", veri)
|
|
74
|
+
poster = secici.select_poster("img", veri)
|
|
75
|
+
|
|
76
|
+
results.append(SearchResult(
|
|
77
|
+
title = self.clean_title(title_text),
|
|
78
|
+
url = self.fix_url(href),
|
|
79
|
+
poster = self.fix_url(poster),
|
|
80
|
+
))
|
|
81
|
+
|
|
82
|
+
return results
|
|
83
|
+
|
|
84
|
+
async def load_item(self, url: str) -> MovieInfo:
|
|
85
|
+
istek = await self.httpx.get(url)
|
|
86
|
+
secici = HTMLHelper(istek.text)
|
|
87
|
+
|
|
88
|
+
title = self.clean_title(secici.select_text("div.film h1"))
|
|
89
|
+
poster = secici.select_poster("div.poster img")
|
|
90
|
+
year = secici.extract_year("div.release a")
|
|
91
|
+
description = secici.select_direct_text("div.description")
|
|
92
|
+
tags = secici.select_texts("ul.post-categories li a")
|
|
93
|
+
rating = secici.select_text("div.imdb-count")
|
|
94
|
+
rating = rating.replace("IMDB Puanı", "") if rating else None
|
|
95
|
+
actors = secici.select_texts("div.actors a") or secici.select_texts("div.cast a")
|
|
96
|
+
|
|
97
|
+
return MovieInfo(
|
|
98
|
+
url = url,
|
|
99
|
+
poster = self.fix_url(poster),
|
|
100
|
+
title = title,
|
|
101
|
+
description = description,
|
|
102
|
+
tags = tags,
|
|
103
|
+
rating = rating,
|
|
104
|
+
year = year,
|
|
105
|
+
actors = actors
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
async def load_links(self, url: str) -> list[ExtractResult]:
|
|
109
|
+
istek = await self.httpx.get(url)
|
|
110
|
+
main_text = istek.text
|
|
111
|
+
secici = HTMLHelper(main_text)
|
|
112
|
+
|
|
113
|
+
# 1. Alternatifleri / Parçaları Belirle
|
|
114
|
+
# (url, name, needs_fetch)
|
|
115
|
+
sources = []
|
|
116
|
+
|
|
117
|
+
# Keremiya / Movifox Alternatif Yapısı (li.part)
|
|
118
|
+
part_items = secici.select("div#action-parts li.part")
|
|
119
|
+
if part_items:
|
|
120
|
+
for li in part_items:
|
|
121
|
+
name = secici.select_text("div.part-name", li) or "Alternatif"
|
|
122
|
+
|
|
123
|
+
# Aktif olan parça (Mevcut sayfada)
|
|
124
|
+
if "active" in li.attrs.get("class", []):
|
|
125
|
+
sources.append((None, name, False))
|
|
126
|
+
|
|
127
|
+
# Pasif olanlar (Link verilmişse)
|
|
128
|
+
elif a_tag := secici.select_first("a.post-page-numbers", li):
|
|
129
|
+
href = a_tag.attrs.get("href")
|
|
130
|
+
if href:
|
|
131
|
+
sources.append((self.fix_url(href), name, True))
|
|
132
|
+
else:
|
|
133
|
+
# Alternatif menüsü yoksa tek parça olarak işle
|
|
134
|
+
sources.append((None, "", False))
|
|
135
|
+
|
|
136
|
+
# 2. İşleme Görevlerini Hazırla
|
|
137
|
+
extract_tasks = []
|
|
138
|
+
|
|
139
|
+
async def process_task(source_data):
|
|
140
|
+
src_url, src_name, needs_fetch = source_data
|
|
141
|
+
|
|
142
|
+
# Iframe'i bulacağımız HTML kaynağını belirle
|
|
143
|
+
html_to_parse = main_text
|
|
144
|
+
if needs_fetch:
|
|
145
|
+
try:
|
|
146
|
+
resp = await self.httpx.get(src_url)
|
|
147
|
+
html_to_parse = resp.text
|
|
148
|
+
except:
|
|
149
|
+
return []
|
|
150
|
+
|
|
151
|
+
# HTML içindeki iframeleri topla
|
|
152
|
+
temp_secici = HTMLHelper(html_to_parse)
|
|
153
|
+
iframes = []
|
|
154
|
+
for ifr in temp_secici.select("div.video-content iframe"):
|
|
155
|
+
if src := ifr.attrs.get("src") or ifr.attrs.get("data-src"):
|
|
156
|
+
iframes.append(self.fix_url(src))
|
|
157
|
+
|
|
158
|
+
# Bulunan iframeleri extract et (prefix olarak parça adını ekle)
|
|
159
|
+
results = []
|
|
160
|
+
for ifr_url in iframes:
|
|
161
|
+
if extracted := await self.extract(ifr_url, prefix=src_name or None):
|
|
162
|
+
if isinstance(extracted, list):
|
|
163
|
+
results.extend(extracted)
|
|
164
|
+
else:
|
|
165
|
+
results.append(extracted)
|
|
166
|
+
return results
|
|
167
|
+
|
|
168
|
+
for src in sources:
|
|
169
|
+
extract_tasks.append(process_task(src))
|
|
170
|
+
|
|
171
|
+
# 3. Tüm Görevleri Paralel Çalıştır ve Sonuçları Topla
|
|
172
|
+
results_groups = await asyncio.gather(*extract_tasks)
|
|
173
|
+
|
|
174
|
+
final_results = []
|
|
175
|
+
for group in results_groups:
|
|
176
|
+
final_results.extend(group)
|
|
177
|
+
|
|
178
|
+
return final_results
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: KekikStream
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.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
|
|
@@ -40,6 +40,7 @@ KekikStream/Extractors/HotStream.py
|
|
|
40
40
|
KekikStream/Extractors/JFVid.py
|
|
41
41
|
KekikStream/Extractors/JetTv.py
|
|
42
42
|
KekikStream/Extractors/JetV.py
|
|
43
|
+
KekikStream/Extractors/LuciferPlays.py
|
|
43
44
|
KekikStream/Extractors/MailRu.py
|
|
44
45
|
KekikStream/Extractors/MixPlayHD.py
|
|
45
46
|
KekikStream/Extractors/MixTiger.py
|
|
@@ -88,6 +89,7 @@ KekikStream/Plugins/HDFilm.py
|
|
|
88
89
|
KekikStream/Plugins/HDFilmCehennemi.py
|
|
89
90
|
KekikStream/Plugins/JetFilmizle.py
|
|
90
91
|
KekikStream/Plugins/KultFilmler.py
|
|
92
|
+
KekikStream/Plugins/RealFilmIzle.py
|
|
91
93
|
KekikStream/Plugins/RecTV.py
|
|
92
94
|
KekikStream/Plugins/RoketDizi.py
|
|
93
95
|
KekikStream/Plugins/SelcukFlix.py
|
|
@@ -97,7 +99,7 @@ KekikStream/Plugins/SineWix.py
|
|
|
97
99
|
KekikStream/Plugins/Sinefy.py
|
|
98
100
|
KekikStream/Plugins/SinemaCX.py
|
|
99
101
|
KekikStream/Plugins/Sinezy.py
|
|
100
|
-
KekikStream/Plugins/
|
|
102
|
+
KekikStream/Plugins/SuperFilmIzle.py
|
|
101
103
|
KekikStream/Plugins/UgurFilm.py
|
|
102
104
|
KekikStream/Plugins/Watch32.py
|
|
103
105
|
KekikStream/Plugins/YabanciDizi.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: KekikStream
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.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.5.
|
|
9
|
+
version = "2.5.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"],
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
|
2
|
-
|
|
3
|
-
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult, HTMLHelper
|
|
4
|
-
|
|
5
|
-
class SuperFilmGeldi(PluginBase):
|
|
6
|
-
name = "SuperFilmGeldi"
|
|
7
|
-
language = "tr"
|
|
8
|
-
main_url = "https://www.superfilmgeldi13.art"
|
|
9
|
-
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
10
|
-
description = "Hd film izliyerek arkadaşlarınızla ve sevdiklerinizle iyi bir vakit geçirmek istiyorsanız açın bir film eğlenmeye bakın. Bilim kurgu filmleri, aşk drama vahşet aşk romantik sıradışı korku filmlerini izle."
|
|
11
|
-
|
|
12
|
-
main_page = {
|
|
13
|
-
f"{main_url}/page/SAYFA" : "Son Eklenenler",
|
|
14
|
-
f"{main_url}/hdizle/category/aksiyon/page/SAYFA" : "Aksiyon",
|
|
15
|
-
f"{main_url}/hdizle/category/animasyon/page/SAYFA" : "Animasyon",
|
|
16
|
-
f"{main_url}/hdizle/category/belgesel/page/SAYFA" : "Belgesel",
|
|
17
|
-
f"{main_url}/hdizle/category/biyografi/page/SAYFA" : "Biyografi",
|
|
18
|
-
f"{main_url}/hdizle/category/bilim-kurgu/page/SAYFA" : "Bilim Kurgu",
|
|
19
|
-
f"{main_url}/hdizle/category/fantastik/page/SAYFA" : "Fantastik",
|
|
20
|
-
f"{main_url}/hdizle/category/dram/page/SAYFA" : "Dram",
|
|
21
|
-
f"{main_url}/hdizle/category/gerilim/page/SAYFA" : "Gerilim",
|
|
22
|
-
f"{main_url}/hdizle/category/gizem/page/SAYFA" : "Gizem",
|
|
23
|
-
f"{main_url}/hdizle/category/komedi-filmleri/page/SAYFA" : "Komedi Filmleri",
|
|
24
|
-
f"{main_url}/hdizle/category/karete-filmleri/page/SAYFA" : "Karate Filmleri",
|
|
25
|
-
f"{main_url}/hdizle/category/korku/page/SAYFA" : "Korku",
|
|
26
|
-
f"{main_url}/hdizle/category/muzik/page/SAYFA" : "Müzik",
|
|
27
|
-
f"{main_url}/hdizle/category/macera/page/SAYFA" : "Macera",
|
|
28
|
-
f"{main_url}/hdizle/category/romantik/page/SAYFA" : "Romantik",
|
|
29
|
-
f"{main_url}/hdizle/category/spor/page/SAYFA" : "Spor",
|
|
30
|
-
f"{main_url}/hdizle/category/savas/page/SAYFA" : "Savaş",
|
|
31
|
-
f"{main_url}/hdizle/category/suc/page/SAYFA" : "Suç",
|
|
32
|
-
f"{main_url}/hdizle/category/western/page/SAYFA" : "Western",
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
|
36
|
-
istek = await self.httpx.get(url.replace("SAYFA", str(page)))
|
|
37
|
-
secici = HTMLHelper(istek.text)
|
|
38
|
-
|
|
39
|
-
results = []
|
|
40
|
-
for veri in secici.select("div.movie-preview-content"):
|
|
41
|
-
title_text = secici.select_text("span.movie-title a", veri)
|
|
42
|
-
if not title_text:
|
|
43
|
-
continue
|
|
44
|
-
|
|
45
|
-
href = secici.select_attr("span.movie-title a", "href", veri)
|
|
46
|
-
poster = secici.select_attr("img", "src", veri)
|
|
47
|
-
|
|
48
|
-
results.append(MainPageResult(
|
|
49
|
-
category = category,
|
|
50
|
-
title = self.clean_title(title_text.split(" izle")[0]),
|
|
51
|
-
url = self.fix_url(href) if href else "",
|
|
52
|
-
poster = self.fix_url(poster),
|
|
53
|
-
))
|
|
54
|
-
|
|
55
|
-
return results
|
|
56
|
-
|
|
57
|
-
async def search(self, query: str) -> list[SearchResult]:
|
|
58
|
-
istek = await self.httpx.get(f"{self.main_url}?s={query}")
|
|
59
|
-
secici = HTMLHelper(istek.text)
|
|
60
|
-
|
|
61
|
-
results = []
|
|
62
|
-
for veri in secici.select("div.movie-preview-content"):
|
|
63
|
-
title_text = secici.select_text("span.movie-title a", veri)
|
|
64
|
-
if not title_text:
|
|
65
|
-
continue
|
|
66
|
-
|
|
67
|
-
href = secici.select_attr("span.movie-title a", "href", veri)
|
|
68
|
-
poster = secici.select_attr("img", "src", veri)
|
|
69
|
-
|
|
70
|
-
results.append(SearchResult(
|
|
71
|
-
title = self.clean_title(title_text.split(" izle")[0]),
|
|
72
|
-
url = self.fix_url(href) if href else "",
|
|
73
|
-
poster = self.fix_url(poster),
|
|
74
|
-
))
|
|
75
|
-
|
|
76
|
-
return results
|
|
77
|
-
|
|
78
|
-
async def load_item(self, url: str) -> MovieInfo:
|
|
79
|
-
istek = await self.httpx.get(url)
|
|
80
|
-
secici = HTMLHelper(istek.text)
|
|
81
|
-
|
|
82
|
-
title = self.clean_title(secici.select_text("div.title h1").split(" izle")[0]) if secici.select_text("div.title h1") else ""
|
|
83
|
-
poster = secici.select_poster("div.poster img")
|
|
84
|
-
year = secici.extract_year("div.release a")
|
|
85
|
-
description = secici.select_text("div.excerpt p")
|
|
86
|
-
tags = secici.select_texts("div.categories a")
|
|
87
|
-
actors = secici.select_texts("div.actor a")
|
|
88
|
-
|
|
89
|
-
return MovieInfo(
|
|
90
|
-
url = url,
|
|
91
|
-
poster = self.fix_url(poster),
|
|
92
|
-
title = title,
|
|
93
|
-
description = description,
|
|
94
|
-
tags = tags,
|
|
95
|
-
year = year,
|
|
96
|
-
actors = actors
|
|
97
|
-
)
|
|
98
|
-
|
|
99
|
-
async def load_links(self, url: str) -> list[ExtractResult]:
|
|
100
|
-
istek = await self.httpx.get(url)
|
|
101
|
-
secici = HTMLHelper(istek.text)
|
|
102
|
-
|
|
103
|
-
iframe = secici.select_attr("div#vast iframe", "src")
|
|
104
|
-
iframe = self.fix_url(iframe) if iframe else None
|
|
105
|
-
|
|
106
|
-
if not iframe:
|
|
107
|
-
return []
|
|
108
|
-
|
|
109
|
-
results = []
|
|
110
|
-
|
|
111
|
-
# Mix player özel işleme
|
|
112
|
-
if "mix" in iframe and "index.php?data=" in iframe:
|
|
113
|
-
iframe_istek = await self.httpx.get(iframe, headers={"Referer": f"{self.main_url}/"})
|
|
114
|
-
iframe_sec = HTMLHelper(iframe_istek.text)
|
|
115
|
-
mix_point = iframe_sec.regex_first(r'videoUrl"\s*:\s*"(.*?)"\s*,\s*"videoServer')
|
|
116
|
-
|
|
117
|
-
if mix_point:
|
|
118
|
-
mix_point = mix_point.replace("\\", "")
|
|
119
|
-
|
|
120
|
-
# Endpoint belirleme
|
|
121
|
-
if "mixlion" in iframe:
|
|
122
|
-
end_point = "?s=3&d="
|
|
123
|
-
elif "mixeagle" in iframe:
|
|
124
|
-
end_point = "?s=1&d="
|
|
125
|
-
else:
|
|
126
|
-
end_point = "?s=0&d="
|
|
127
|
-
|
|
128
|
-
m3u_link = iframe.split("/player")[0] + mix_point + end_point
|
|
129
|
-
|
|
130
|
-
results.append(ExtractResult(
|
|
131
|
-
name = f"{self.name} | Mix Player",
|
|
132
|
-
url = m3u_link,
|
|
133
|
-
referer = iframe,
|
|
134
|
-
subtitles = []
|
|
135
|
-
))
|
|
136
|
-
else:
|
|
137
|
-
# Extractor'a yönlendir
|
|
138
|
-
data = await self.extract(iframe)
|
|
139
|
-
if data:
|
|
140
|
-
results.append(data)
|
|
141
|
-
|
|
142
|
-
return results
|
|
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
|
|
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
|