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.
- KekikStream/Plugins/DiziPal.py +77 -108
- {kekikstream-2.4.3.dist-info → kekikstream-2.4.5.dist-info}/METADATA +1 -1
- {kekikstream-2.4.3.dist-info → kekikstream-2.4.5.dist-info}/RECORD +7 -7
- {kekikstream-2.4.3.dist-info → kekikstream-2.4.5.dist-info}/WHEEL +0 -0
- {kekikstream-2.4.3.dist-info → kekikstream-2.4.5.dist-info}/entry_points.txt +0 -0
- {kekikstream-2.4.3.dist-info → kekikstream-2.4.5.dist-info}/licenses/LICENSE +0 -0
- {kekikstream-2.4.3.dist-info → kekikstream-2.4.5.dist-info}/top_level.txt +0 -0
KekikStream/Plugins/DiziPal.py
CHANGED
|
@@ -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}/
|
|
14
|
-
f"{main_url}/
|
|
15
|
-
f"{main_url}/
|
|
16
|
-
f"{main_url}/
|
|
17
|
-
f"{main_url}/
|
|
18
|
-
f"{main_url}/
|
|
19
|
-
f"{main_url}/
|
|
20
|
-
f"{main_url}/
|
|
21
|
-
f"{main_url}/
|
|
22
|
-
f"{main_url}/
|
|
23
|
-
f"{main_url}/
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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.
|
|
69
|
-
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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("
|
|
107
|
+
name = secici.select_text("h4 a", ep)
|
|
139
108
|
href = secici.select_attr("a", "href", ep)
|
|
140
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
+
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=
|
|
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.
|
|
89
|
-
kekikstream-2.4.
|
|
90
|
-
kekikstream-2.4.
|
|
91
|
-
kekikstream-2.4.
|
|
92
|
-
kekikstream-2.4.
|
|
93
|
-
kekikstream-2.4.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|