KekikStream 2.4.6__py3-none-any.whl → 2.4.7__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 (37) 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 +27 -19
  6. KekikStream/Plugins/DiziBox.py +11 -8
  7. KekikStream/Plugins/DiziMom.py +71 -53
  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 +90 -18
  12. KekikStream/Plugins/FilmEkseni.py +78 -40
  13. KekikStream/Plugins/FilmMakinesi.py +29 -14
  14. KekikStream/Plugins/FilmModu.py +17 -19
  15. KekikStream/Plugins/Filmatek.py +103 -91
  16. KekikStream/Plugins/Full4kizle.py +6 -6
  17. KekikStream/Plugins/FullHDFilm.py +6 -6
  18. KekikStream/Plugins/FullHDFilmizlesene.py +6 -7
  19. KekikStream/Plugins/HDFilmCehennemi.py +3 -3
  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.7.dist-info}/METADATA +1 -1
  33. {kekikstream-2.4.6.dist-info → kekikstream-2.4.7.dist-info}/RECORD +37 -37
  34. {kekikstream-2.4.6.dist-info → kekikstream-2.4.7.dist-info}/WHEEL +0 -0
  35. {kekikstream-2.4.6.dist-info → kekikstream-2.4.7.dist-info}/entry_points.txt +0 -0
  36. {kekikstream-2.4.6.dist-info → kekikstream-2.4.7.dist-info}/licenses/LICENSE +0 -0
  37. {kekikstream-2.4.6.dist-info → kekikstream-2.4.7.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, Subtitle, ExtractResult, HTMLHelper
3
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, Subtitle, ExtractResult, HTMLHelper
4
4
 
5
5
  class FilmModu(PluginBase):
6
6
  name = "FilmModu"
@@ -44,8 +44,8 @@ class FilmModu(PluginBase):
44
44
 
45
45
  results = []
46
46
  for veri in secici.select("div.movie"):
47
- title = secici.select_text("a", veri)
48
- href = secici.select_attr("a", "href", veri)
47
+ title = secici.select_text("a", veri)
48
+ href = secici.select_attr("a", "href", veri)
49
49
  poster = secici.select_attr("picture img", "data-src", veri)
50
50
 
51
51
  if title and href:
@@ -53,7 +53,7 @@ class FilmModu(PluginBase):
53
53
  category = category,
54
54
  title = title,
55
55
  url = self.fix_url(href),
56
- poster = self.fix_url(poster) if poster else None,
56
+ poster = self.fix_url(poster),
57
57
  ))
58
58
 
59
59
  return results
@@ -64,15 +64,15 @@ class FilmModu(PluginBase):
64
64
 
65
65
  results = []
66
66
  for veri in secici.select("div.movie"):
67
- title = secici.select_text("a", veri)
68
- href = secici.select_attr("a", "href", veri)
67
+ title = secici.select_text("a", veri)
68
+ href = secici.select_attr("a", "href", veri)
69
69
  poster = secici.select_attr("picture img", "data-src", veri)
70
70
 
71
71
  if title and href:
72
72
  results.append(SearchResult(
73
73
  title = title,
74
74
  url = self.fix_url(href),
75
- poster = self.fix_url(poster) if poster else None,
75
+ poster = self.fix_url(poster),
76
76
  ))
77
77
 
78
78
  return results
@@ -83,7 +83,7 @@ class FilmModu(PluginBase):
83
83
 
84
84
  org_title = secici.select_text("div.titles h1")
85
85
  alt_title = secici.select_text("div.titles h2")
86
- title = f"{org_title} - {alt_title}" if alt_title else (org_title or "")
86
+ title = f"{org_title} - {alt_title}" if alt_title else (org_title)
87
87
  poster = secici.select_poster("img.img-responsive")
88
88
  description = secici.select_text("p[itemprop='description']")
89
89
  tags = secici.select_texts("a[href*='film-tur/']")
@@ -93,13 +93,13 @@ class FilmModu(PluginBase):
93
93
 
94
94
  return MovieInfo(
95
95
  url = url,
96
- poster = self.fix_url(poster) if poster else None,
96
+ poster = self.fix_url(poster),
97
97
  title = title,
98
98
  description = description,
99
99
  tags = tags,
100
100
  rating = rating,
101
- year = str(year) if year else None,
102
- actors = actors,
101
+ year = year,
102
+ actors = actors
103
103
  )
104
104
 
105
105
  async def load_links(self, url: str) -> list[ExtractResult]:
@@ -119,20 +119,18 @@ class FilmModu(PluginBase):
119
119
  if alt_name == "Fragman" or not alt_link:
120
120
  continue
121
121
 
122
- alt_link = self.fix_url(alt_link)
122
+ alt_link = self.fix_url(alt_link)
123
123
  alt_istek = await self.httpx.get(alt_link)
124
- alt_text = alt_istek.text
124
+ secici = HTMLHelper(alt_istek.text)
125
125
 
126
- vid_id = HTMLHelper(alt_text).regex_first(r"var videoId = '([^']*)'")
127
- vid_type = HTMLHelper(alt_text).regex_first(r"var videoType = '([^']*)'")
126
+ vid_id = secici.regex_first(r"var videoId = '([^']*)'")
127
+ vid_type = secici.regex_first(r"var videoType = '([^']*)'")
128
128
 
129
129
  if not vid_id or not vid_type:
130
130
  continue
131
131
 
132
- source_istek = await self.httpx.get(
133
- f"{self.main_url}/get-source?movie_id={vid_id}&type={vid_type}"
134
- )
135
- source_data = source_istek.json()
132
+ source_istek = await self.httpx.get(f"{self.main_url}/get-source?movie_id={vid_id}&type={vid_type}")
133
+ source_data = source_istek.json()
136
134
 
137
135
  if source_data.get("subtitle"):
138
136
  subtitle_url = self.fix_url(source_data["subtitle"])
@@ -1,9 +1,8 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, SeriesInfo, Episode, ExtractResult, HTMLHelper
4
- import re
5
- from json import loads
6
- from urllib.parse import unquote
3
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, ExtractResult, HTMLHelper
4
+ from urllib.parse import unquote
5
+
7
6
 
8
7
  class Filmatek(PluginBase):
9
8
  name = "Filmatek"
@@ -12,7 +11,6 @@ class Filmatek(PluginBase):
12
11
  favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
13
12
  description = "Sosyalizmin Sineması Veritabanı"
14
13
 
15
- # Main page categories
16
14
  main_page = {
17
15
  f"{main_url}/tur/aile/page" : "Aile",
18
16
  f"{main_url}/tur/aksiyon/page" : "Aksiyon",
@@ -28,22 +26,20 @@ class Filmatek(PluginBase):
28
26
  }
29
27
 
30
28
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
31
- target_url = f"{url}/{page}/"
32
- istek = await self.httpx.get(target_url)
33
- helper = HTMLHelper(istek.text)
29
+ istek = await self.httpx.get(f"{url}/{page}/")
30
+ secici = HTMLHelper(istek.text)
34
31
 
35
- items = helper.select("div.items article, #archive-content article")
32
+ items = secici.select("div.items article, #archive-content article")
36
33
  results = []
37
34
 
38
35
  for item in items:
39
- title_el = helper.select_first("div.data h3 a, h3 a", item)
40
- if not title_el: continue
36
+ title_el = secici.select_first("div.data h3 a, h3 a", item)
37
+ if not title_el:
38
+ continue
41
39
 
42
- title = title_el.text(strip=True)
43
- href = self.fix_url(title_el.attrs.get("href"))
44
-
45
- img_el = helper.select_first("img", item)
46
- poster = self.fix_url(img_el.attrs.get("data-src") or img_el.attrs.get("src")) if img_el else None
40
+ title = title_el.text(strip=True)
41
+ href = self.fix_url(title_el.attrs.get("href"))
42
+ poster = self.fix_url(secici.select_poster("img", item))
47
43
 
48
44
  results.append(MainPageResult(
49
45
  category = category,
@@ -51,26 +47,24 @@ class Filmatek(PluginBase):
51
47
  url = href,
52
48
  poster = poster
53
49
  ))
54
-
50
+
55
51
  return results
56
52
 
57
53
  async def search(self, query: str) -> list[SearchResult]:
58
- url = f"{self.main_url}/?s={query}"
59
- istek = await self.httpx.get(url)
60
- helper = HTMLHelper(istek.text)
54
+ istek = await self.httpx.get(f"{self.main_url}/?s={query}")
55
+ secici = HTMLHelper(istek.text)
61
56
 
62
- items = helper.select("div.result-item")
57
+ items = secici.select("div.result-item")
63
58
  results = []
64
59
 
65
60
  for item in items:
66
- title_el = helper.select_first("div.title a", item)
67
- if not title_el: continue
61
+ title_el = secici.select_first("div.title a", item)
62
+ if not title_el:
63
+ continue
68
64
 
69
- title = title_el.text(strip=True)
70
- href = self.fix_url(title_el.attrs.get("href"))
71
-
72
- img_el = helper.select_first("div.image img", item)
73
- poster = self.fix_url(img_el.attrs.get("src")) if img_el else None
65
+ title = title_el.text(strip=True)
66
+ href = self.fix_url(title_el.attrs.get("href"))
67
+ poster = self.fix_url(secici.select_poster("div.image img", item))
74
68
 
75
69
  results.append(SearchResult(
76
70
  title = title,
@@ -82,76 +76,86 @@ class Filmatek(PluginBase):
82
76
 
83
77
  async def load_item(self, url: str) -> MovieInfo:
84
78
  istek = await self.httpx.get(url)
85
- helper = HTMLHelper(istek.text)
79
+ secici = HTMLHelper(istek.text)
86
80
 
87
- title = self.clean_title(helper.select_text("div.data h1, h1"))
88
- poster = helper.select_poster("div.poster img") or helper.select_attr("meta[property='og:image']", "content")
89
- description = helper.select_text("div.wp-content p") or helper.select_attr("meta[property='og:description']", "content")
90
- year = helper.extract_year("span.date")
91
- rating = helper.select_text("span.dt_rating_vgs") or helper.select_text("span.dt_rating_vmanual")
92
- duration = helper.regex_first(r"(\d+)", helper.select_text("span.runtime"))
93
- tags = helper.select_texts("div.sgeneros a")
94
- actors = helper.select_texts("div.person div.name a")
81
+ title = self.clean_title(secici.select_text("div.data h1, h1"))
82
+ poster = secici.select_poster("div.poster img") or secici.select_attr("meta[property='og:image']", "content")
83
+ description = secici.select_text("div.wp-content p") or secici.select_attr("meta[property='og:description']", "content")
84
+ year = secici.extract_year("span.date")
85
+ rating = secici.select_text("span.dt_rating_vgs") or secici.select_text("span.dt_rating_vmanual")
86
+ duration = secici.regex_first(r"(\d+)", secici.select_text("span.runtime"))
87
+ tags = secici.select_texts("div.sgeneros a")
88
+ actors = secici.select_texts("div.person div.name a")
95
89
 
96
90
  return MovieInfo(
97
91
  url = url,
98
- title = title or "Bilinmiyor",
92
+ title = title,
99
93
  description = description,
100
- poster = self.fix_url(poster) if poster else None,
101
- year = str(year) if year else None,
94
+ poster = self.fix_url(poster),
95
+ year = year,
102
96
  rating = rating,
103
- duration = int(duration) if duration else None,
97
+ duration = duration,
104
98
  tags = tags,
105
99
  actors = actors
106
100
  )
107
101
 
108
102
  async def load_links(self, url: str) -> list[ExtractResult]:
109
- istek = await self.httpx.get(url)
110
- html = istek.text
111
- helper = HTMLHelper(html)
112
-
113
- # Get Post ID from body class usually "postid-123"
114
- body_class = helper.select_attr("body", "class") or ""
115
- post_id_match = re.search(r"postid-(\d+)", body_class)
116
-
103
+ istek = await self.httpx.get(url)
104
+ secici = HTMLHelper(istek.text)
105
+
106
+ # Player seçeneklerini bul
107
+ options = secici.select("div#playeroptions ul.ajax_mode li.dooplay_player_option")
108
+ if not options:
109
+ # Fallback: Body class'tan post_id
110
+ body_class = secici.select_attr("body", "class") or ""
111
+ if pid := secici.regex_first(r"postid-(\d+)", body_class):
112
+ options = [{"data-post": pid, "data-nume": "1", "data-type": "movie", "title": "Varsayılan"}]
113
+ else:
114
+ options = []
115
+
117
116
  results = []
118
-
119
- if post_id_match:
120
- post_id = post_id_match.group(1)
121
-
122
- # AJAX request for player
123
- ajax_url = f"{self.main_url}/wp-admin/admin-ajax.php"
124
- data = {
125
- "action": "doo_player_ajax",
126
- "post": post_id,
127
- "nume": "1", # Usually implies source number 1? Kotlin uses "1" hardcoded.
128
- "type": "movie"
129
- }
130
-
131
- headers = {
132
- "X-Requested-With": "XMLHttpRequest",
133
- "Referer": url,
134
- "Content-Type": "application/x-www-form-urlencoded"
135
- }
136
-
117
+
118
+ for opt in options:
119
+ if isinstance(opt, dict):
120
+ post_id = opt.get("data-post")
121
+ nume = opt.get("data-nume")
122
+ type_ = opt.get("data-type")
123
+ title = opt.get("title")
124
+ else:
125
+ post_id = opt.attrs.get("data-post")
126
+ nume = opt.attrs.get("data-nume")
127
+ type_ = opt.attrs.get("data-type")
128
+ title = secici.select_text("span.title", opt)
129
+
130
+ if not post_id or not nume:
131
+ continue
132
+
137
133
  try:
138
134
  # Need to use post with data
139
- player_resp = await self.httpx.post(ajax_url, data=data, headers=headers)
140
-
141
- # Kotlin parses it as text and cleans slashes
142
- content = player_resp.text.replace(r"\/", "/")
143
-
144
- # Regex for URL
145
- # Kotlin: (?:src|url)["']?\s*[:=]\s*["']([^"']+)["']
146
- src_match = re.search(r'(?:src|url)["\']?\s*[:=]\s*["\']([^"\']+)["\']', content)
147
-
148
- if src_match:
149
- iframe_url = src_match.group(1)
135
+ player_resp = await self.httpx.post(
136
+ url = f"{self.main_url}/wp-admin/admin-ajax.php",
137
+ headers = {
138
+ "X-Requested-With" : "XMLHttpRequest",
139
+ "Referer" : url,
140
+ "Content-Type" : "application/x-www-form-urlencoded"
141
+ },
142
+ data = {
143
+ "action" : "doo_player_ajax",
144
+ "post" : post_id,
145
+ "nume" : nume,
146
+ "type" : type_
147
+ }
148
+ )
149
+
150
+ content = player_resp.text.replace(r"\/", "/")
151
+ iframe_url = secici.regex_first(r'(?:src|url)["\']?\s*[:=]\s*["\']([^"\']+)["\']', content)
152
+
153
+ if iframe_url:
150
154
  if iframe_url.startswith("/"):
151
155
  iframe_url = self.main_url + iframe_url
152
-
156
+
153
157
  iframe_url = self.fix_url(iframe_url)
154
-
158
+
155
159
  # Unwrap internal JWPlayer
156
160
  if "jwplayer/?source=" in iframe_url:
157
161
  try:
@@ -159,19 +163,27 @@ class Filmatek(PluginBase):
159
163
  iframe_url = unquote(raw_source)
160
164
  except:
161
165
  pass
162
-
163
- extracted = await self.extract(iframe_url)
164
- if extracted:
165
- if isinstance(extracted, list):
166
- results.extend(extracted)
167
- else:
168
- results.append(extracted)
169
- else:
166
+
167
+ # Direct media files
168
+ if ".m3u8" in iframe_url or ".mp4" in iframe_url:
170
169
  results.append(ExtractResult(
171
- name = "Filmatek | External",
172
- url = iframe_url,
170
+ name = f"{title} | Direct",
171
+ url = iframe_url,
173
172
  referer = url
174
173
  ))
174
+ else:
175
+ extracted = await self.extract(iframe_url, prefix=title)
176
+ if extracted:
177
+ if isinstance(extracted, list):
178
+ results.extend(extracted)
179
+ else:
180
+ results.append(extracted)
181
+ else:
182
+ results.append(ExtractResult(
183
+ name = f"{title} | External",
184
+ url = iframe_url,
185
+ referer = url
186
+ ))
175
187
  except Exception as e:
176
188
  # print(f"Filmatek Error: {e}")
177
189
  pass
@@ -114,10 +114,10 @@ class Full4kizle(PluginBase):
114
114
  if not ep_elements:
115
115
  return MovieInfo(
116
116
  url = url,
117
- title = title or "Bilinmiyor",
117
+ title = title,
118
118
  description = description,
119
- poster = self.fix_url(poster) if poster else None,
120
- year = str(year) if year else None,
119
+ poster = self.fix_url(poster),
120
+ year = year,
121
121
  rating = rating,
122
122
  duration = duration,
123
123
  tags = tags,
@@ -133,10 +133,10 @@ class Full4kizle(PluginBase):
133
133
 
134
134
  return SeriesInfo(
135
135
  url = url,
136
- title = title or "Bilinmiyor",
136
+ title = title,
137
137
  description = description,
138
- poster = self.fix_url(poster) if poster else None,
139
- year = str(year) if year else None,
138
+ poster = self.fix_url(poster),
139
+ year = year,
140
140
  rating = rating,
141
141
  duration = duration,
142
142
  tags = tags,
@@ -60,7 +60,7 @@ class FullHDFilm(PluginBase):
60
60
  category = category,
61
61
  title = alt,
62
62
  url = self.fix_url(href),
63
- poster = self.fix_url(poster) if poster else None,
63
+ poster = self.fix_url(poster),
64
64
  ))
65
65
 
66
66
  return results
@@ -79,7 +79,7 @@ class FullHDFilm(PluginBase):
79
79
  results.append(SearchResult(
80
80
  title = alt,
81
81
  url = self.fix_url(href),
82
- poster = self.fix_url(poster) if poster else None,
82
+ poster = self.fix_url(poster),
83
83
  ))
84
84
 
85
85
  return results
@@ -110,13 +110,13 @@ class FullHDFilm(PluginBase):
110
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
111
 
112
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
113
+ url=url, poster=self.fix_url(poster), title=title, description=description,
114
+ tags=tags, year=year, actors=actors, rating=rating, episodes=episodes
115
115
  )
116
116
 
117
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
118
+ url=url, poster=self.fix_url(poster), title=title, description=description,
119
+ tags=tags, year=year, actors=actors, rating=rating
120
120
  )
121
121
 
122
122
  def _get_iframe(self, source_code: str) -> str:
@@ -54,7 +54,7 @@ class FullHDFilmizlesene(PluginBase):
54
54
  category = category,
55
55
  title = title,
56
56
  url = self.fix_url(href),
57
- poster = self.fix_url(poster) if poster else None,
57
+ poster = self.fix_url(poster),
58
58
  ))
59
59
 
60
60
  return results
@@ -73,7 +73,7 @@ class FullHDFilmizlesene(PluginBase):
73
73
  results.append(SearchResult(
74
74
  title = title,
75
75
  url = self.fix_url(href),
76
- poster = self.fix_url(poster) if poster else None,
76
+ poster = self.fix_url(poster),
77
77
  ))
78
78
 
79
79
  return results
@@ -93,12 +93,12 @@ class FullHDFilmizlesene(PluginBase):
93
93
 
94
94
  return MovieInfo(
95
95
  url = url,
96
- poster = self.fix_url(poster) if poster else None,
97
- title = title or "Bilinmiyor",
96
+ poster = self.fix_url(poster),
97
+ title = title,
98
98
  description = description,
99
99
  tags = tags,
100
100
  rating = rating,
101
- year = str(year) if year else None,
101
+ year = year,
102
102
  actors = actors,
103
103
  duration = duration
104
104
  )
@@ -129,8 +129,7 @@ class FullHDFilmizlesene(PluginBase):
129
129
 
130
130
  response = []
131
131
  for link in link_list:
132
- link = f"https:{link}" if link.startswith("//") else link
133
- data = await self.extract(link)
132
+ data = await self.extract(self.fix_url(link))
134
133
  if data:
135
134
  response.append(data)
136
135
 
@@ -43,7 +43,7 @@ class HDFilmCehennemi(PluginBase):
43
43
  category = category,
44
44
  title = title,
45
45
  url = self.fix_url(href),
46
- poster = self.fix_url(poster) if poster else None,
46
+ poster = self.fix_url(poster),
47
47
  ))
48
48
 
49
49
  return results
@@ -101,12 +101,12 @@ class HDFilmCehennemi(PluginBase):
101
101
  episodes.append(Episode(season=s or 1, episode=e or 1, title=name, url=self.fix_url(href)))
102
102
 
103
103
  return SeriesInfo(
104
- url=url, poster=self.fix_url(poster) if poster else None, title=title or "Bilinmiyor",
104
+ url=url, poster=self.fix_url(poster), title=title,
105
105
  description=description, tags=tags, rating=rating, year=year, actors=actors, episodes=episodes
106
106
  )
107
107
 
108
108
  return MovieInfo(
109
- url=url, poster=self.fix_url(poster) if poster else None, title=title or "Bilinmiyor",
109
+ url=url, poster=self.fix_url(poster), title=title,
110
110
  description=description, tags=tags, rating=rating, year=year, actors=actors, duration=duration
111
111
  )
112
112
 
@@ -59,7 +59,7 @@ class JetFilmizle(PluginBase):
59
59
  category = category,
60
60
  title = title,
61
61
  url = self.fix_url(href),
62
- poster = self.fix_url(poster) if poster else None,
62
+ poster = self.fix_url(poster),
63
63
  ))
64
64
 
65
65
  return results
@@ -90,7 +90,7 @@ class JetFilmizle(PluginBase):
90
90
  results.append(SearchResult(
91
91
  title = title,
92
92
  url = self.fix_url(href),
93
- poster = self.fix_url(poster) if poster else None,
93
+ poster = self.fix_url(poster),
94
94
  ))
95
95
 
96
96
  return results
@@ -119,12 +119,12 @@ class JetFilmizle(PluginBase):
119
119
 
120
120
  return MovieInfo(
121
121
  url = url,
122
- poster = self.fix_url(poster) if poster else None,
123
- title = title or "Bilinmiyor",
122
+ poster = self.fix_url(poster),
123
+ title = title,
124
124
  description = description,
125
125
  tags = tags,
126
126
  rating = rating,
127
- year = str(year) if year else None,
127
+ year = year,
128
128
  actors = actors,
129
129
  duration = int(total_minutes) if duration else None
130
130
  )
@@ -50,7 +50,7 @@ class KultFilmler(PluginBase):
50
50
  category = category,
51
51
  title = title,
52
52
  url = self.fix_url(href),
53
- poster = self.fix_url(poster) if poster else None,
53
+ poster = self.fix_url(poster),
54
54
  ))
55
55
 
56
56
  return results
@@ -69,7 +69,7 @@ class KultFilmler(PluginBase):
69
69
  results.append(SearchResult(
70
70
  title = title,
71
71
  url = self.fix_url(href),
72
- poster = self.fix_url(poster) if poster else None,
72
+ poster = self.fix_url(poster),
73
73
  ))
74
74
 
75
75
  return results
@@ -99,13 +99,13 @@ class KultFilmler(PluginBase):
99
99
  episodes.append(Episode(season=s or 1, episode=e or 1, title=name, url=self.fix_url(href)))
100
100
 
101
101
  return SeriesInfo(
102
- url=url, poster=poster, title=title or "Bilinmiyor", description=description,
103
- tags=tags, year=str(year) if year else None, actors=actors, rating=rating, episodes=episodes
102
+ url=url, poster=poster, title=title, description=description,
103
+ tags=tags, year=year, actors=actors, rating=rating, episodes=episodes
104
104
  )
105
105
 
106
106
  return MovieInfo(
107
- url=url, poster=poster, title=title or "Bilinmiyor", description=description,
108
- tags=tags, year=str(year) if year else None, rating=rating, actors=actors, duration=duration
107
+ url=url, poster=poster, title=title, description=description,
108
+ tags=tags, year=year, rating=rating, actors=actors, duration=duration
109
109
  )
110
110
 
111
111
  def _get_iframe(self, source_code: str) -> str:
@@ -38,7 +38,7 @@ class RoketDizi(PluginBase):
38
38
  category = category,
39
39
  title = self.clean_title(title),
40
40
  url = self.fix_url(href),
41
- poster = self.fix_url(poster) if poster else None
41
+ poster = self.fix_url(poster)
42
42
  ))
43
43
 
44
44
  return results
@@ -76,7 +76,7 @@ class RoketDizi(PluginBase):
76
76
  results.append(SearchResult(
77
77
  title = self.clean_title(title.strip()),
78
78
  url = self.fix_url(f"{self.main_url}/{slug}"),
79
- poster = self.fix_url(poster) if poster else None
79
+ poster = self.fix_url(poster)
80
80
  ))
81
81
 
82
82
  return results
@@ -138,7 +138,7 @@ class RoketDizi(PluginBase):
138
138
 
139
139
  return SeriesInfo(
140
140
  url = url,
141
- poster = self.fix_url(poster) if poster else None,
141
+ poster = self.fix_url(poster),
142
142
  title = self.clean_title(title),
143
143
  description = description,
144
144
  tags = tags,
@@ -150,7 +150,7 @@ class RoketDizi(PluginBase):
150
150
  else:
151
151
  return MovieInfo(
152
152
  url = url,
153
- poster = self.fix_url(poster) if poster else None,
153
+ poster = self.fix_url(poster),
154
154
  title = self.clean_title(title),
155
155
  description = description,
156
156
  tags = tags,
@@ -191,7 +191,7 @@ class RoketDizi(PluginBase):
191
191
  iframe_url = HTMLHelper(source_content).regex_first(r'<iframe[^>]*src=["\']([^"\']*)["\']')
192
192
  if not iframe_url:
193
193
  continue
194
-
194
+
195
195
  # Fix URL protocol
196
196
  if not iframe_url.startswith("http"):
197
197
  if iframe_url.startswith("//"):
@@ -52,7 +52,7 @@ class SelcukFlix(PluginBase):
52
52
  category = category,
53
53
  title = title,
54
54
  url = final_url,
55
- poster = self.fix_url(poster) if poster else None
55
+ poster = self.fix_url(poster)
56
56
  ))
57
57
  except Exception:
58
58
  pass
@@ -227,7 +227,7 @@ class SelcukFlix(PluginBase):
227
227
  common_info = {
228
228
  "url" : url,
229
229
  "poster" : poster,
230
- "title" : title or "Bilinmiyor",
230
+ "title" : title,
231
231
  "description" : description,
232
232
  "tags" : tags,
233
233
  "rating" : rating,