Skip to content

Commit 1e47b73

Browse files
committed
feat: Update HotStream extractor to include user agent in results and bump version to 2.5.8; add RealFilmIzle plugin
1 parent d2b7610 commit 1e47b73

File tree

3 files changed

+102
-3
lines changed

3 files changed

+102
-3
lines changed

KekikStream/Extractors/HotStream.py

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

33
from KekikStream.Core import ExtractorBase, ExtractResult, HTMLHelper
4-
from Kekik.Sifreleme import AESManager
4+
from Kekik.Sifreleme import AESManager
55
import contextlib
66

77
class HotStream(ExtractorBase):
@@ -24,4 +24,9 @@ async def extract(self, url: str, referer: str = None) -> ExtractResult:
2424
if not m3u8_url:
2525
raise ValueError(f"HotStream: Video linki bulunamadı. {url}")
2626

27-
return ExtractResult(name=self.name, url=self.fix_url(m3u8_url), referer=url)
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+
)
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 []

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
setup(
77
# ? Genel Bilgiler
88
name = "KekikStream",
9-
version = "2.5.7",
9+
version = "2.5.8",
1010
url = "https://github.com/keyiflerolsun/KekikStream",
1111
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ı",
1212
keywords = ["KekikStream", "KekikAkademi", "keyiflerolsun"],

0 commit comments

Comments
 (0)