KekikStream 2.4.3__py3-none-any.whl → 2.4.4__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,136 +10,98 @@ 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")
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 = secici.meta_value("Süre")
130
84
  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")
85
+ tags = secici.meta_list("Tür")
86
+
87
+ actors = secici.meta_list("Oyuncular")
88
+ if not actors:
89
+ actors = secici.select_attrs("div.swiper-slide a", "title")
133
90
 
134
91
  if "/dizi/" in url:
135
- title = secici.select_text("div.cover h5")
136
92
  episodes = []
137
93
  for ep in secici.select("div.episode-item"):
138
- name = secici.select_text("div.name", ep)
94
+ name = secici.select_text("h4 a", ep)
139
95
  href = secici.select_attr("a", "href", ep)
140
- text = secici.select_text("div.episode", ep)
96
+ link_title = secici.select_attr("a", "title", ep)
97
+
98
+ h4_texts = secici.select_texts("h4", ep)
99
+ text = h4_texts[1] if len(h4_texts) > 1 else (h4_texts[0] if h4_texts else "")
100
+
101
+ full_text = f"{text} {link_title}" if link_title else text
102
+
141
103
  if name and href:
142
- s, e = secici.extract_season_episode(text or "")
104
+ s, e = secici.extract_season_episode(full_text or "")
143
105
  episodes.append(Episode(season=s, episode=e, title=name, url=self.fix_url(href)))
144
106
 
145
107
  return SeriesInfo(
@@ -147,10 +109,6 @@ class DiziPal(PluginBase):
147
109
  rating=rating, year=year, duration=duration, episodes=episodes or None, actors=actors
148
110
  )
149
111
 
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
112
  return MovieInfo(
155
113
  url=url, poster=poster, title=title, description=description, tags=tags,
156
114
  rating=rating, year=year, duration=duration, actors=actors
@@ -166,9 +124,7 @@ class DiziPal(PluginBase):
166
124
  istek = await self.httpx.get(url)
167
125
  secici = HTMLHelper(istek.text)
168
126
 
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")
127
+ iframe = secici.select_attr("div.video-player-area iframe", "src") or secici.select_attr("div.responsive-player iframe", "src")
172
128
  if not iframe:
173
129
  return []
174
130
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 2.4.3
3
+ Version: 2.4.4
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=gDj_7iJaP5WIoRWKZmvF6Q6nbPm8TBw9jAjbk_E75NA,7352
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.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
89
+ kekikstream-2.4.4.dist-info/METADATA,sha256=LuV2Kn0ryFqkcYJXMYXpUheRWJRsD8rTpAJRY0baJFw,10745
90
+ kekikstream-2.4.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
91
+ kekikstream-2.4.4.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
92
+ kekikstream-2.4.4.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
93
+ kekikstream-2.4.4.dist-info/RECORD,,