KekikStream 2.4.6__py3-none-any.whl → 2.4.8__py3-none-any.whl

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.

Potentially problematic release.


This version of KekikStream might be problematic. Click here for more details.

Files changed (38) hide show
  1. KekikStream/Core/HTMLHelper.py +2 -2
  2. KekikStream/Core/Plugin/PluginBase.py +15 -4
  3. KekikStream/Extractors/Odnoklassniki.py +14 -2
  4. KekikStream/Extractors/YTDLP.py +2 -2
  5. KekikStream/Plugins/BelgeselX.py +30 -23
  6. KekikStream/Plugins/DiziBox.py +14 -11
  7. KekikStream/Plugins/DiziMom.py +110 -86
  8. KekikStream/Plugins/DiziPal.py +37 -23
  9. KekikStream/Plugins/DiziYou.py +23 -11
  10. KekikStream/Plugins/Dizilla.py +35 -30
  11. KekikStream/Plugins/FilmBip.py +83 -18
  12. KekikStream/Plugins/FilmEkseni.py +100 -58
  13. KekikStream/Plugins/FilmMakinesi.py +71 -19
  14. KekikStream/Plugins/FilmModu.py +17 -20
  15. KekikStream/Plugins/Filmatek.py +103 -98
  16. KekikStream/Plugins/{Full4kizle.py → FilmciBaba.py} +61 -80
  17. KekikStream/Plugins/FullHDFilmizlesene.py +12 -14
  18. KekikStream/Plugins/HDFilm.py +243 -0
  19. KekikStream/Plugins/HDFilmCehennemi.py +194 -125
  20. KekikStream/Plugins/JetFilmizle.py +5 -5
  21. KekikStream/Plugins/KultFilmler.py +6 -6
  22. KekikStream/Plugins/RoketDizi.py +5 -5
  23. KekikStream/Plugins/SelcukFlix.py +2 -2
  24. KekikStream/Plugins/SetFilmIzle.py +5 -5
  25. KekikStream/Plugins/SezonlukDizi.py +4 -4
  26. KekikStream/Plugins/Sinefy.py +5 -5
  27. KekikStream/Plugins/SinemaCX.py +5 -5
  28. KekikStream/Plugins/Sinezy.py +5 -5
  29. KekikStream/Plugins/SuperFilmGeldi.py +5 -5
  30. KekikStream/Plugins/UgurFilm.py +4 -4
  31. KekikStream/Plugins/YabanciDizi.py +5 -5
  32. {kekikstream-2.4.6.dist-info → kekikstream-2.4.8.dist-info}/METADATA +1 -1
  33. {kekikstream-2.4.6.dist-info → kekikstream-2.4.8.dist-info}/RECORD +37 -37
  34. KekikStream/Plugins/FullHDFilm.py +0 -179
  35. {kekikstream-2.4.6.dist-info → kekikstream-2.4.8.dist-info}/WHEEL +0 -0
  36. {kekikstream-2.4.6.dist-info → kekikstream-2.4.8.dist-info}/entry_points.txt +0 -0
  37. {kekikstream-2.4.6.dist-info → kekikstream-2.4.8.dist-info}/licenses/LICENSE +0 -0
  38. {kekikstream-2.4.6.dist-info → kekikstream-2.4.8.dist-info}/top_level.txt +0 -0
@@ -1,179 +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, SeriesInfo, Episode, ExtractResult, Subtitle, HTMLHelper
4
- import base64
5
-
6
- class FullHDFilm(PluginBase):
7
- name = "FullHDFilm"
8
- language = "tr"
9
- main_url = "https://hdfilm.us"
10
- favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
11
- description = "Full HD Film izle, Türkçe Dublaj ve Altyazılı filmler."
12
-
13
- main_page = {
14
- f"{main_url}/tur/turkce-altyazili-film-izle" : "Altyazılı Filmler",
15
- f"{main_url}/tur/netflix-filmleri-izle" : "Netflix",
16
- f"{main_url}/tur/yerli-film-izle" : "Yerli Film",
17
- f"{main_url}/category/aile-filmleri-izle" : "Aile",
18
- f"{main_url}/category/aksiyon-filmleri-izle" : "Aksiyon",
19
- f"{main_url}/category/animasyon-filmleri-izle" : "Animasyon",
20
- f"{main_url}/category/belgesel-filmleri-izle" : "Belgesel",
21
- f"{main_url}/category/bilim-kurgu-filmleri-izle" : "Bilim Kurgu",
22
- f"{main_url}/category/biyografi-filmleri-izle" : "Biyografi",
23
- f"{main_url}/category/dram-filmleri-izle" : "Dram",
24
- f"{main_url}/category/fantastik-filmler-izle" : "Fantastik",
25
- f"{main_url}/category/gerilim-filmleri-izle" : "Gerilim",
26
- f"{main_url}/category/gizem-filmleri-izle" : "Gizem",
27
- f"{main_url}/category/kisa" : "Kısa",
28
- f"{main_url}/category/komedi-filmleri-izle" : "Komedi",
29
- f"{main_url}/category/korku-filmleri-izle" : "Korku",
30
- f"{main_url}/category/macera-filmleri-izle" : "Macera",
31
- f"{main_url}/category/muzik" : "Müzik",
32
- f"{main_url}/category/muzikal-filmleri-izle" : "Müzikal",
33
- f"{main_url}/category/romantik-filmler-izle" : "Romantik",
34
- f"{main_url}/category/savas-filmleri-izle" : "Savaş",
35
- f"{main_url}/category/spor-filmleri-izle" : "Spor",
36
- f"{main_url}/category/suc-filmleri-izle" : "Suç",
37
- f"{main_url}/category/tarih-filmleri-izle" : "Tarih",
38
- f"{main_url}/category/western-filmleri-izle" : "Western",
39
- }
40
-
41
- async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
42
- page_url = url if page == 1 else f"{url}/page/{page}"
43
-
44
- self.httpx.headers.update({
45
- "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
46
- "Referer" : f"{self.main_url}/"
47
- })
48
-
49
- istek = await self.httpx.get(page_url)
50
- secici = HTMLHelper(istek.text)
51
-
52
- results = []
53
- for veri in secici.select("div.movie-poster"):
54
- alt = secici.select_attr("img", "alt", veri)
55
- poster = secici.select_attr("img", "src", veri)
56
- href = secici.select_attr("a", "href", veri)
57
-
58
- if alt and href:
59
- results.append(MainPageResult(
60
- category = category,
61
- title = alt,
62
- url = self.fix_url(href),
63
- poster = self.fix_url(poster) if poster else None,
64
- ))
65
-
66
- return results
67
-
68
- async def search(self, query: str) -> list[SearchResult]:
69
- istek = await self.httpx.get(f"{self.main_url}/?s={query}")
70
- secici = HTMLHelper(istek.text)
71
-
72
- results = []
73
- for veri in secici.select("div.movie-poster"):
74
- alt = secici.select_attr("img", "alt", veri)
75
- poster = secici.select_attr("img", "src", veri)
76
- href = secici.select_attr("a", "href", veri)
77
-
78
- if alt and href:
79
- results.append(SearchResult(
80
- title = alt,
81
- url = self.fix_url(href),
82
- poster = self.fix_url(poster) if poster else None,
83
- ))
84
-
85
- return results
86
-
87
- async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
88
- istek = await self.httpx.get(url)
89
- secici = HTMLHelper(istek.text)
90
-
91
- title = self.clean_title(secici.select_text("h1"))
92
- poster = secici.select_poster("div.poster img")
93
- description = secici.select_text("div.film") or secici.select_attr("meta[property='og:description']", "content")
94
- year = secici.extract_year("div.yayin-tarihi.info") or secici.regex_first(r"\((\d{4})\)")
95
- tags = secici.select_texts("div.tur.info a")
96
- rating = secici.regex_first(r"IMDb\s*([\d\.]+)", secici.select_text("div.imdb"))
97
- actors = secici.select_direct_text("div.oyuncular")
98
-
99
- # Kotlin referansı: URL'de -dizi veya tags içinde dizi kontrolü
100
- is_series = "-dizi" in url.lower() or any("dizi" in tag.lower() for tag in tags)
101
-
102
- if is_series:
103
- episodes = []
104
- for idx, el in enumerate(secici.select("li.psec")):
105
- part_id = el.attrs.get("id")
106
- part_name = secici.select_text("a", el) or ""
107
- if not part_name or "fragman" in part_name.lower(): continue
108
-
109
- s, e = secici.extract_season_episode(f"{part_id} {part_name}")
110
- episodes.append(Episode(season=s or 1, episode=e or (idx+1), title=f"{s or 1}. Sezon {e or idx+1}. Bölüm", url=url))
111
-
112
- return SeriesInfo(
113
- url=url, poster=self.fix_url(poster) if poster else None, title=title or "", description=description,
114
- tags=tags, year=str(year) if year else None, actors=actors, rating=rating, episodes=episodes
115
- )
116
-
117
- return MovieInfo(
118
- url=url, poster=self.fix_url(poster) if poster else None, title=title or "", description=description,
119
- tags=tags, year=str(year) if year else None, actors=actors, rating=rating
120
- )
121
-
122
- def _get_iframe(self, source_code: str) -> str:
123
- """Base64 kodlu iframe'i çözümle"""
124
- script_val = HTMLHelper(source_code).regex_first(r'<script[^>]*>(PCEtLWJhc2xpazp[^<]*)</script>')
125
- if not script_val:
126
- return ""
127
-
128
- try:
129
- decoded_html = base64.b64decode(script_val).decode("utf-8")
130
- iframe_src = HTMLHelper(decoded_html).regex_first(r'<iframe[^>]+src=["\']([^"\']+)["\']')
131
- return self.fix_url(iframe_src) if iframe_src else ""
132
- except Exception:
133
- return ""
134
-
135
- def _extract_subtitle_url(self, source_code: str) -> str | None:
136
- """playerjsSubtitle değişkeninden .srt URL çıkar"""
137
- patterns = [
138
- r'var playerjsSubtitle = "\[Türkçe\](https?://[^\s"]+?\.srt)";',
139
- r'var playerjsSubtitle = "(https?://[^\s"]+?\.srt)";',
140
- r'subtitle:\s*"(https?://[^\s"]+?\.srt)"',
141
- ]
142
-
143
- for pattern in patterns:
144
- val = HTMLHelper(source_code).regex_first(pattern)
145
- if val:
146
- return val
147
-
148
- return None
149
-
150
- async def load_links(self, url: str) -> list[ExtractResult]:
151
- self.httpx.headers.update({
152
- "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
153
- "Referer" : self.main_url
154
- })
155
-
156
- istek = await self.httpx.get(url)
157
- source_code = istek.text
158
-
159
- # Ana sayfadan altyazı URL'sini çek
160
- subtitle_url = self._extract_subtitle_url(source_code)
161
-
162
- # Iframe'den altyazı URL'sini çek
163
- iframe_src = self._get_iframe(source_code)
164
-
165
- if not subtitle_url and iframe_src:
166
- iframe_istek = await self.httpx.get(iframe_src)
167
- subtitle_url = self._extract_subtitle_url(iframe_istek.text)
168
-
169
- results = []
170
-
171
- if iframe_src:
172
- data = await self.extract(iframe_src)
173
- if data:
174
- # ExtractResult objesi immutable, yeni bir kopya oluştur
175
- subtitles = [Subtitle(name="Türkçe", url=subtitle_url)] if subtitle_url else []
176
- updated_data = data.model_copy(update={"subtitles": subtitles}) if subtitles else data
177
- results.append(updated_data)
178
-
179
- return results