KekikStream 2.4.3__py3-none-any.whl → 2.4.5__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.
@@ -10,149 +10,120 @@ class DiziPal(PluginBase):
10
10
  description = "dizipal güncel, dizipal yeni ve gerçek adresi. dizipal en yeni dizi ve filmleri güvenli ve hızlı şekilde sunar."
11
11
 
12
12
  main_page = {
13
- f"{main_url}/diziler/son-bolumler" : "Son Bölümler",
14
- f"{main_url}/diziler" : "Yeni Diziler",
15
- f"{main_url}/filmler" : "Yeni Filmler",
16
- f"{main_url}/koleksiyon/netflix" : "Netflix",
17
- f"{main_url}/koleksiyon/exxen" : "Exxen",
18
- f"{main_url}/koleksiyon/blutv" : "BluTV",
19
- f"{main_url}/koleksiyon/disney" : "Disney+",
20
- f"{main_url}/koleksiyon/amazon-prime" : "Amazon Prime",
21
- f"{main_url}/koleksiyon/tod-bein" : "TOD (beIN)",
22
- f"{main_url}/koleksiyon/gain" : "Gain",
23
- f"{main_url}/tur/mubi" : "Mubi",
13
+ f"{main_url}/kategori/aile/page/" : "Aile",
14
+ f"{main_url}/kategori/aksiyon/page/" : "Aksiyon",
15
+ f"{main_url}/kategori/animasyon/page/" : "Animasyon",
16
+ f"{main_url}/kategori/belgesel/page/" : "Belgesel",
17
+ f"{main_url}/kategori/bilim-kurgu/page/" : "Bilim Kurgu",
18
+ f"{main_url}/kategori/dram/page/" : "Dram",
19
+ f"{main_url}/kategori/fantastik/page/" : "Fantastik",
20
+ f"{main_url}/kategori/gerilim/page/" : "Gerilim",
21
+ f"{main_url}/kategori/gizem/page/" : "Gizem",
22
+ f"{main_url}/kategori/komedi/page/" : "Komedi",
23
+ f"{main_url}/kategori/korku/page/" : "Korku",
24
+ f"{main_url}/kategori/macera/page/" : "Macera",
25
+ f"{main_url}/kategori/muzik/page/" : "Müzik",
26
+ f"{main_url}/kategori/romantik/page/" : "Romantik",
27
+ f"{main_url}/kategori/savas/page/" : "Savaş",
28
+ f"{main_url}/kategori/suc/page/" : "Suç",
29
+ f"{main_url}/kategori/tarih/page/" : "Tarih",
30
+ f"{main_url}/kategori/vahsi-bati/page/" : "Vahşi Batı",
31
+ f"{main_url}/kategori/yerli/page/" : "Yerli",
24
32
  }
25
33
 
26
34
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
27
- istek = await self.httpx.get(url)
35
+ istek = await self.httpx.get(f"{url}{page}/")
28
36
  secici = HTMLHelper(istek.text)
29
37
 
30
38
  results = []
31
-
32
- if "/son-bolumler" in url:
33
- for veri in secici.select("div.episode-item"):
34
- name = secici.select_text("div.name", veri)
35
- episode = secici.select_text("div.episode", veri)
36
- href = secici.select_attr("a", "href", veri)
37
- poster = secici.select_attr("img", "src", veri)
38
-
39
- if name and href:
40
- ep_text = episode.replace(". Sezon ", "x").replace(". Bölüm", "") if episode else ""
41
- title = f"{name} {ep_text}"
42
- # Son bölümler linkini dizi sayfasına çevir
43
- dizi_url = href.split("/sezon")[0] if "/sezon" in href else href
44
-
45
- results.append(MainPageResult(
46
- category = category,
47
- title = title,
48
- url = self.fix_url(dizi_url),
49
- poster = self.fix_url(poster) if poster else None,
50
- ))
51
- else:
52
- for veri in secici.select("article.type2 ul li"):
53
- title = secici.select_text("span.title", veri)
54
- href = secici.select_attr("a", "href", veri)
55
- poster = secici.select_attr("img", "src", veri)
56
-
57
- if title and href:
58
- results.append(MainPageResult(
59
- category = category,
60
- title = title,
61
- url = self.fix_url(href),
62
- poster = self.fix_url(poster) if poster else None,
63
- ))
39
+ for veri in secici.select("div.grid div.post-item"):
40
+ title = secici.select_attr("a", "title", veri)
41
+ href = secici.select_attr("a", "href", veri)
42
+ poster = secici.select_poster("div.poster img", veri)
43
+
44
+ if title and href:
45
+ results.append(MainPageResult(
46
+ category = category,
47
+ title = title,
48
+ url = self.fix_url(href),
49
+ poster = self.fix_url(poster) if poster else None,
50
+ ))
64
51
 
65
52
  return results
66
53
 
67
54
  async def search(self, query: str) -> list[SearchResult]:
68
- self.httpx.headers.update({
69
- "Accept" : "application/json, text/javascript, */*; q=0.01",
70
- "X-Requested-With" : "XMLHttpRequest"
71
- })
72
-
73
- istek = await self.httpx.post(
74
- url = f"{self.main_url}/api/search-autocomplete",
75
- data = {"query": query}
76
- )
77
-
78
- try:
79
- data = istek.json()
80
- except Exception:
81
- return []
55
+ istek = await self.httpx.get(f"{self.main_url}/?s={query}")
56
+ secici = HTMLHelper(istek.text)
82
57
 
83
58
  results = []
59
+ for veri in secici.select("div.grid div.post-item"):
60
+ title = secici.select_attr("a", "title", veri)
61
+ href = secici.select_attr("a", "href", veri)
62
+ poster = secici.select_poster("div.poster img", veri)
84
63
 
85
- # API bazen dict, bazen list döner
86
- items = data.values() if isinstance(data, dict) else data
87
-
88
- for item in items:
89
- if not isinstance(item, dict):
90
- continue
91
-
92
- title = item.get("title")
93
- url = item.get("url")
94
- poster = item.get("poster")
95
-
96
- if title and url:
64
+ if title and href:
97
65
  results.append(SearchResult(
98
66
  title = title,
99
- url = f"{self.main_url}{url}",
67
+ url = self.fix_url(href),
100
68
  poster = self.fix_url(poster) if poster else None,
101
69
  ))
102
70
 
103
71
  return results
104
72
 
105
- def _find_sibling_text(self, secici: HTMLHelper, label_text: str) -> str | None:
106
- """Bir label'ın kardeş div'inden text çıkarır (xpath yerine)"""
107
- for div in secici.select("div"):
108
- if secici.select_text(element=div) == label_text:
109
- # Sonraki kardeş elementi bul
110
- next_sibling = div.next
111
- while next_sibling:
112
- if hasattr(next_sibling, 'text') and next_sibling.text(strip=True):
113
- return next_sibling.text(strip=True)
114
- next_sibling = next_sibling.next if hasattr(next_sibling, 'next') else None
115
- return None
116
-
117
73
  async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
118
- # Reset headers to get HTML response
119
- self.httpx.headers.update({"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"})
120
- self.httpx.headers.pop("X-Requested-With", None)
121
-
122
74
  istek = await self.httpx.get(url)
123
75
  secici = HTMLHelper(istek.text)
124
76
 
125
77
  poster = self.fix_url(secici.select_attr("meta[property='og:image']", "content"))
126
- description = secici.select_text("div.summary p")
127
- year = secici.meta_value("Yapım Yılı", container_selector="div.sidebar")
128
- rating = secici.meta_value("IMDB Puanı", container_selector="div.sidebar")
129
- duration = secici.meta_value("Ortalama Süre", container_selector="div.sidebar")
130
- duration = int(secici.regex_first(r"(\d+)", duration)) if duration else None
131
- tags = secici.meta_list("Türler", sep=" ", container_selector="div.sidebar")
132
- actors = secici.meta_list("Oyuncular", container_selector="div.sidebar")
78
+ description = secici.select_attr("meta[property='og:description']", "content")
79
+ title = secici.select_text("h1")
80
+
81
+ year = secici.meta_value("Yapım Yılı")
82
+ rating = secici.meta_value("IMDB Puanı")
83
+ duration_raw = secici.meta_value("Süre")
84
+ if duration_raw:
85
+ parts = duration_raw.split()
86
+ saat = 0
87
+ dakika = 0
88
+
89
+ for p in parts:
90
+ if "s" in p:
91
+ saat = int(p.replace("s", ""))
92
+ elif "dk" in p:
93
+ dakika = int(p.replace("dk", ""))
94
+
95
+ duration = saat * 60 + dakika
96
+ else:
97
+ duration = None
98
+
99
+ tags = secici.meta_list("Tür")
100
+ actors = secici.meta_list("Oyuncular")
101
+ if not actors:
102
+ actors = secici.select_attrs("div.swiper-slide a", "title")
133
103
 
134
104
  if "/dizi/" in url:
135
- title = secici.select_text("div.cover h5")
136
105
  episodes = []
137
106
  for ep in secici.select("div.episode-item"):
138
- name = secici.select_text("div.name", ep)
107
+ name = secici.select_text("h4 a", ep)
139
108
  href = secici.select_attr("a", "href", ep)
140
- text = secici.select_text("div.episode", ep)
109
+ link_title = secici.select_attr("a", "title", ep)
110
+
111
+ h4_texts = secici.select_texts("h4", ep)
112
+ text = h4_texts[1] if len(h4_texts) > 1 else (h4_texts[0] if h4_texts else "")
113
+
114
+ full_text = f"{text} {link_title}" if link_title else text
115
+
141
116
  if name and href:
142
- s, e = secici.extract_season_episode(text or "")
117
+ s, e = secici.extract_season_episode(full_text or "")
143
118
  episodes.append(Episode(season=s, episode=e, title=name, url=self.fix_url(href)))
144
119
 
145
120
  return SeriesInfo(
146
- url=url, poster=poster, title=title, description=description, tags=tags,
121
+ url=url, poster=poster.replace("https://test4test.online", self.main_url), title=title, description=description, tags=tags,
147
122
  rating=rating, year=year, duration=duration, episodes=episodes or None, actors=actors
148
123
  )
149
124
 
150
- # Film için title - g-title div'lerinin 2. olanı
151
- g_titles = secici.select("div.g-title div")
152
- title = secici.select_text(element=g_titles[1]) if len(g_titles) >= 2 else None
153
-
154
125
  return MovieInfo(
155
- url=url, poster=poster, title=title, description=description, tags=tags,
126
+ url=url, poster=poster.replace("https://test4test.online", self.main_url), title=title, description=description, tags=tags,
156
127
  rating=rating, year=year, duration=duration, actors=actors
157
128
  )
158
129
 
@@ -166,9 +137,7 @@ class DiziPal(PluginBase):
166
137
  istek = await self.httpx.get(url)
167
138
  secici = HTMLHelper(istek.text)
168
139
 
169
- # iframe presence checked via select_attr below
170
-
171
- iframe = secici.select_attr(".series-player-container iframe", "src") or secici.select_attr("div#vast_new iframe", "src")
140
+ iframe = secici.select_attr("div.video-player-area iframe", "src") or secici.select_attr("div.responsive-player iframe", "src")
172
141
  if not iframe:
173
142
  return []
174
143
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 2.4.3
3
+ Version: 2.4.5
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
@@ -58,7 +58,7 @@ KekikStream/Extractors/YildizKisaFilm.py,sha256=jeCCSIwZvQUr-CSylleUIP--JtN18_wU
58
58
  KekikStream/Plugins/BelgeselX.py,sha256=0LZYeV8ve2HGsNvuqACltP7eI_nZyjoCBjeYWMokUXY,9175
59
59
  KekikStream/Plugins/DiziBox.py,sha256=F0X_vUVFbzFIgo504dyXjJkJIB6OxoHRxD3CCBUNsxg,10087
60
60
  KekikStream/Plugins/DiziMom.py,sha256=0kOXekDk9-I-rRgQZmKH0pZmYDgfdkS2PXOBbTlhI0g,6776
61
- KekikStream/Plugins/DiziPal.py,sha256=xpaIEOknrMVWNUERKE6DVq533oFwe87TFOdBckMj03Y,9278
61
+ KekikStream/Plugins/DiziPal.py,sha256=i3LLoEb4SGQPpR5KoFBlHHFKsnSqBvwlI3FueG-qckc,7745
62
62
  KekikStream/Plugins/DiziYou.py,sha256=ZgHVTEeXhLC5aNP7MeeIcmLxqAPPzj0WWOiZHHpkAho,6550
63
63
  KekikStream/Plugins/Dizilla.py,sha256=GmA__LCUAMTQ0tbbeWiH8h_aA6Rw7k2chAJZRsDifjg,12908
64
64
  KekikStream/Plugins/FilmBip.py,sha256=gHdYHEZjDBPkajQjqBZGVhbs97zDr5mF_cVSUKn8ljE,6018
@@ -85,9 +85,9 @@ KekikStream/Plugins/SuperFilmGeldi.py,sha256=wfhbZLNAuiz57KOarSrsoMLLpr9-zd6zjp7
85
85
  KekikStream/Plugins/UgurFilm.py,sha256=WIdyu8X1ZdixigumEwEpZjtbM-melHfvT_u5N349oN4,5116
86
86
  KekikStream/Plugins/Watch32.py,sha256=NeESk1unb5SYs6kwkb3dDymv2yYOkRU2QJCPI9izXKk,7915
87
87
  KekikStream/Plugins/YabanciDizi.py,sha256=cTAREfia6df-rLeXDhxLCrKRHeZI_l_-nhjgIAD1jNA,9975
88
- kekikstream-2.4.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
89
- kekikstream-2.4.3.dist-info/METADATA,sha256=n9A3nJA-FxNzZJ91jjw5QDLY7xXqIxw1_WAw6-g2C_w,10745
90
- kekikstream-2.4.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
91
- kekikstream-2.4.3.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
92
- kekikstream-2.4.3.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
93
- kekikstream-2.4.3.dist-info/RECORD,,
88
+ kekikstream-2.4.5.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
89
+ kekikstream-2.4.5.dist-info/METADATA,sha256=IRFNgfPTISNdJNBJHVccr0kaYu7GYJmhr5PNTkyiXP4,10745
90
+ kekikstream-2.4.5.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
91
+ kekikstream-2.4.5.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
92
+ kekikstream-2.4.5.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
93
+ kekikstream-2.4.5.dist-info/RECORD,,