Skip to content

Commit 954bf6e

Browse files
committed
🕊
🕊
1 parent 62c4cf7 commit 954bf6e

File tree

11 files changed

+131
-34
lines changed

11 files changed

+131
-34
lines changed

‎KekikStream/Core/Media/MediaHandler.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,11 @@ def play_with_ytdlp(self, extract_data: ExtractResult):
123123
subprocess.run(mpv_command, stdin=ytdlp_proc.stdout, check=True)
124124

125125
except subprocess.CalledProcessError as hata:
126-
print(f"[red]Oynatma hatası: {hata}[/red]")
127-
print({"title": self.title, "url": extract_data.url, "headers": self.headers})
126+
konsol.print(f"[red]Oynatma hatası: {hata}[/red]")
127+
konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
128128
except FileNotFoundError:
129-
print("[red]yt-dlp veya mpv bulunamadı! Kurulumlarından emin olun.[/red]")
130-
print({"title": self.title, "url": extract_data.url, "headers": self.headers})
129+
konsol.print("[red]yt-dlp veya mpv bulunamadı! Kurulumlarından emin olun.[/red]")
130+
konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
131131

132132
def play_with_android_mxplayer(self, extract_data: ExtractResult):
133133
konsol.log(f"[yellow][»] MxPlayer ile Oynatılıyor : {extract_data.url}")

‎KekikStream/Extractors/CloseLoad.py‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ async def extract(self, url, referer=None) -> ExtractResult:
3636

3737
eval_func = re.compile(r'\s*(eval\(function[\s\S].*)\s*').findall(istek.text)[0]
3838
m3u_link = get_m3u_link(extract_data(unpack(eval_func)))
39-
print(m3u_link)
4039

4140
await self.close()
4241
return ExtractResult(

‎KekikStream/Plugins/HDFilmCehennemi.py‎

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,47 @@
11
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
22

3-
from KekikStream.Core import kekik_cache, PluginBase, SearchResult, MovieInfo, ExtractResult, Subtitle
3+
from KekikStream.Core import kekik_cache, PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult, Subtitle
44
from parsel import Selector
55
import random, string
66

77
class HDFilmCehennemi(PluginBase):
8-
name = "HDFilmCehennemi"
9-
main_url = "https://www.hdfilmcehennemi.nl"
8+
name = "HDFilmCehennemi"
9+
language = "tr"
10+
main_url = "https://www.hdfilmcehennemi.nl"
11+
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
12+
description = "Türkiye'nin en hızlı hd film izleme sitesi"
13+
14+
main_page = {
15+
f"{main_url}" : "Yeni Eklenen Filmler",
16+
f"{main_url}/yabancidiziizle-2" : "Yeni Eklenen Diziler",
17+
f"{main_url}/category/tavsiye-filmler-izle2" : "Tavsiye Filmler",
18+
f"{main_url}/imdb-7-puan-uzeri-filmler" : "IMDB 7+ Filmler",
19+
f"{main_url}/en-cok-yorumlananlar-1" : "En Çok Yorumlananlar",
20+
f"{main_url}/en-cok-begenilen-filmleri-izle" : "En Çok Beğenilenler",
21+
f"{main_url}/tur/aile-filmleri-izleyin-6" : "Aile Filmleri",
22+
f"{main_url}/tur/aksiyon-filmleri-izleyin-3" : "Aksiyon Filmleri",
23+
f"{main_url}/tur/animasyon-filmlerini-izleyin-4" : "Animasyon Filmleri",
24+
f"{main_url}/tur/belgesel-filmlerini-izle-1" : "Belgesel Filmleri",
25+
f"{main_url}/tur/bilim-kurgu-filmlerini-izleyin-2" : "Bilim Kurgu Filmleri",
26+
f"{main_url}/tur/komedi-filmlerini-izleyin-1" : "Komedi Filmleri",
27+
f"{main_url}/tur/korku-filmlerini-izle-2/" : "Korku Filmleri",
28+
f"{main_url}/tur/romantik-filmleri-izle-1" : "Romantik Filmleri"
29+
}
30+
31+
@kekik_cache(ttl=60*60)
32+
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
33+
istek = await self.httpx.get(f"{url}")
34+
secici = Selector(istek.text)
35+
36+
return [
37+
MainPageResult(
38+
category = category,
39+
title = veri.css("strong.poster-title::text").get(),
40+
url = self.fix_url(veri.css("::attr(href)").get()),
41+
poster = self.fix_url(veri.css("img::attr(data-src)").get()),
42+
)
43+
for veri in secici.css("div.section-content a.poster")
44+
]
1045

1146
@kekik_cache(ttl=60*60)
1247
async def search(self, query: str) -> list[SearchResult]:

‎KekikStream/Plugins/JetFilmizle.py‎

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,38 @@
11
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
22

3-
from KekikStream.Core import kekik_cache, PluginBase, SearchResult, MovieInfo
3+
from KekikStream.Core import kekik_cache, PluginBase, MainPageResult, SearchResult, MovieInfo
44
from parsel import Selector
55

66
class JetFilmizle(PluginBase):
7-
name = "JetFilmizle"
8-
main_url = "https://jetfilmizle.io"
7+
name = "JetFilmizle"
8+
language = "tr"
9+
main_url = "https://jetfilmizle.io"
10+
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
11+
description = "Binlerce Film İzleme Seçeneğiyle En İyi Film İzleme Sitesi"
12+
13+
main_page = {
14+
f"{main_url}/page/" : "Son Filmler",
15+
f"{main_url}/netflix/page/" : "Netflix",
16+
f"{main_url}/editorun-secimi/page/" : "Editörün Seçimi",
17+
f"{main_url}/turk-film-izle/page/" : "Türk Filmleri",
18+
f"{main_url}/cizgi-filmler-izle/page/" : "Çizgi Filmler",
19+
f"{main_url}/kategoriler/yesilcam-filmleri-izlee/page/" : "Yeşilçam Filmleri"
20+
}
21+
22+
@kekik_cache(ttl=60*60)
23+
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
24+
istek = await self.httpx.get(f"{url}{page}")
25+
secici = Selector(istek.text)
26+
27+
return [
28+
MainPageResult(
29+
category = category,
30+
title = self.clean_title(veri.css("h2 a::text, h3 a::text, h4 a::text, h5 a::text, h6 a::text").get()),
31+
url = self.fix_url(veri.css("a::attr(href)").get()),
32+
poster = self.fix_url(veri.css("img::attr(data-src)").get() or veri.css("img::attr(src)").get()),
33+
)
34+
for veri in secici.css("article.movie")
35+
]
936

1037
@kekik_cache(ttl=60*60)
1138
async def search(self, query: str) -> list[SearchResult]:
@@ -43,7 +70,8 @@ async def load_item(self, url: str) -> MovieInfo:
4370
description = secici.css("section.movie-exp p.aciklama::text").get().strip()
4471
tags = secici.css("section.movie-exp div.catss a::text").getall()
4572
rating = secici.css("section.movie-exp div.imdb_puan span::text").get().strip()
46-
year = secici.xpath("//div[@class='yap' and (contains(., 'Vizyon') or contains(., 'Yapım'))]/text()").get().strip()
73+
year = secici.xpath("//div[@class='yap' and (contains(., 'Vizyon') or contains(., 'Yapım'))]/text()").get()
74+
year = year.strip() if year else None
4775
actors = secici.css("div[itemprop='actor'] a span::text").getall()
4876

4977
return MovieInfo(

‎KekikStream/Plugins/RecTV.py‎

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,54 @@
11
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
22

3-
from KekikStream.Core import kekik_cache, PluginBase, SearchResult, MovieInfo, Episode, SeriesInfo, ExtractResult, Subtitle
3+
from KekikStream.Core import kekik_cache, PluginBase, MainPageResult, SearchResult, MovieInfo, Episode, SeriesInfo, ExtractResult, Subtitle
44
from httpx import AsyncClient
55
from json import dumps, loads
66
import re
77

88
class RecTV(PluginBase):
9-
name = "RecTV"
10-
main_url = "https://a.prectv35.sbs"
9+
name = "RecTV"
10+
language = "tr"
11+
main_url = "https://a.prectv35.sbs"
12+
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
13+
description = "RecTv APK, Türkiye’deki en popüler Çevrimiçi Medya Akış platformlarından biridir. Filmlerin, Canlı Sporların, Web Dizilerinin ve çok daha fazlasının keyfini ücretsiz çıkarın."
1114

1215
sw_key = "4F5A9C3D9A86FA54EACEDDD635185/c3c5bd17-e37b-4b94-a944-8a3688a30452"
1316
http2 = AsyncClient(http2=True)
1417
http2.headers.update({"user-agent": "okhttp/4.12.0"})
1518

16-
kekik_cache(ttl=60*60)
19+
main_page = {
20+
f"{main_url}/api/channel/by/filtres/0/0/SAYFA/{sw_key}/" : "Canlı",
21+
f"{main_url}/api/movie/by/filtres/0/created/SAYFA/{sw_key}/" : "Son Filmler",
22+
f"{main_url}/api/serie/by/filtres/0/created/SAYFA/{sw_key}/" : "Son Diziler",
23+
f"{main_url}/api/movie/by/filtres/14/created/SAYFA/{sw_key}/" : "Aile",
24+
f"{main_url}/api/movie/by/filtres/1/created/SAYFA/{sw_key}/" : "Aksiyon",
25+
f"{main_url}/api/movie/by/filtres/13/created/SAYFA/{sw_key}/" : "Animasyon",
26+
f"{main_url}/api/movie/by/filtres/19/created/SAYFA/{sw_key}/" : "Belgesel",
27+
f"{main_url}/api/movie/by/filtres/4/created/SAYFA/{sw_key}/" : "Bilim Kurgu",
28+
f"{main_url}/api/movie/by/filtres/2/created/SAYFA/{sw_key}/" : "Dram",
29+
f"{main_url}/api/movie/by/filtres/10/created/SAYFA/{sw_key}/" : "Fantastik",
30+
f"{main_url}/api/movie/by/filtres/3/created/SAYFA/{sw_key}/" : "Komedi",
31+
f"{main_url}/api/movie/by/filtres/8/created/SAYFA/{sw_key}/" : "Korku",
32+
f"{main_url}/api/movie/by/filtres/17/created/SAYFA/{sw_key}/" : "Macera",
33+
f"{main_url}/api/movie/by/filtres/5/created/SAYFA/{sw_key}/" : "Romantik"
34+
}
35+
36+
@kekik_cache(ttl=60*60)
37+
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
38+
istek = await self.httpx.get(f"{url.replace('SAYFA', str(int(page) - 1))}")
39+
veriler = istek.json()
40+
41+
return [
42+
MainPageResult(
43+
category = category,
44+
title = self.clean_title(veri.get("title")),
45+
url = dumps(veri),
46+
poster = self.fix_url(veri.get("image")),
47+
)
48+
for veri in veriler
49+
]
50+
51+
@kekik_cache(ttl=60*60)
1752
async def search(self, query: str) -> list[SearchResult]:
1853
self.media_handler.headers.update({"User-Agent": "googleusercontent"})
1954

@@ -35,7 +70,7 @@ async def search(self, query: str) -> list[SearchResult]:
3570
for veri in tum_veri
3671
]
3772

38-
kekik_cache(ttl=60*60)
73+
@kekik_cache(ttl=60*60)
3974
async def load_item(self, url: str) -> MovieInfo:
4075
veri = loads(url)
4176

@@ -86,7 +121,7 @@ async def load_item(self, url: str) -> MovieInfo:
86121
actors = []
87122
)
88123

89-
kekik_cache(ttl=15*60)
124+
@kekik_cache(ttl=15*60)
90125
async def load_links(self, url: str) -> list[str]:
91126
try:
92127
veri = loads(url)

‎KekikStream/Plugins/SezonlukDizi.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class SezonlukDizi(PluginBase):
77
name = "SezonlukDizi"
88
main_url = "https://sezonlukdizi6.com"
99

10-
kekik_cache(ttl=60*60)
10+
@kekik_cache(ttl=60*60)
1111
async def search(self, query: str) -> list[SearchResult]:
1212
istek = await self.httpx.get(f"{self.main_url}/diziler.asp?adi={query}")
1313
secici = Selector(istek.text)
@@ -21,7 +21,7 @@ async def search(self, query: str) -> list[SearchResult]:
2121
for afis in secici.css("div.afis a.column")
2222
]
2323

24-
kekik_cache(ttl=60*60)
24+
@kekik_cache(ttl=60*60)
2525
async def load_item(self, url: str) -> SeriesInfo:
2626
istek = await self.httpx.get(url)
2727
secici = Selector(istek.text)
@@ -73,7 +73,7 @@ async def load_item(self, url: str) -> SeriesInfo:
7373
actors = actors
7474
)
7575

76-
kekik_cache(ttl=15*60)
76+
@kekik_cache(ttl=15*60)
7777
async def load_links(self, url: str) -> list[str]:
7878
istek = await self.httpx.get(url)
7979
secici = Selector(istek.text)

‎KekikStream/Plugins/Shorten.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ async def bolumler(self, slug):
155155

156156
return veriler["data"]
157157

158-
kekik_cache(ttl=60*60)
158+
@kekik_cache(ttl=60*60)
159159
async def search(self, query: str) -> list[SearchResult]:
160160
veriler = await self.raw_diziler()
161161

@@ -168,7 +168,7 @@ async def search(self, query: str) -> list[SearchResult]:
168168
for veri in veriler
169169
]
170170

171-
kekik_cache(ttl=60*60)
171+
@kekik_cache(ttl=60*60)
172172
async def load_item(self, url: str) -> MovieInfo:
173173
veri = await self.bolumler(url)
174174

@@ -205,7 +205,7 @@ async def load_item(self, url: str) -> MovieInfo:
205205
episodes = episodes,
206206
)
207207

208-
kekik_cache(ttl=15*60)
208+
@kekik_cache(ttl=15*60)
209209
async def load_links(self, url: str) -> list[str]:
210210
return [url]
211211

‎KekikStream/Plugins/SineWix.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class SineWix(PluginBase):
3434
f"{main_url}/sinewix/movies/36" : "Tarih",
3535
}
3636

37-
kekik_cache(ttl=60*60)
37+
@kekik_cache(ttl=60*60)
3838
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
3939
istek = await self.httpx.get(f"{url}/{page}")
4040
veriler = istek.json()
@@ -49,7 +49,7 @@ async def get_main_page(self, page: int, url: str, category: str) -> list[MainPa
4949
for veri in veriler.get("data")
5050
]
5151

52-
kekik_cache(ttl=60*60)
52+
@kekik_cache(ttl=60*60)
5353
async def search(self, query: str) -> list[SearchResult]:
5454
istek = await self.httpx.get(f"{self.main_url}/sinewix/search/{query}")
5555

@@ -62,7 +62,7 @@ async def search(self, query: str) -> list[SearchResult]:
6262
for veri in istek.json().get("search")
6363
]
6464

65-
kekik_cache(ttl=60*60)
65+
@kekik_cache(ttl=60*60)
6666
async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
6767
item_type = url.split("?type=")[-1].split("&id=")[0]
6868
item_id = url.split("&id=")[-1]
@@ -125,7 +125,7 @@ async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
125125
episodes = episodes,
126126
)
127127

128-
kekik_cache(ttl=15*60)
128+
@kekik_cache(ttl=15*60)
129129
async def load_links(self, url: str) -> list[str]:
130130
if not url.startswith(self.main_url):
131131
return [url]

‎KekikStream/Plugins/UgurFilm.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class UgurFilm(PluginBase):
77
name = "UgurFilm"
88
main_url = "https://ugurfilm8.com"
99

10-
kekik_cache(ttl=60*60)
10+
@kekik_cache(ttl=60*60)
1111
async def search(self, query: str) -> list[SearchResult]:
1212
istek = await self.httpx.get(f"{self.main_url}/?s={query}")
1313
secici = Selector(istek.text)
@@ -29,7 +29,7 @@ async def search(self, query: str) -> list[SearchResult]:
2929

3030
return results
3131

32-
kekik_cache(ttl=60*60)
32+
@kekik_cache(ttl=60*60)
3333
async def load_item(self, url: str) -> MovieInfo:
3434
istek = await self.httpx.get(url)
3535
secici = Selector(istek.text)
@@ -51,7 +51,7 @@ async def load_item(self, url: str) -> MovieInfo:
5151
actors = actors,
5252
)
5353

54-
kekik_cache(ttl=15*60)
54+
@kekik_cache(ttl=15*60)
5555
async def load_links(self, url: str) -> list[str]:
5656
istek = await self.httpx.get(url)
5757
secici = Selector(istek.text)

‎Tests/Single.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
from KekikStream.CLI import konsol
44
from asyncio import run
5-
from KekikStream.Plugins.FullHDFilmizlesene import FullHDFilmizlesene
5+
from KekikStream.Plugins.RecTV import RecTV
66
from KekikStream.Core import ExtractorManager, MediaManager, MovieInfo, SeriesInfo
77

88
async def main():
9-
plugin = FullHDFilmizlesene()
9+
plugin = RecTV()
1010
ext = ExtractorManager()
1111
media = MediaManager()
1212

0 commit comments

Comments
 (0)