KekikStream 1.2.2__py3-none-any.whl → 1.2.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.
- KekikStream/Core/Extractor/ExtractorBase.py +2 -2
- KekikStream/Core/Plugin/PluginBase.py +11 -8
- KekikStream/Extractors/CloseLoad.py +2 -2
- KekikStream/Extractors/ContentX.py +4 -4
- KekikStream/Extractors/MailRu.py +2 -2
- KekikStream/Extractors/MixPlayHD.py +2 -2
- KekikStream/Extractors/Odnoklassniki.py +3 -3
- KekikStream/Extractors/PeaceMakerst.py +4 -4
- KekikStream/Extractors/PixelDrain.py +1 -1
- KekikStream/Extractors/RapidVid.py +2 -2
- KekikStream/Extractors/SibNet.py +2 -2
- KekikStream/Extractors/Sobreatsesuyp.py +4 -4
- KekikStream/Extractors/TRsTX.py +4 -4
- KekikStream/Extractors/TauVideo.py +2 -2
- KekikStream/Extractors/TurboImgz.py +2 -2
- KekikStream/Extractors/VidMoly.py +3 -3
- KekikStream/Extractors/VidMoxy.py +2 -2
- KekikStream/Extractors/VideoSeyred.py +3 -3
- KekikStream/Plugins/DiziBox.py +17 -16
- KekikStream/Plugins/DiziYou.py +3 -3
- KekikStream/Plugins/Dizilla.py +7 -7
- KekikStream/Plugins/FilmMakinesi.py +3 -3
- KekikStream/Plugins/FullHDFilmizlesene.py +3 -3
- KekikStream/Plugins/{HdFilmCehennemi.py → HDFilmCehennemi.py} +58 -55
- KekikStream/Plugins/JetFilmizle.py +5 -5
- KekikStream/Plugins/SezonlukDizi.py +7 -7
- KekikStream/Plugins/Shorten.py +6 -6
- KekikStream/Plugins/SineWix.py +7 -6
- KekikStream/Plugins/UgurFilm.py +5 -5
- {kekikstream-1.2.2.dist-info → kekikstream-1.2.4.dist-info}/METADATA +1 -1
- kekikstream-1.2.4.dist-info/RECORD +62 -0
- kekikstream-1.2.2.dist-info/RECORD +0 -62
- {kekikstream-1.2.2.dist-info → kekikstream-1.2.4.dist-info}/LICENSE +0 -0
- {kekikstream-1.2.2.dist-info → kekikstream-1.2.4.dist-info}/WHEEL +0 -0
- {kekikstream-1.2.2.dist-info → kekikstream-1.2.4.dist-info}/entry_points.txt +0 -0
- {kekikstream-1.2.2.dist-info → kekikstream-1.2.4.dist-info}/top_level.txt +0 -0
@@ -14,7 +14,7 @@ class ExtractorBase(ABC):
|
|
14
14
|
|
15
15
|
def __init__(self):
|
16
16
|
# HTTP istekleri için oturum oluştur
|
17
|
-
self.
|
17
|
+
self.httpx = AsyncClient(
|
18
18
|
headers = {
|
19
19
|
"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5)",
|
20
20
|
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
@@ -35,7 +35,7 @@ class ExtractorBase(ABC):
|
|
35
35
|
|
36
36
|
async def close(self):
|
37
37
|
# HTTP oturumunu güvenli bir şekilde kapat
|
38
|
-
await self.
|
38
|
+
await self.httpx.aclose()
|
39
39
|
|
40
40
|
def fix_url(self, url: str) -> str:
|
41
41
|
# Eksik URL'leri düzelt ve tam URL formatına çevir
|
@@ -9,13 +9,16 @@ from urllib.parse import urljoin
|
|
9
9
|
import re
|
10
10
|
|
11
11
|
class PluginBase(ABC):
|
12
|
-
name
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
name = "Plugin"
|
13
|
+
language = "tr"
|
14
|
+
main_url = "https://example.com"
|
15
|
+
description = "No description provided."
|
16
|
+
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
17
|
+
main_page = {}
|
18
|
+
_data = {}
|
16
19
|
|
17
20
|
def __init__(self):
|
18
|
-
self.
|
21
|
+
self.httpx = AsyncClient(
|
19
22
|
headers = {
|
20
23
|
"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5)",
|
21
24
|
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
@@ -24,8 +27,8 @@ class PluginBase(ABC):
|
|
24
27
|
)
|
25
28
|
self.media_handler = MediaHandler()
|
26
29
|
self.cloudscraper = CloudScraper()
|
27
|
-
self.
|
28
|
-
self.
|
30
|
+
self.httpx.headers.update(self.cloudscraper.headers)
|
31
|
+
self.httpx.cookies.update(self.cloudscraper.cookies)
|
29
32
|
|
30
33
|
# @abstractmethod
|
31
34
|
# async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
@@ -48,7 +51,7 @@ class PluginBase(ABC):
|
|
48
51
|
pass
|
49
52
|
|
50
53
|
async def close(self):
|
51
|
-
await self.
|
54
|
+
await self.httpx.aclose()
|
52
55
|
|
53
56
|
def fix_url(self, url: str) -> str:
|
54
57
|
if not url:
|
@@ -10,9 +10,9 @@ class CloseLoadExtractor(ExtractorBase):
|
|
10
10
|
|
11
11
|
async def extract(self, url, referer=None) -> ExtractResult:
|
12
12
|
if referer:
|
13
|
-
self.
|
13
|
+
self.httpx.headers.update({"Referer": referer})
|
14
14
|
|
15
|
-
istek = await self.
|
15
|
+
istek = await self.httpx.get(url)
|
16
16
|
istek.raise_for_status()
|
17
17
|
|
18
18
|
secici = Selector(istek.text)
|
@@ -9,9 +9,9 @@ class ContentX(ExtractorBase):
|
|
9
9
|
|
10
10
|
async def extract(self, url, referer=None) -> list[ExtractResult]:
|
11
11
|
if referer:
|
12
|
-
self.
|
12
|
+
self.httpx.headers.update({"Referer": referer})
|
13
13
|
|
14
|
-
istek = await self.
|
14
|
+
istek = await self.httpx.get(url)
|
15
15
|
istek.raise_for_status()
|
16
16
|
i_source = istek.text
|
17
17
|
|
@@ -39,7 +39,7 @@ class ContentX(ExtractorBase):
|
|
39
39
|
)
|
40
40
|
)
|
41
41
|
|
42
|
-
vid_source_request = await self.
|
42
|
+
vid_source_request = await self.httpx.get(f"{self.main_url}/source2.php?v={i_extract_value}", headers={"Referer": referer or self.main_url})
|
43
43
|
vid_source_request.raise_for_status()
|
44
44
|
|
45
45
|
vid_source = vid_source_request.text
|
@@ -59,7 +59,7 @@ class ContentX(ExtractorBase):
|
|
59
59
|
|
60
60
|
if i_dublaj := re.search(r',\"([^"]+)\",\"Türkçe"', i_source):
|
61
61
|
dublaj_value = i_dublaj[1]
|
62
|
-
dublaj_source_request = await self.
|
62
|
+
dublaj_source_request = await self.httpx.get(f"{self.main_url}/source2.php?v={dublaj_value}", headers={"Referer": referer or self.main_url})
|
63
63
|
dublaj_source_request.raise_for_status()
|
64
64
|
|
65
65
|
dublaj_source = dublaj_source_request.text
|
KekikStream/Extractors/MailRu.py
CHANGED
@@ -11,9 +11,9 @@ class MailRuExtractor(ExtractorBase):
|
|
11
11
|
video_meta_url = f"{self.main_url}/+/video/meta/{vid_id}"
|
12
12
|
|
13
13
|
if referer:
|
14
|
-
self.
|
14
|
+
self.httpx.headers.update({"Referer": referer})
|
15
15
|
|
16
|
-
istek = await self.
|
16
|
+
istek = await self.httpx.get(video_meta_url)
|
17
17
|
istek.raise_for_status()
|
18
18
|
|
19
19
|
video_key = istek.cookies.get("video_key")
|
@@ -10,9 +10,9 @@ class MixPlayHD(ExtractorBase):
|
|
10
10
|
|
11
11
|
async def extract(self, url, referer=None) -> ExtractResult:
|
12
12
|
if referer:
|
13
|
-
self.
|
13
|
+
self.httpx.headers.update({"Referer": referer})
|
14
14
|
|
15
|
-
istek = await self.
|
15
|
+
istek = await self.httpx.get(url)
|
16
16
|
istek.raise_for_status()
|
17
17
|
|
18
18
|
be_player_match = re.search(r"bePlayer\('([^']+)',\s*'(\{[^\}]+\})'\);", istek.text)
|
@@ -9,9 +9,9 @@ class Odnoklassniki(ExtractorBase):
|
|
9
9
|
|
10
10
|
async def extract(self, url, referer=None) -> ExtractResult:
|
11
11
|
if referer:
|
12
|
-
self.
|
12
|
+
self.httpx.headers.update({"Referer": referer})
|
13
13
|
|
14
|
-
self.
|
14
|
+
self.httpx.headers.update({
|
15
15
|
"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36"
|
16
16
|
})
|
17
17
|
|
@@ -88,7 +88,7 @@ class Odnoklassniki(ExtractorBase):
|
|
88
88
|
"""Yönlendirmeleri takip eden bir fonksiyon"""
|
89
89
|
redirects = 0
|
90
90
|
while redirects < max_redirects:
|
91
|
-
istek = await self.
|
91
|
+
istek = await self.httpx.get(url, follow_redirects=False)
|
92
92
|
|
93
93
|
if istek.status_code not in [301, 302]:
|
94
94
|
break # Yönlendirme yoksa çık
|
@@ -9,14 +9,14 @@ class PeaceMakerst(ExtractorBase):
|
|
9
9
|
|
10
10
|
async def extract(self, url, referer=None) -> ExtractResult:
|
11
11
|
if referer:
|
12
|
-
self.
|
12
|
+
self.httpx.headers.update({"Referer": referer})
|
13
13
|
|
14
|
-
self.
|
14
|
+
self.httpx.headers.update({
|
15
15
|
"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8",
|
16
16
|
"X-Requested-With" : "XMLHttpRequest"
|
17
17
|
})
|
18
18
|
|
19
|
-
response = await self.
|
19
|
+
response = await self.httpx.post(
|
20
20
|
url = f"{url}?do=getVideo",
|
21
21
|
data = {
|
22
22
|
"hash" : url.split("video/")[-1],
|
@@ -33,7 +33,7 @@ class PeaceMakerst(ExtractorBase):
|
|
33
33
|
teve2_id = re.search(r"teve2\.com\.tr\\\/embed\\\/(\d+)", response_text)[1]
|
34
34
|
teve2_url = f"https://www.teve2.com.tr/action/media/{teve2_id}"
|
35
35
|
|
36
|
-
teve2_response = await self.
|
36
|
+
teve2_response = await self.httpx.get(teve2_url, headers={"Referer": f"https://www.teve2.com.tr/embed/{teve2_id}"})
|
37
37
|
teve2_response.raise_for_status()
|
38
38
|
teve2_json = teve2_response.json()
|
39
39
|
|
@@ -9,7 +9,7 @@ class PixelDrain(ExtractorBase):
|
|
9
9
|
|
10
10
|
async def extract(self, url, referer=None) -> ExtractResult:
|
11
11
|
if referer:
|
12
|
-
self.
|
12
|
+
self.httpx.headers.update({"Referer": referer})
|
13
13
|
|
14
14
|
pixel_id_match = re.search(r"/u/([^/?]+)|([^\/]+)(?=\?download)", url)
|
15
15
|
if not pixel_id_match:
|
@@ -10,9 +10,9 @@ class RapidVid(ExtractorBase):
|
|
10
10
|
|
11
11
|
async def extract(self, url, referer=None) -> ExtractResult:
|
12
12
|
if referer:
|
13
|
-
self.
|
13
|
+
self.httpx.headers.update({"Referer": referer})
|
14
14
|
|
15
|
-
istek = await self.
|
15
|
+
istek = await self.httpx.get(url)
|
16
16
|
istek.raise_for_status()
|
17
17
|
|
18
18
|
subtitles = []
|
KekikStream/Extractors/SibNet.py
CHANGED
@@ -9,9 +9,9 @@ class SibNet(ExtractorBase):
|
|
9
9
|
|
10
10
|
async def extract(self, url, referer=None) -> ExtractResult:
|
11
11
|
if referer:
|
12
|
-
self.
|
12
|
+
self.httpx.headers.update({"Referer": referer})
|
13
13
|
|
14
|
-
response = await self.
|
14
|
+
response = await self.httpx.get(url)
|
15
15
|
response.raise_for_status()
|
16
16
|
|
17
17
|
match = re.search(r'player\.src\(\[\{src: \"([^\"]+)\"', response.text)
|
@@ -9,9 +9,9 @@ class Sobreatsesuyp(ExtractorBase):
|
|
9
9
|
|
10
10
|
async def extract(self, url, referer=None) -> ExtractResult:
|
11
11
|
if referer:
|
12
|
-
self.
|
12
|
+
self.httpx.headers.update({"Referer": referer})
|
13
13
|
|
14
|
-
istek = await self.
|
14
|
+
istek = await self.httpx.get(url)
|
15
15
|
istek.raise_for_status()
|
16
16
|
|
17
17
|
file_match = re.search(r'file\":\"([^\"]+)', istek.text)
|
@@ -21,7 +21,7 @@ class Sobreatsesuyp(ExtractorBase):
|
|
21
21
|
file_path = file_match[1].replace("\\", "")
|
22
22
|
post_link = f"{self.main_url}/{file_path}"
|
23
23
|
|
24
|
-
post_istek = await self.
|
24
|
+
post_istek = await self.httpx.post(post_link)
|
25
25
|
post_istek.raise_for_status()
|
26
26
|
|
27
27
|
try:
|
@@ -41,7 +41,7 @@ class Sobreatsesuyp(ExtractorBase):
|
|
41
41
|
continue
|
42
42
|
|
43
43
|
playlist_url = f"{self.main_url}/playlist/{file.lstrip('/')}.txt"
|
44
|
-
playlist_request = await self.
|
44
|
+
playlist_request = await self.httpx.post(playlist_url, headers={"Referer": referer or self.main_url})
|
45
45
|
playlist_request.raise_for_status()
|
46
46
|
|
47
47
|
all_results.append(
|
KekikStream/Extractors/TRsTX.py
CHANGED
@@ -9,9 +9,9 @@ class TRsTX(ExtractorBase):
|
|
9
9
|
|
10
10
|
async def extract(self, url, referer=None) -> list[ExtractResult]:
|
11
11
|
if referer:
|
12
|
-
self.
|
12
|
+
self.httpx.headers.update({"Referer": referer})
|
13
13
|
|
14
|
-
istek = await self.
|
14
|
+
istek = await self.httpx.get(url)
|
15
15
|
istek.raise_for_status()
|
16
16
|
|
17
17
|
file_match = re.search(r'file\":\"([^\"]+)', istek.text)
|
@@ -21,7 +21,7 @@ class TRsTX(ExtractorBase):
|
|
21
21
|
file_path = file_match[1].replace("\\", "")
|
22
22
|
post_link = f"{self.main_url}/{file_path}"
|
23
23
|
|
24
|
-
post_istek = await self.
|
24
|
+
post_istek = await self.httpx.post(post_link)
|
25
25
|
post_istek.raise_for_status()
|
26
26
|
|
27
27
|
try:
|
@@ -42,7 +42,7 @@ class TRsTX(ExtractorBase):
|
|
42
42
|
continue
|
43
43
|
|
44
44
|
playlist_url = f"{self.main_url}/playlist/{file.lstrip('/')}.txt"
|
45
|
-
playlist_request = await self.
|
45
|
+
playlist_request = await self.httpx.post(playlist_url, headers={"Referer": referer or self.main_url})
|
46
46
|
playlist_request.raise_for_status()
|
47
47
|
|
48
48
|
video_data = playlist_request.text
|
@@ -8,12 +8,12 @@ class TauVideo(ExtractorBase):
|
|
8
8
|
|
9
9
|
async def extract(self, url, referer=None) -> list[ExtractResult]:
|
10
10
|
if referer:
|
11
|
-
self.
|
11
|
+
self.httpx.headers.update({"Referer": referer})
|
12
12
|
|
13
13
|
video_key = url.split("/")[-1]
|
14
14
|
api_url = f"{self.main_url}/api/video/{video_key}"
|
15
15
|
|
16
|
-
response = await self.
|
16
|
+
response = await self.httpx.get(api_url)
|
17
17
|
response.raise_for_status()
|
18
18
|
|
19
19
|
api_data = response.json()
|
@@ -9,9 +9,9 @@ class TurboImgz(ExtractorBase):
|
|
9
9
|
|
10
10
|
async def extract(self, url, referer=None) -> ExtractResult:
|
11
11
|
if referer:
|
12
|
-
self.
|
12
|
+
self.httpx.headers.update({"Referer": referer})
|
13
13
|
|
14
|
-
istek = await self.
|
14
|
+
istek = await self.httpx.get(url)
|
15
15
|
istek.raise_for_status()
|
16
16
|
|
17
17
|
if video_match := re.search(r'file: "(.*)",', istek.text):
|
@@ -10,9 +10,9 @@ class VidMoly(ExtractorBase):
|
|
10
10
|
|
11
11
|
async def extract(self, url: str, referer: str = None) -> ExtractResult:
|
12
12
|
if referer:
|
13
|
-
self.
|
13
|
+
self.httpx.headers.update({"Referer": referer})
|
14
14
|
|
15
|
-
self.
|
15
|
+
self.httpx.headers.update({
|
16
16
|
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
|
17
17
|
"Sec-Fetch-Dest" : "iframe",
|
18
18
|
})
|
@@ -29,7 +29,7 @@ class VidMoly(ExtractorBase):
|
|
29
29
|
# Script verisini almak için deneme yap
|
30
30
|
while attempts < 10 and not script_content:
|
31
31
|
attempts += 1
|
32
|
-
response = await self.
|
32
|
+
response = await self.httpx.get(embed_url)
|
33
33
|
response.raise_for_status()
|
34
34
|
|
35
35
|
script_match = re.search(r"sources:\s*\[(.*?)\],", response.text, re.DOTALL)
|
@@ -10,9 +10,9 @@ class VidMoxy(ExtractorBase):
|
|
10
10
|
|
11
11
|
async def extract(self, url, referer=None) -> ExtractResult:
|
12
12
|
if referer:
|
13
|
-
self.
|
13
|
+
self.httpx.headers.update({"Referer": referer})
|
14
14
|
|
15
|
-
istek = await self.
|
15
|
+
istek = await self.httpx.get(url)
|
16
16
|
istek.raise_for_status()
|
17
17
|
|
18
18
|
subtitles = []
|
@@ -9,18 +9,18 @@ class VideoSeyred(ExtractorBase):
|
|
9
9
|
|
10
10
|
async def extract(self, url, referer=None) -> ExtractResult:
|
11
11
|
if referer:
|
12
|
-
self.
|
12
|
+
self.httpx.headers.update({"Referer": referer})
|
13
13
|
|
14
14
|
video_id = url.split("embed/")[1].split("?")[0]
|
15
15
|
if len(video_id) > 10:
|
16
|
-
kontrol = await self.
|
16
|
+
kontrol = await self.httpx.get(url)
|
17
17
|
kontrol.raise_for_status()
|
18
18
|
|
19
19
|
video_id = re.search(r"playlist\/(.*)\.json", kontrol.text)[1]
|
20
20
|
|
21
21
|
video_url = f"{self.main_url}/playlist/{video_id}.json"
|
22
22
|
|
23
|
-
response = await self.
|
23
|
+
response = await self.httpx.get(video_url)
|
24
24
|
response.raise_for_status()
|
25
25
|
|
26
26
|
try:
|
KekikStream/Plugins/DiziBox.py
CHANGED
@@ -6,8 +6,9 @@ from parsel import Selector
|
|
6
6
|
import re, urllib.parse, base64, contextlib, asyncio
|
7
7
|
|
8
8
|
class DiziBox(PluginBase):
|
9
|
-
name
|
10
|
-
main_url
|
9
|
+
name = "DiziBox"
|
10
|
+
main_url = "https://www.dizibox.live"
|
11
|
+
description = "Yabancı Dizi izle, Tüm yabancı dizilerin yeni ve eski sezonlarını full hd izleyebileceğiniz elit site."
|
11
12
|
|
12
13
|
main_page = {
|
13
14
|
f"{main_url}/dizi-arsivi/page/SAYFA/?ulke[]=turkiye&yil=&imdb" : "Yerli",
|
@@ -38,7 +39,7 @@ class DiziBox(PluginBase):
|
|
38
39
|
}
|
39
40
|
|
40
41
|
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
41
|
-
istek = await self.
|
42
|
+
istek = await self.httpx.get(
|
42
43
|
url = f"{url.replace('SAYFA', str(page))}",
|
43
44
|
cookies = {
|
44
45
|
"LockUser" : "true",
|
@@ -60,12 +61,12 @@ class DiziBox(PluginBase):
|
|
60
61
|
]
|
61
62
|
|
62
63
|
async def search(self, query: str) -> list[SearchResult]:
|
63
|
-
self.
|
64
|
+
self.httpx.cookies.update({
|
64
65
|
"LockUser" : "true",
|
65
66
|
"isTrustedUser" : "true",
|
66
67
|
"dbxu" : "1722403730363"
|
67
68
|
})
|
68
|
-
istek = await self.
|
69
|
+
istek = await self.httpx.get(f"{self.main_url}/?s={query}")
|
69
70
|
secici = Selector(istek.text)
|
70
71
|
|
71
72
|
return [
|
@@ -78,7 +79,7 @@ class DiziBox(PluginBase):
|
|
78
79
|
]
|
79
80
|
|
80
81
|
async def load_item(self, url: str) -> SeriesInfo:
|
81
|
-
istek = await self.
|
82
|
+
istek = await self.httpx.get(url)
|
82
83
|
secici = Selector(istek.text)
|
83
84
|
|
84
85
|
title = secici.css("div.tv-overview h1 a::text").get()
|
@@ -92,7 +93,7 @@ class DiziBox(PluginBase):
|
|
92
93
|
episodes = []
|
93
94
|
for sezon_link in secici.css("div#seasons-list a::attr(href)").getall():
|
94
95
|
sezon_url = self.fix_url(sezon_link)
|
95
|
-
sezon_istek = await self.
|
96
|
+
sezon_istek = await self.httpx.get(sezon_url)
|
96
97
|
sezon_secici = Selector(sezon_istek.text)
|
97
98
|
|
98
99
|
for bolum in sezon_secici.css("article.grid-box"):
|
@@ -128,14 +129,14 @@ class DiziBox(PluginBase):
|
|
128
129
|
|
129
130
|
if "/player/king/king.php" in iframe_link:
|
130
131
|
iframe_link = iframe_link.replace("king.php?v=", "king.php?wmode=opaque&v=")
|
131
|
-
self.
|
132
|
+
self.httpx.headers.update({"Referer": referer})
|
132
133
|
|
133
|
-
istek = await self.
|
134
|
+
istek = await self.httpx.get(iframe_link)
|
134
135
|
secici = Selector(istek.text)
|
135
136
|
iframe = secici.css("div#Player iframe::attr(src)").get()
|
136
137
|
|
137
|
-
self.
|
138
|
-
istek = await self.
|
138
|
+
self.httpx.headers.update({"Referer": self.main_url})
|
139
|
+
istek = await self.httpx.get(iframe)
|
139
140
|
|
140
141
|
crypt_data = re.search(r"CryptoJS\.AES\.decrypt\(\"(.*)\",\"", istek.text)[1]
|
141
142
|
crypt_pass = re.search(r"\",\"(.*)\"\);", istek.text)[1]
|
@@ -148,11 +149,11 @@ class DiziBox(PluginBase):
|
|
148
149
|
|
149
150
|
elif "/player/moly/moly.php" in iframe_link:
|
150
151
|
iframe_link = iframe_link.replace("moly.php?h=", "moly.php?wmode=opaque&h=")
|
151
|
-
self.
|
152
|
+
self.httpx.headers.update({"Referer": referer})
|
152
153
|
while True:
|
153
154
|
await asyncio.sleep(.3)
|
154
155
|
with contextlib.suppress(Exception):
|
155
|
-
istek = await self.
|
156
|
+
istek = await self.httpx.get(iframe_link)
|
156
157
|
|
157
158
|
if atob_data := re.search(r"unescape\(\"(.*)\"\)", istek.text):
|
158
159
|
decoded_atob = urllib.parse.unquote(atob_data[1])
|
@@ -170,7 +171,7 @@ class DiziBox(PluginBase):
|
|
170
171
|
return results
|
171
172
|
|
172
173
|
async def load_links(self, url: str) -> list[str]:
|
173
|
-
istek = await self.
|
174
|
+
istek = await self.httpx.get(url)
|
174
175
|
secici = Selector(istek.text)
|
175
176
|
|
176
177
|
iframes = []
|
@@ -185,8 +186,8 @@ class DiziBox(PluginBase):
|
|
185
186
|
if not alt_link:
|
186
187
|
continue
|
187
188
|
|
188
|
-
self.
|
189
|
-
alt_istek = await self.
|
189
|
+
self.httpx.headers.update({"Referer": url})
|
190
|
+
alt_istek = await self.httpx.get(alt_link)
|
190
191
|
alt_istek.raise_for_status()
|
191
192
|
|
192
193
|
alt_secici = Selector(alt_istek.text)
|
KekikStream/Plugins/DiziYou.py
CHANGED
@@ -9,7 +9,7 @@ class DiziYou(PluginBase):
|
|
9
9
|
main_url = "https://www.diziyou1.com"
|
10
10
|
|
11
11
|
async def search(self, query: str) -> list[SearchResult]:
|
12
|
-
istek = await self.
|
12
|
+
istek = await self.httpx.get(f"{self.main_url}/?s={query}")
|
13
13
|
secici = Selector(istek.text)
|
14
14
|
|
15
15
|
return [
|
@@ -22,7 +22,7 @@ class DiziYou(PluginBase):
|
|
22
22
|
]
|
23
23
|
|
24
24
|
async def load_item(self, url: str) -> SeriesInfo:
|
25
|
-
istek = await self.
|
25
|
+
istek = await self.httpx.get(url)
|
26
26
|
secici = Selector(istek.text)
|
27
27
|
|
28
28
|
title = secici.css("h1::text").get().strip()
|
@@ -68,7 +68,7 @@ class DiziYou(PluginBase):
|
|
68
68
|
)
|
69
69
|
|
70
70
|
async def load_links(self, url: str) -> list[str]:
|
71
|
-
istek = await self.
|
71
|
+
istek = await self.httpx.get(url)
|
72
72
|
secici = Selector(istek.text)
|
73
73
|
|
74
74
|
item_title = secici.css("div.title h1::text").get()
|
KekikStream/Plugins/Dizilla.py
CHANGED
@@ -10,22 +10,22 @@ class Dizilla(PluginBase):
|
|
10
10
|
main_url = "https://dizilla.club"
|
11
11
|
|
12
12
|
async def search(self, query: str) -> list[SearchResult]:
|
13
|
-
ilk_istek = await self.
|
13
|
+
ilk_istek = await self.httpx.get(self.main_url)
|
14
14
|
ilk_secici = Selector(ilk_istek.text)
|
15
15
|
cKey = ilk_secici.css("input[name='cKey']::attr(value)").get()
|
16
16
|
cValue = ilk_secici.css("input[name='cValue']::attr(value)").get()
|
17
17
|
|
18
|
-
self.
|
18
|
+
self.httpx.headers.update({
|
19
19
|
"Accept" : "application/json, text/javascript, */*; q=0.01",
|
20
20
|
"X-Requested-With" : "XMLHttpRequest",
|
21
21
|
"Referer" : f"{self.main_url}/"
|
22
22
|
})
|
23
|
-
self.
|
23
|
+
self.httpx.cookies.update({
|
24
24
|
"showAllDaFull" : "true",
|
25
25
|
"PHPSESSID" : ilk_istek.cookies.get("PHPSESSID"),
|
26
26
|
})
|
27
27
|
|
28
|
-
arama_istek = await self.
|
28
|
+
arama_istek = await self.httpx.post(
|
29
29
|
url = f"{self.main_url}/bg/searchcontent",
|
30
30
|
data = {
|
31
31
|
"cKey" : cKey,
|
@@ -55,7 +55,7 @@ class Dizilla(PluginBase):
|
|
55
55
|
return urlunparse(yeni_url)
|
56
56
|
|
57
57
|
async def load_item(self, url: str) -> SeriesInfo:
|
58
|
-
istek = await self.
|
58
|
+
istek = await self.httpx.get(url)
|
59
59
|
secici = Selector(istek.text)
|
60
60
|
veri = loads(secici.xpath("//script[@type='application/ld+json']/text()").getall()[-1])
|
61
61
|
|
@@ -94,12 +94,12 @@ class Dizilla(PluginBase):
|
|
94
94
|
)
|
95
95
|
|
96
96
|
async def load_links(self, url: str) -> list[str]:
|
97
|
-
istek = await self.
|
97
|
+
istek = await self.httpx.get(url)
|
98
98
|
secici = Selector(istek.text)
|
99
99
|
|
100
100
|
iframes = [self.fix_url(secici.css("div#playerLsDizilla iframe::attr(src)").get())]
|
101
101
|
for alternatif in secici.css("a[href*='player']"):
|
102
|
-
alt_istek = await self.
|
102
|
+
alt_istek = await self.httpx.get(self.fix_url(alternatif.css("::attr(href)").get()))
|
103
103
|
alt_secici = Selector(alt_istek.text)
|
104
104
|
iframes.append(self.fix_url(alt_secici.css("div#playerLsDizilla iframe::attr(src)").get()))
|
105
105
|
|
@@ -8,7 +8,7 @@ class FilmMakinesi(PluginBase):
|
|
8
8
|
main_url = "https://filmmakinesi.de"
|
9
9
|
|
10
10
|
async def search(self, query: str) -> list[SearchResult]:
|
11
|
-
istek = await self.
|
11
|
+
istek = await self.httpx.get(f"{self.main_url}/?s={query}")
|
12
12
|
secici = Selector(istek.text)
|
13
13
|
|
14
14
|
results = []
|
@@ -29,7 +29,7 @@ class FilmMakinesi(PluginBase):
|
|
29
29
|
return results
|
30
30
|
|
31
31
|
async def load_item(self, url: str) -> MovieInfo:
|
32
|
-
istek = await self.
|
32
|
+
istek = await self.httpx.get(url)
|
33
33
|
secici = Selector(istek.text)
|
34
34
|
|
35
35
|
title = secici.css("h1.single_h1 a::text").get().strip()
|
@@ -58,7 +58,7 @@ class FilmMakinesi(PluginBase):
|
|
58
58
|
)
|
59
59
|
|
60
60
|
async def load_links(self, url: str) -> list[str]:
|
61
|
-
istek = await self.
|
61
|
+
istek = await self.httpx.get(url)
|
62
62
|
secici = Selector(istek.text)
|
63
63
|
|
64
64
|
iframe_src = secici.css("div.player-div iframe::attr(src)").get() or secici.css("div.player-div iframe::attr(data-src)").get()
|
@@ -11,7 +11,7 @@ class FullHDFilmizlesene(PluginBase):
|
|
11
11
|
main_url = "https://www.fullhdfilmizlesene.de"
|
12
12
|
|
13
13
|
async def search(self, query: str) -> list[SearchResult]:
|
14
|
-
istek = await self.
|
14
|
+
istek = await self.httpx.get(f"{self.main_url}/arama/{query}")
|
15
15
|
secici = Selector(istek.text)
|
16
16
|
|
17
17
|
results = []
|
@@ -32,7 +32,7 @@ class FullHDFilmizlesene(PluginBase):
|
|
32
32
|
return results
|
33
33
|
|
34
34
|
async def load_item(self, url: str) -> MovieInfo:
|
35
|
-
istek = await self.
|
35
|
+
istek = await self.httpx.get(url)
|
36
36
|
secici = Selector(istek.text)
|
37
37
|
|
38
38
|
title = secici.xpath("normalize-space(//div[@class='izle-titles'])").get().strip()
|
@@ -57,7 +57,7 @@ class FullHDFilmizlesene(PluginBase):
|
|
57
57
|
)
|
58
58
|
|
59
59
|
async def load_links(self, url: str) -> list[str]:
|
60
|
-
istek = await self.
|
60
|
+
istek = await self.httpx.get(url)
|
61
61
|
secici = Selector(istek.text)
|
62
62
|
|
63
63
|
script = secici.xpath("(//script)[1]").get()
|
@@ -1,22 +1,22 @@
|
|
1
1
|
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
2
2
|
|
3
3
|
from KekikStream.Core import PluginBase, SearchResult, MovieInfo, ExtractResult, Subtitle
|
4
|
-
from Kekik.Sifreleme import Packer, HexCodec
|
5
4
|
from parsel import Selector
|
6
|
-
import
|
5
|
+
import random, string
|
7
6
|
|
8
|
-
class
|
9
|
-
name = "
|
7
|
+
class HDFilmCehennemi(PluginBase):
|
8
|
+
name = "HDFilmCehennemi"
|
10
9
|
main_url = "https://www.hdfilmcehennemi.nl"
|
11
|
-
|
12
10
|
|
13
11
|
async def search(self, query: str) -> list[SearchResult]:
|
14
|
-
istek = await self.
|
12
|
+
istek = await self.httpx.get(
|
15
13
|
url = f"{self.main_url}/search?q={query}",
|
16
|
-
headers = {
|
14
|
+
headers = {
|
15
|
+
"Referer" : f"{self.main_url}/",
|
16
|
+
"X-Requested-With" : "fetch",
|
17
|
+
"authority" : f"{self.main_url}"
|
18
|
+
}
|
17
19
|
)
|
18
|
-
|
19
|
-
secici = Selector(istek.text)
|
20
20
|
|
21
21
|
results = []
|
22
22
|
for veri in istek.json().get("results"):
|
@@ -37,7 +37,7 @@ class HdFilmCehennemi(PluginBase):
|
|
37
37
|
return results
|
38
38
|
|
39
39
|
async def load_item(self, url: str) -> MovieInfo:
|
40
|
-
istek = await self.
|
40
|
+
istek = await self.httpx.get(url, headers = {"Referer": f"{self.main_url}/"})
|
41
41
|
secici = Selector(istek.text)
|
42
42
|
|
43
43
|
title = secici.css("h1.section-title::text").get().strip()
|
@@ -48,13 +48,13 @@ class HdFilmCehennemi(PluginBase):
|
|
48
48
|
year = secici.css("div.post-info-year-country a::text").get().strip()
|
49
49
|
actors = secici.css("div.post-info-cast a > strong::text").getall()
|
50
50
|
duration = secici.css("div.post-info-duration::text").get().replace("dakika", "").strip()
|
51
|
+
|
51
52
|
|
52
|
-
duration_minutes = 0
|
53
53
|
try:
|
54
|
-
|
55
|
-
except Exception
|
56
|
-
|
57
|
-
|
54
|
+
duration_minutes = int(duration[2:-1])
|
55
|
+
except Exception:
|
56
|
+
duration_minutes = 0
|
57
|
+
|
58
58
|
return MovieInfo(
|
59
59
|
url = url,
|
60
60
|
poster = self.fix_url(poster),
|
@@ -68,87 +68,90 @@ class HdFilmCehennemi(PluginBase):
|
|
68
68
|
)
|
69
69
|
|
70
70
|
def generate_random_cookie(self):
|
71
|
-
return
|
71
|
+
return "".join(random.choices(string.ascii_letters + string.digits, k=16))
|
72
72
|
|
73
73
|
async def load_links(self, url: str) -> list[str]:
|
74
74
|
self._data.clear()
|
75
75
|
|
76
|
-
istek = await self.
|
76
|
+
istek = await self.httpx.get(url)
|
77
77
|
secici = Selector(istek.text)
|
78
78
|
|
79
79
|
lang_code = secici.css("div.alternative-links::attr(data-lang)").get().upper()
|
80
|
-
buttons
|
81
|
-
|
80
|
+
buttons = secici.css("div.alternative-links > button")
|
81
|
+
|
82
82
|
link_list = []
|
83
|
-
|
83
|
+
|
84
84
|
for button in buttons:
|
85
|
-
source
|
85
|
+
source = button.css("button.alternative-link::text").get().replace("(HDrip Xbet)", "").strip() + " " + lang_code
|
86
86
|
video_id = button.css("button.alternative-link::attr(data-video)").get()
|
87
|
-
|
88
|
-
istek = await self.
|
87
|
+
|
88
|
+
istek = await self.httpx.get(
|
89
89
|
url = f"{self.main_url}/video/{video_id}/",
|
90
|
-
headers = {
|
91
|
-
|
92
|
-
|
90
|
+
headers = {
|
91
|
+
"Referer" : f"{self.main_url}/",
|
92
|
+
"X-Requested-With" : "fetch",
|
93
|
+
"authority" : f"{self.main_url}"
|
94
|
+
}
|
93
95
|
)
|
94
96
|
|
95
|
-
data
|
96
|
-
secici
|
97
|
+
data = istek.json().get("data")
|
98
|
+
secici = Selector(data["html"])
|
97
99
|
iframe_url = secici.css("iframe::attr(src)").get() or secici.css("iframe::attr(data-src)").get()
|
98
|
-
|
100
|
+
|
99
101
|
if "?rapidrame_id=" in iframe_url:
|
100
102
|
# https://hdfilmcehennemi.mobi/video/embed/uQcCR9nhaNz/?rapidrame_id=j4b4kvc0s24l\
|
101
|
-
video_id = iframe_url.split(
|
103
|
+
video_id = iframe_url.split("=")[1]
|
102
104
|
else:
|
103
105
|
# https://www.hdfilmcehennemi.nl/rplayer/j4b4kvc0s24l/
|
104
|
-
video_id = iframe_url.split(
|
105
|
-
|
106
|
-
print(video_id)
|
106
|
+
video_id = iframe_url.split("/")[-1]
|
107
|
+
|
108
|
+
# print(video_id)
|
107
109
|
if(video_id):
|
108
110
|
break
|
109
111
|
|
110
112
|
# selected_quality: low
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
"X-Requested-With": "fetch",
|
116
|
-
"authority": "cehennempass.pw",
|
117
|
-
|
118
|
-
|
119
|
-
|
113
|
+
istek = await self.httpx.post(
|
114
|
+
url = "https://cehennempass.pw/process_quality_selection.php",
|
115
|
+
headers = {
|
116
|
+
"Referer" : f"https://cehennempass.pw/download/{video_id}",
|
117
|
+
"X-Requested-With" : "fetch",
|
118
|
+
"authority" : "cehennempass.pw",
|
119
|
+
"Cookie" : f"PHPSESSID={self.generate_random_cookie()}"
|
120
|
+
},
|
121
|
+
data = {"video_id": video_id, "selected_quality": "low"},
|
122
|
+
)
|
120
123
|
|
121
124
|
video_url = istek.json().get("download_link")
|
122
125
|
# print(video_url)
|
123
126
|
|
124
127
|
self._data[self.fix_url(video_url)] = {
|
125
|
-
"ext_name" : self.name,
|
128
|
+
"ext_name" : f"{self.name} | Düşük Kalite",
|
126
129
|
"name" : "Düşük Kalite",
|
127
130
|
"referer" : f"https://cehennempass.pw/download/{video_id}",
|
128
131
|
"subtitles" : []
|
129
132
|
}
|
130
133
|
|
131
134
|
# selected_quality: high
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
"X-Requested-With": "fetch",
|
137
|
-
"authority": "cehennempass.pw",
|
138
|
-
|
139
|
-
|
140
|
-
|
135
|
+
istek = await self.httpx.post(
|
136
|
+
url = "https://cehennempass.pw/process_quality_selection.php",
|
137
|
+
headers = {
|
138
|
+
"Referer" : f"https://cehennempass.pw/download/{video_id}",
|
139
|
+
"X-Requested-With" : "fetch",
|
140
|
+
"authority" : "cehennempass.pw",
|
141
|
+
"Cookie" : f"PHPSESSID={self.generate_random_cookie()}"
|
142
|
+
},
|
143
|
+
data = {"video_id": video_id, "selected_quality": "high"},
|
144
|
+
)
|
141
145
|
|
142
146
|
video_url = istek.json().get("download_link")
|
143
|
-
# print(video_url)
|
144
147
|
|
145
148
|
self._data[self.fix_url(video_url)] = {
|
146
|
-
"ext_name" : self.name,
|
149
|
+
"ext_name" : f"{self.name} | Yüksek Kalite",
|
147
150
|
"name" : "Yüksek Kalite",
|
148
151
|
"referer" : f"https://cehennempass.pw/download/{video_id}",
|
149
152
|
"subtitles" : []
|
150
153
|
}
|
151
|
-
|
154
|
+
|
152
155
|
return list(self._data.keys())
|
153
156
|
|
154
157
|
async def play(self, name: str, url: str, referer: str, subtitles: list[Subtitle]):
|
@@ -8,7 +8,7 @@ class JetFilmizle(PluginBase):
|
|
8
8
|
main_url = "https://jetfilmizle.io"
|
9
9
|
|
10
10
|
async def search(self, query: str) -> list[SearchResult]:
|
11
|
-
istek = await self.
|
11
|
+
istek = await self.httpx.post(
|
12
12
|
url = f"{self.main_url}/filmara.php",
|
13
13
|
data = {"s": query},
|
14
14
|
headers = {"Referer": f"{self.main_url}/"}
|
@@ -33,7 +33,7 @@ class JetFilmizle(PluginBase):
|
|
33
33
|
return results
|
34
34
|
|
35
35
|
async def load_item(self, url: str) -> MovieInfo:
|
36
|
-
istek = await self.
|
36
|
+
istek = await self.httpx.get(url)
|
37
37
|
secici = Selector(istek.text)
|
38
38
|
|
39
39
|
title = self.clean_title(secici.css("div.movie-exp-title::text").get())
|
@@ -56,7 +56,7 @@ class JetFilmizle(PluginBase):
|
|
56
56
|
)
|
57
57
|
|
58
58
|
async def load_links(self, url: str) -> list[str]:
|
59
|
-
istek = await self.
|
59
|
+
istek = await self.httpx.get(url)
|
60
60
|
secici = Selector(istek.text)
|
61
61
|
|
62
62
|
iframes = []
|
@@ -68,7 +68,7 @@ class JetFilmizle(PluginBase):
|
|
68
68
|
if not part_href:
|
69
69
|
continue
|
70
70
|
|
71
|
-
part_istek = await self.
|
71
|
+
part_istek = await self.httpx.get(part_href)
|
72
72
|
part_secici = Selector(part_istek.text)
|
73
73
|
|
74
74
|
if iframe := part_secici.css("div#movie iframe::attr(data-src), div#movie iframe::attr(data), div#movie iframe::attr(src)").get():
|
@@ -81,7 +81,7 @@ class JetFilmizle(PluginBase):
|
|
81
81
|
processed_iframes = []
|
82
82
|
for iframe in iframes:
|
83
83
|
if "jetv.xyz" in iframe:
|
84
|
-
jetv_istek = await self.
|
84
|
+
jetv_istek = await self.httpx.get(iframe)
|
85
85
|
jetv_secici = Selector(jetv_istek.text)
|
86
86
|
|
87
87
|
if jetv_iframe := jetv_secici.css("iframe::attr(src)").get():
|
@@ -8,7 +8,7 @@ class SezonlukDizi(PluginBase):
|
|
8
8
|
main_url = "https://sezonlukdizi6.com"
|
9
9
|
|
10
10
|
async def search(self, query: str) -> list[SearchResult]:
|
11
|
-
istek = await self.
|
11
|
+
istek = await self.httpx.get(f"{self.main_url}/diziler.asp?adi={query}")
|
12
12
|
secici = Selector(istek.text)
|
13
13
|
|
14
14
|
return [
|
@@ -21,7 +21,7 @@ class SezonlukDizi(PluginBase):
|
|
21
21
|
]
|
22
22
|
|
23
23
|
async def load_item(self, url: str) -> SeriesInfo:
|
24
|
-
istek = await self.
|
24
|
+
istek = await self.httpx.get(url)
|
25
25
|
secici = Selector(istek.text)
|
26
26
|
|
27
27
|
title = secici.css("div.header::text").get().strip()
|
@@ -32,14 +32,14 @@ class SezonlukDizi(PluginBase):
|
|
32
32
|
rating = secici.css("div.dizipuani a div::text").re_first(r"[\d.,]+")
|
33
33
|
actors = []
|
34
34
|
|
35
|
-
actors_istek = await self.
|
35
|
+
actors_istek = await self.httpx.get(f"{self.main_url}/oyuncular/{url.split('/')[-1]}")
|
36
36
|
actors_secici = Selector(actors_istek.text)
|
37
37
|
actors = [
|
38
38
|
actor.css("div.header::text").get().strip()
|
39
39
|
for actor in actors_secici.css("div.doubling div.ui")
|
40
40
|
]
|
41
41
|
|
42
|
-
episodes_istek = await self.
|
42
|
+
episodes_istek = await self.httpx.get(f"{self.main_url}/bolumler/{url.split('/')[-1]}")
|
43
43
|
episodes_secici = Selector(episodes_istek.text)
|
44
44
|
episodes = []
|
45
45
|
|
@@ -72,7 +72,7 @@ class SezonlukDizi(PluginBase):
|
|
72
72
|
)
|
73
73
|
|
74
74
|
async def load_links(self, url: str) -> list[str]:
|
75
|
-
istek = await self.
|
75
|
+
istek = await self.httpx.get(url)
|
76
76
|
secici = Selector(istek.text)
|
77
77
|
|
78
78
|
bid = secici.css("div#dilsec::attr(data-id)").get()
|
@@ -81,7 +81,7 @@ class SezonlukDizi(PluginBase):
|
|
81
81
|
|
82
82
|
links = []
|
83
83
|
for dil, label in [("1", "AltYazı"), ("0", "Dublaj")]:
|
84
|
-
dil_istek = await self.
|
84
|
+
dil_istek = await self.httpx.post(
|
85
85
|
url = f"{self.main_url}/ajax/dataAlternatif22.asp",
|
86
86
|
headers = {"X-Requested-With": "XMLHttpRequest"},
|
87
87
|
data = {"bid": bid, "dil": dil},
|
@@ -94,7 +94,7 @@ class SezonlukDizi(PluginBase):
|
|
94
94
|
|
95
95
|
if dil_json.get("status") == "success":
|
96
96
|
for veri in dil_json.get("data", []):
|
97
|
-
veri_response = await self.
|
97
|
+
veri_response = await self.httpx.post(
|
98
98
|
url = f"{self.main_url}/ajax/dataEmbed22.asp",
|
99
99
|
headers = {"X-Requested-With": "XMLHttpRequest"},
|
100
100
|
data = {"id": veri.get("id")},
|
KekikStream/Plugins/Shorten.py
CHANGED
@@ -69,18 +69,18 @@ class Shorten(PluginBase):
|
|
69
69
|
token = None
|
70
70
|
|
71
71
|
async def __giris(self):
|
72
|
-
await self.
|
72
|
+
await self.httpx.get(f"{self.main_url}/tr", follow_redirects=True)
|
73
73
|
|
74
|
-
self.token = await self.
|
74
|
+
self.token = await self.httpx.get(f"{self.main_url}/api/session")
|
75
75
|
self.token = self.token.json().get("token")
|
76
76
|
|
77
|
-
self.
|
77
|
+
self.httpx.headers.update({"Authorization": f"Bearer {self.token}"})
|
78
78
|
|
79
79
|
async def raw_diziler(self):
|
80
80
|
if not self.token:
|
81
81
|
await self.__giris()
|
82
82
|
|
83
|
-
veriler = await self.
|
83
|
+
veriler = await self.httpx.get("https://api.shorten.watch/api/series/you-might-like?page=1&per_page=100")
|
84
84
|
veriler = veriler.json()
|
85
85
|
|
86
86
|
return [
|
@@ -94,7 +94,7 @@ class Shorten(PluginBase):
|
|
94
94
|
if not self.token:
|
95
95
|
await self.__giris()
|
96
96
|
|
97
|
-
istek = await self.
|
97
|
+
istek = await self.httpx.get(f"{self.main_url}/tr/series/{slug}", follow_redirects=True)
|
98
98
|
veriler = await extract_next_f_push_data(istek.text)
|
99
99
|
veriler = veriler["8"][-1]["children"][-2][-1]["children"][-1]["data"]
|
100
100
|
return [
|
@@ -128,7 +128,7 @@ class Shorten(PluginBase):
|
|
128
128
|
raw_req = await self.raw_bolumler(slug)
|
129
129
|
number, _hash = raw_req[0].values()
|
130
130
|
|
131
|
-
istek = await self.
|
131
|
+
istek = await self.httpx.get(f"{self.main_url}/tr/series/{slug}/episode-{number}-{_hash}", follow_redirects=True)
|
132
132
|
veriler = await extract_next_f_push_data(istek.text)
|
133
133
|
veriler = veriler["b"][3]["children"][1][3]["children"][3]["children"][3]["children"][-1]
|
134
134
|
|
KekikStream/Plugins/SineWix.py
CHANGED
@@ -3,8 +3,9 @@
|
|
3
3
|
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, Episode, SeriesInfo, ExtractResult, Subtitle
|
4
4
|
|
5
5
|
class SineWix(PluginBase):
|
6
|
-
name
|
7
|
-
main_url
|
6
|
+
name = "SineWix"
|
7
|
+
main_url = "https://ythls.kekikakademi.org"
|
8
|
+
description = "Sinewix | Ücretsiz Film - Dizi - Anime İzleme Uygulaması"
|
8
9
|
|
9
10
|
main_page = {
|
10
11
|
f"{main_url}/sinewix/movies" : "Filmler",
|
@@ -32,7 +33,7 @@ class SineWix(PluginBase):
|
|
32
33
|
}
|
33
34
|
|
34
35
|
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
35
|
-
istek = await self.
|
36
|
+
istek = await self.httpx.get(f"{url}/{page}")
|
36
37
|
veriler = istek.json()
|
37
38
|
|
38
39
|
return [
|
@@ -46,7 +47,7 @@ class SineWix(PluginBase):
|
|
46
47
|
]
|
47
48
|
|
48
49
|
async def search(self, query: str) -> list[SearchResult]:
|
49
|
-
istek = await self.
|
50
|
+
istek = await self.httpx.get(f"{self.main_url}/sinewix/search/{query}")
|
50
51
|
|
51
52
|
return [
|
52
53
|
SearchResult(
|
@@ -61,7 +62,7 @@ class SineWix(PluginBase):
|
|
61
62
|
item_type = url.split("?type=")[-1].split("&id=")[0]
|
62
63
|
item_id = url.split("&id=")[-1]
|
63
64
|
|
64
|
-
istek = await self.
|
65
|
+
istek = await self.httpx.get(f"{self.main_url}/sinewix/{item_type}/{item_id}")
|
65
66
|
veri = istek.json()
|
66
67
|
|
67
68
|
match item_type:
|
@@ -123,7 +124,7 @@ class SineWix(PluginBase):
|
|
123
124
|
if not url.startswith(self.main_url):
|
124
125
|
return [url]
|
125
126
|
|
126
|
-
istek = await self.
|
127
|
+
istek = await self.httpx.get(url)
|
127
128
|
veri = istek.json()
|
128
129
|
|
129
130
|
org_title = veri.get("title")
|
KekikStream/Plugins/UgurFilm.py
CHANGED
@@ -8,7 +8,7 @@ class UgurFilm(PluginBase):
|
|
8
8
|
main_url = "https://ugurfilm8.com"
|
9
9
|
|
10
10
|
async def search(self, query: str) -> list[SearchResult]:
|
11
|
-
istek = await self.
|
11
|
+
istek = await self.httpx.get(f"{self.main_url}/?s={query}")
|
12
12
|
secici = Selector(istek.text)
|
13
13
|
|
14
14
|
results = []
|
@@ -29,7 +29,7 @@ class UgurFilm(PluginBase):
|
|
29
29
|
return results
|
30
30
|
|
31
31
|
async def load_item(self, url: str) -> MovieInfo:
|
32
|
-
istek = await self.
|
32
|
+
istek = await self.httpx.get(url)
|
33
33
|
secici = Selector(istek.text)
|
34
34
|
|
35
35
|
title = secici.css("div.bilgi h2::text").get().strip()
|
@@ -50,12 +50,12 @@ class UgurFilm(PluginBase):
|
|
50
50
|
)
|
51
51
|
|
52
52
|
async def load_links(self, url: str) -> list[str]:
|
53
|
-
istek = await self.
|
53
|
+
istek = await self.httpx.get(url)
|
54
54
|
secici = Selector(istek.text)
|
55
55
|
results = []
|
56
56
|
|
57
57
|
for part_link in secici.css("li.parttab a::attr(href)").getall():
|
58
|
-
sub_response = await self.
|
58
|
+
sub_response = await self.httpx.get(part_link)
|
59
59
|
sub_selector = Selector(sub_response.text)
|
60
60
|
|
61
61
|
iframe = sub_selector.css("div#vast iframe::attr(src)").get()
|
@@ -65,7 +65,7 @@ class UgurFilm(PluginBase):
|
|
65
65
|
"alternative" : "vidmoly",
|
66
66
|
"ord" : "0",
|
67
67
|
}
|
68
|
-
player_response = await self.
|
68
|
+
player_response = await self.httpx.post(
|
69
69
|
url = f"{self.main_url}/player/ajax_sources.php",
|
70
70
|
data = post_data
|
71
71
|
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: KekikStream
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.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
|
@@ -0,0 +1,62 @@
|
|
1
|
+
KekikStream/__init__.py,sha256=T6b93GPnam4ww2tOU2dZaS-WHKwCEXqNAaRh6Lrg4Kw,15477
|
2
|
+
KekikStream/__main__.py,sha256=B81dQoeGEb-T5Sycs3eNAmW7unvx0Mef0syCjs4nPds,137
|
3
|
+
KekikStream/requirements.txt,sha256=QWCXrrmKodIm7mGtIz9cWr9sks-lmL_TilKMrruWJn0,77
|
4
|
+
KekikStream/CLI/__init__.py,sha256=U6oLq_O7u5y2eHhBnmfhZNns_EqHHJXJmzl8jvZFUNY,230
|
5
|
+
KekikStream/CLI/pypi_kontrol.py,sha256=MchatOwCWCpFBtgt09yag9Rjal9XFyh2W_oVs2p7SNg,1518
|
6
|
+
KekikStream/Core/__init__.py,sha256=4ykq-DBlbbfjGAd5m2AZfuljTLBFYkI8DPLxV03AAcA,673
|
7
|
+
KekikStream/Core/Extractor/ExtractorBase.py,sha256=7dmYh5e1Za5N_pLJrTZRuwFh-CqwGc0YJOBWf5dirjc,1724
|
8
|
+
KekikStream/Core/Extractor/ExtractorLoader.py,sha256=ecrfz9mYizlENCjbyfjdfnOrQorxQTF4ZFGhPpU6JHk,4193
|
9
|
+
KekikStream/Core/Extractor/ExtractorManager.py,sha256=4L1H3jiTnf0kTq4W6uS7n95bBYHlKJ8_hh0og8z4erQ,1244
|
10
|
+
KekikStream/Core/Extractor/ExtractorModels.py,sha256=huIcPQ5VIRfMx0LcL5SS1u4dldZbHjzHKEdSEtOPlc0,456
|
11
|
+
KekikStream/Core/Media/MediaHandler.py,sha256=AJNPTXgxWykfDMyZIyGSjWl3Vp0salT8lKDrfAwaga4,6936
|
12
|
+
KekikStream/Core/Media/MediaManager.py,sha256=9ItiUguOkk3wg3YY5uf3mrjfwLPCvggnP8QviX0uiuE,526
|
13
|
+
KekikStream/Core/Plugin/PluginBase.py,sha256=RtIskTR2N05cBE5ivLb8jUX5XftNLTMEnc_KXWNEKco,2910
|
14
|
+
KekikStream/Core/Plugin/PluginLoader.py,sha256=2UM3gNcEgd7k-FxG-JB5nTIS0K_clzvFtzGjMA_Sx7Q,3379
|
15
|
+
KekikStream/Core/Plugin/PluginManager.py,sha256=CZVg1eegi8vfMfccx0DRV0Box8kXz-aoULTQLgbPbvM,893
|
16
|
+
KekikStream/Core/Plugin/PluginModels.py,sha256=ZZJUXbC0G2k0DU7Wpbf0rwjn7spywpiaLIHE7kLajhk,2533
|
17
|
+
KekikStream/Core/UI/UIManager.py,sha256=T4V_kdTTWa-UDamgLSKa__dWJuzcvRK9NuwBlzU9Bzc,1693
|
18
|
+
KekikStream/Extractors/CloseLoad.py,sha256=q464dRwlNH347EcznyPvgWfMgDDgWI62cwT32HqZqpg,988
|
19
|
+
KekikStream/Extractors/ContentX.py,sha256=u1sDdM79MNx9OdPTPcAA0OQDS7537IO8aJlffxhMi8c,2976
|
20
|
+
KekikStream/Extractors/FourCX.py,sha256=4FrMj1IZBBpN_g1P6S3A-8eUu7QFwlt4fJXzJ7vfe0Q,221
|
21
|
+
KekikStream/Extractors/FourPichive.py,sha256=iq3BCUbih1UVF4y4BIWO--0hX5jP2nxqesNx3MGP3kQ,234
|
22
|
+
KekikStream/Extractors/FourPlayRu.py,sha256=wq1ylxKpsO_IBoYr_ALzB2dVrQpJ-jY9lf2zPhcAZX8,228
|
23
|
+
KekikStream/Extractors/HDStreamAble.py,sha256=66n5EvIdX_or5cdnlJ_Uqmzi50n4rl9c5VCw8kBqhQk,245
|
24
|
+
KekikStream/Extractors/Hotlinger.py,sha256=NFMRgUmb6BCrJfa7Hi0VarDNYvCeVknBWEk24FKBBa0,224
|
25
|
+
KekikStream/Extractors/MailRu.py,sha256=HH89V4GdQChG2TnIimqNbd5dGWco0bdrSGpLudt5WGs,1306
|
26
|
+
KekikStream/Extractors/MixPlayHD.py,sha256=POV_yq3KoZ6S6EqFsKYULEBz92NdUa2BpYKNo0eNQH8,1552
|
27
|
+
KekikStream/Extractors/MolyStream.py,sha256=aJZL1SE40gB5KeShu-TV5IWNICHCtAXY87F0wqYrw1k,604
|
28
|
+
KekikStream/Extractors/Odnoklassniki.py,sha256=TZOJyti05ch62QCUTKUzKNKmjzwGZYVpLWbmp92QTO4,3590
|
29
|
+
KekikStream/Extractors/OkRuHTTP.py,sha256=L-B0i_i_Vnm61GvUfd6cGIW-o_H4M-C7DO_cdw2rQPU,228
|
30
|
+
KekikStream/Extractors/OkRuSSL.py,sha256=FHJ5XZ1dO5ED3mIku3e3vnq8K0slrcr0jqhaUnHmfVk,227
|
31
|
+
KekikStream/Extractors/PeaceMakerst.py,sha256=ZKk454eNZpeamht61UH9yMYe00_zGb3MSyujfDlbVDc,2096
|
32
|
+
KekikStream/Extractors/Pichive.py,sha256=BSVYFwL3Ax6yGoS1WkpOWtngxNyuZLoKzpPwjibpu2s,221
|
33
|
+
KekikStream/Extractors/PixelDrain.py,sha256=WAlxFHwDYFZd7E3M-wTBkOSzDLbaLpX4J7r1zzlfJVo,991
|
34
|
+
KekikStream/Extractors/PlayRu.py,sha256=DQMZyCSJwLkrh-gfDD8T1DvUFNBAKUXpByeCAWuK6YY,215
|
35
|
+
KekikStream/Extractors/RapidVid.py,sha256=nTND3zuH105oeO359gltKKE9n35YLQsM9Crg17G7L0c,2367
|
36
|
+
KekikStream/Extractors/SibNet.py,sha256=tKo2y_JL0Es-B1mNSMk7IDeFTkk0CmMBZTKwWOy59ho,876
|
37
|
+
KekikStream/Extractors/Sobreatsesuyp.py,sha256=qlSQHUHjTjBoY0nsuZQWAjnfswbPORkBg6rUuP7SagA,2000
|
38
|
+
KekikStream/Extractors/TRsTX.py,sha256=mbSRGnQt26a73SbqwtY9rpiYFwgRgVbvA6bkGb_PvP8,2152
|
39
|
+
KekikStream/Extractors/TauVideo.py,sha256=2ai9BwwM6qlCgxK7E0B642LtOF5y4hEb9tQ2aDpbMtc,1112
|
40
|
+
KekikStream/Extractors/TurboImgz.py,sha256=nnWnP1K4JZbMj6S-YuXxej31UZtF4JcboSW4n7A4A5c,824
|
41
|
+
KekikStream/Extractors/VidMoly.py,sha256=O6F_82E-LeFVOgSw-ot91B1ZP8pqqt1jZ5pmkwklWGY,3526
|
42
|
+
KekikStream/Extractors/VidMolyMe.py,sha256=ogLiFUJVqFbhtzQrZ1gSB9me85DiHvntjWtSvidYVS8,218
|
43
|
+
KekikStream/Extractors/VidMoxy.py,sha256=T1iqfyOasRxoepmuWAmXeVW6E7M1O18KG3264KUSzc0,1798
|
44
|
+
KekikStream/Extractors/VideoSeyred.py,sha256=M6QPZ_isX9vM_7LPo-2I_8Cf1vB9awHw8vvzBODtoiQ,1977
|
45
|
+
KekikStream/Plugins/DiziBox.py,sha256=8bLw6XtHadJtNhpz1DIYv2I9g1qzyBBYR0nWuU4UF3c,9232
|
46
|
+
KekikStream/Plugins/DiziYou.py,sha256=1e-NTWgg-yP2lDFzYLevKNMX8Da5pScKyIWRiO2fMb0,5666
|
47
|
+
KekikStream/Plugins/Dizilla.py,sha256=xDd3xxXFeY-k1L0sYSZIJB6RSrMEckuu8wIfbNdYLJA,4250
|
48
|
+
KekikStream/Plugins/FilmMakinesi.py,sha256=nDmUk-yVlP_F8r7rYtOGq5zMJrdZCCC_KO5K-edJsKA,2819
|
49
|
+
KekikStream/Plugins/FullHDFilmizlesene.py,sha256=cOl7HVl4pNgHX8IS7ZkAJE6KFiYOQw4MppaAwBTwQlo,3077
|
50
|
+
KekikStream/Plugins/HDFilmCehennemi.py,sha256=xpMwoCqG-HwtAdP3j4DsudqjUuEuAbxZp8fwXWZNn5o,6670
|
51
|
+
KekikStream/Plugins/JetFilmizle.py,sha256=vXt0AIs1XMqxIlD_BnoTxQse2fzVROpdplQCtbFRBQw,3911
|
52
|
+
KekikStream/Plugins/RecTV.py,sha256=TYpV6T7U8TkkHYB3XK0xqar0pKlULXdztvK4TDc9734,5106
|
53
|
+
KekikStream/Plugins/SezonlukDizi.py,sha256=hKzO0Y0ypHEutmUM9c91x8e8vzRQ_zxpnwY0rhswxxI,4437
|
54
|
+
KekikStream/Plugins/Shorten.py,sha256=arakUY8ampyA408MYzikPp0VSYUvI8scPEkuZefEnyE,8852
|
55
|
+
KekikStream/Plugins/SineWix.py,sha256=AX69mbqnhsntpJEKJfkG88jwv7fKzfrdGtJ8ezpUuBk,6920
|
56
|
+
KekikStream/Plugins/UgurFilm.py,sha256=C9ZIUNBJJfBwgeS5-b7o-Dn07M8aXiNrNzutH6biTXw,2925
|
57
|
+
kekikstream-1.2.4.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
58
|
+
kekikstream-1.2.4.dist-info/METADATA,sha256=D_qOzKNyku5KyPkWmnhxxRmEf-EV4DSMAdAtxSWenh4,4508
|
59
|
+
kekikstream-1.2.4.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
|
60
|
+
kekikstream-1.2.4.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
|
61
|
+
kekikstream-1.2.4.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
|
62
|
+
kekikstream-1.2.4.dist-info/RECORD,,
|
@@ -1,62 +0,0 @@
|
|
1
|
-
KekikStream/__init__.py,sha256=T6b93GPnam4ww2tOU2dZaS-WHKwCEXqNAaRh6Lrg4Kw,15477
|
2
|
-
KekikStream/__main__.py,sha256=B81dQoeGEb-T5Sycs3eNAmW7unvx0Mef0syCjs4nPds,137
|
3
|
-
KekikStream/requirements.txt,sha256=QWCXrrmKodIm7mGtIz9cWr9sks-lmL_TilKMrruWJn0,77
|
4
|
-
KekikStream/CLI/__init__.py,sha256=U6oLq_O7u5y2eHhBnmfhZNns_EqHHJXJmzl8jvZFUNY,230
|
5
|
-
KekikStream/CLI/pypi_kontrol.py,sha256=MchatOwCWCpFBtgt09yag9Rjal9XFyh2W_oVs2p7SNg,1518
|
6
|
-
KekikStream/Core/__init__.py,sha256=4ykq-DBlbbfjGAd5m2AZfuljTLBFYkI8DPLxV03AAcA,673
|
7
|
-
KekikStream/Core/Extractor/ExtractorBase.py,sha256=ZyasO5m7iAsnh-mwhtlp-VXkZ4pIuWuHvCIskBX7FUg,1726
|
8
|
-
KekikStream/Core/Extractor/ExtractorLoader.py,sha256=ecrfz9mYizlENCjbyfjdfnOrQorxQTF4ZFGhPpU6JHk,4193
|
9
|
-
KekikStream/Core/Extractor/ExtractorManager.py,sha256=4L1H3jiTnf0kTq4W6uS7n95bBYHlKJ8_hh0og8z4erQ,1244
|
10
|
-
KekikStream/Core/Extractor/ExtractorModels.py,sha256=huIcPQ5VIRfMx0LcL5SS1u4dldZbHjzHKEdSEtOPlc0,456
|
11
|
-
KekikStream/Core/Media/MediaHandler.py,sha256=AJNPTXgxWykfDMyZIyGSjWl3Vp0salT8lKDrfAwaga4,6936
|
12
|
-
KekikStream/Core/Media/MediaManager.py,sha256=9ItiUguOkk3wg3YY5uf3mrjfwLPCvggnP8QviX0uiuE,526
|
13
|
-
KekikStream/Core/Plugin/PluginBase.py,sha256=RadYkRQ2VN6Ay9RqnIXs8XOtAFwuc8yABPX0rgXWcMs,2758
|
14
|
-
KekikStream/Core/Plugin/PluginLoader.py,sha256=2UM3gNcEgd7k-FxG-JB5nTIS0K_clzvFtzGjMA_Sx7Q,3379
|
15
|
-
KekikStream/Core/Plugin/PluginManager.py,sha256=CZVg1eegi8vfMfccx0DRV0Box8kXz-aoULTQLgbPbvM,893
|
16
|
-
KekikStream/Core/Plugin/PluginModels.py,sha256=ZZJUXbC0G2k0DU7Wpbf0rwjn7spywpiaLIHE7kLajhk,2533
|
17
|
-
KekikStream/Core/UI/UIManager.py,sha256=T4V_kdTTWa-UDamgLSKa__dWJuzcvRK9NuwBlzU9Bzc,1693
|
18
|
-
KekikStream/Extractors/CloseLoad.py,sha256=YmDB3YvuDaCUbQ0T_tmhnkEsC5mSdEN6GNoAR662fl8,990
|
19
|
-
KekikStream/Extractors/ContentX.py,sha256=XPoAuA95LOTgCUGyioXxOFWR0nNKWWOHLkYMlzguIIE,2980
|
20
|
-
KekikStream/Extractors/FourCX.py,sha256=4FrMj1IZBBpN_g1P6S3A-8eUu7QFwlt4fJXzJ7vfe0Q,221
|
21
|
-
KekikStream/Extractors/FourPichive.py,sha256=iq3BCUbih1UVF4y4BIWO--0hX5jP2nxqesNx3MGP3kQ,234
|
22
|
-
KekikStream/Extractors/FourPlayRu.py,sha256=wq1ylxKpsO_IBoYr_ALzB2dVrQpJ-jY9lf2zPhcAZX8,228
|
23
|
-
KekikStream/Extractors/HDStreamAble.py,sha256=66n5EvIdX_or5cdnlJ_Uqmzi50n4rl9c5VCw8kBqhQk,245
|
24
|
-
KekikStream/Extractors/Hotlinger.py,sha256=NFMRgUmb6BCrJfa7Hi0VarDNYvCeVknBWEk24FKBBa0,224
|
25
|
-
KekikStream/Extractors/MailRu.py,sha256=lB3Xy912EaSEUw7Im65L5TwtIeM7OLFV1_9lan39g40,1308
|
26
|
-
KekikStream/Extractors/MixPlayHD.py,sha256=M7Zxmpkazkj6ewgLWKKDeZDbBOCM9vkMDyIaVhaSPrY,1554
|
27
|
-
KekikStream/Extractors/MolyStream.py,sha256=aJZL1SE40gB5KeShu-TV5IWNICHCtAXY87F0wqYrw1k,604
|
28
|
-
KekikStream/Extractors/Odnoklassniki.py,sha256=B0A2krVVvzmpZBzIpxu40WB9AZ_zzH-Km2HTetrNvqQ,3593
|
29
|
-
KekikStream/Extractors/OkRuHTTP.py,sha256=L-B0i_i_Vnm61GvUfd6cGIW-o_H4M-C7DO_cdw2rQPU,228
|
30
|
-
KekikStream/Extractors/OkRuSSL.py,sha256=FHJ5XZ1dO5ED3mIku3e3vnq8K0slrcr0jqhaUnHmfVk,227
|
31
|
-
KekikStream/Extractors/PeaceMakerst.py,sha256=VSXeCeA_-9IkKdjoQ3lvA4FFDzdT_Oj1oFM7i-_3tvQ,2100
|
32
|
-
KekikStream/Extractors/Pichive.py,sha256=BSVYFwL3Ax6yGoS1WkpOWtngxNyuZLoKzpPwjibpu2s,221
|
33
|
-
KekikStream/Extractors/PixelDrain.py,sha256=1kf1kKKxcYwLVPo_8Fg1Za3E2kOplqqVFM41xBT52KY,992
|
34
|
-
KekikStream/Extractors/PlayRu.py,sha256=DQMZyCSJwLkrh-gfDD8T1DvUFNBAKUXpByeCAWuK6YY,215
|
35
|
-
KekikStream/Extractors/RapidVid.py,sha256=n03CyrnFLSoL6Ys5Dy4a4d-5iIAdmouqz4-k6Vl3Hok,2369
|
36
|
-
KekikStream/Extractors/SibNet.py,sha256=Jrl93OdKwEhssG348-F2BKaj-XUS7v-Qw3dKMh_ZMRQ,878
|
37
|
-
KekikStream/Extractors/Sobreatsesuyp.py,sha256=p5aHxIM9aNBfWEnqjTdI_kYpcFKvBHg1BZoPqbB_eyo,2004
|
38
|
-
KekikStream/Extractors/TRsTX.py,sha256=Z-Xk6kSAFFbxnj2I7x0gAbBbaQyuj1mIqn2Sw0xFtP4,2156
|
39
|
-
KekikStream/Extractors/TauVideo.py,sha256=I6TYHqAYSb_fAIcb8PiIdkzlQ0ZX-9Bb5_KMG955sJ4,1114
|
40
|
-
KekikStream/Extractors/TurboImgz.py,sha256=VXx9vZZRTdQiVNER0LcXm2nsv2OaXnxuPpslG-sEKD0,826
|
41
|
-
KekikStream/Extractors/VidMoly.py,sha256=jYvFSzE46mStArVEQedkvqUUIPwi1LS47qRk0YntAQU,3529
|
42
|
-
KekikStream/Extractors/VidMolyMe.py,sha256=ogLiFUJVqFbhtzQrZ1gSB9me85DiHvntjWtSvidYVS8,218
|
43
|
-
KekikStream/Extractors/VidMoxy.py,sha256=_K6BA7Uo59DA3ty_tsayCUZjXmRoDBTghekVNXiuZ7g,1800
|
44
|
-
KekikStream/Extractors/VideoSeyred.py,sha256=rgS940vHJjrhF-JH4B_8poL2OwmctVyWTzP9I8gdLGI,1980
|
45
|
-
KekikStream/Plugins/DiziBox.py,sha256=ug-upa0TV1f351Kr64Yf0TRnLZw4lQazocgaSZvuBBU,9111
|
46
|
-
KekikStream/Plugins/DiziYou.py,sha256=2WaQZKa8NlBiuGWu3jUTPslXD2l5ALCAY5qnXwozpes,5669
|
47
|
-
KekikStream/Plugins/Dizilla.py,sha256=XYc5zAjLsiEgCNMi6x1XXy8PpV8BHLgEyLitMoq_5a0,4257
|
48
|
-
KekikStream/Plugins/FilmMakinesi.py,sha256=rz8TQeL41PJbeEmksgPHIhp6J-4vbSCBTeEH0ukExz4,2822
|
49
|
-
KekikStream/Plugins/FullHDFilmizlesene.py,sha256=Fa0gRP_NoMfPC8HIKRxERjQVOv8Fyb-ayMJ2EooZ7BE,3080
|
50
|
-
KekikStream/Plugins/HdFilmCehennemi.py,sha256=GR18SCiieTfepY5HKpJOie1xlGQ9bxId_kjeKvrfo8M,6689
|
51
|
-
KekikStream/Plugins/JetFilmizle.py,sha256=v2R4iDm_9VWNO2HTpawvfNElVdOoOF_4iPIquziLvhc,3916
|
52
|
-
KekikStream/Plugins/RecTV.py,sha256=TYpV6T7U8TkkHYB3XK0xqar0pKlULXdztvK4TDc9734,5106
|
53
|
-
KekikStream/Plugins/SezonlukDizi.py,sha256=VUyKAu2SlUCV4uTQfIr2BLLTus2-LOXPFF4rDHG1rs8,4444
|
54
|
-
KekikStream/Plugins/Shorten.py,sha256=kDQGmj7qvfdDyDkU__QGjx-FoGSgCOPxcA3veM2BGPk,8858
|
55
|
-
KekikStream/Plugins/SineWix.py,sha256=LHWX4hq-nbVOR0zDrBDNugoVb3CEFU5yD4jcRprzm4U,6838
|
56
|
-
KekikStream/Plugins/UgurFilm.py,sha256=rp6M7yjVljVWbGEAC9BB96W1wBsM-PdFbh5tcZ2ZhzI,2930
|
57
|
-
kekikstream-1.2.2.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
58
|
-
kekikstream-1.2.2.dist-info/METADATA,sha256=u53zotrkCmWM36Uq5DLQ95_o4kBoLVzy3iY5GsaboDw,4508
|
59
|
-
kekikstream-1.2.2.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
|
60
|
-
kekikstream-1.2.2.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
|
61
|
-
kekikstream-1.2.2.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
|
62
|
-
kekikstream-1.2.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|