KekikStream 0.3.6__py3-none-any.whl → 0.3.8__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/ExtractorBase.py +2 -0
- KekikStream/Core/MediaHandler.py +14 -11
- KekikStream/Core/PluginLoader.py +2 -2
- KekikStream/Extractors/MixPlayHD.py +2 -2
- KekikStream/Extractors/Odnoklassniki.py +4 -4
- KekikStream/Extractors/PeaceMakerst.py +2 -2
- KekikStream/Extractors/RapidVid.py +2 -2
- KekikStream/Extractors/Sobreatsesuyp.py +2 -2
- KekikStream/Extractors/TRsTX.py +2 -2
- KekikStream/Extractors/VidMoly.py +2 -2
- KekikStream/Extractors/VideoSeyred.py +2 -2
- KekikStream/Plugins/DiziBox.py +1 -1
- KekikStream/Plugins/FullHDFilmizlesene.py +5 -4
- KekikStream/Plugins/JetFilmizle.py +4 -8
- KekikStream/__init__.py +17 -14
- KekikStream/__main__.py +1 -1
- {KekikStream-0.3.6.dist-info → KekikStream-0.3.8.dist-info}/METADATA +1 -1
- {KekikStream-0.3.6.dist-info → KekikStream-0.3.8.dist-info}/RECORD +22 -22
- {KekikStream-0.3.6.dist-info → KekikStream-0.3.8.dist-info}/LICENSE +0 -0
- {KekikStream-0.3.6.dist-info → KekikStream-0.3.8.dist-info}/WHEEL +0 -0
- {KekikStream-0.3.6.dist-info → KekikStream-0.3.8.dist-info}/entry_points.txt +0 -0
- {KekikStream-0.3.6.dist-info → KekikStream-0.3.8.dist-info}/top_level.txt +0 -0
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
from abc import ABC, abstractmethod
|
4
4
|
from httpx import AsyncClient, Timeout
|
5
|
+
from cloudscraper import CloudScraper
|
5
6
|
from typing import Optional
|
6
7
|
from .ExtractorModels import ExtractResult
|
7
8
|
|
@@ -17,6 +18,7 @@ class ExtractorBase(ABC):
|
|
17
18
|
},
|
18
19
|
timeout = Timeout(10.0)
|
19
20
|
)
|
21
|
+
self.cloudscraper = CloudScraper()
|
20
22
|
|
21
23
|
def can_handle_url(self, url: str) -> bool:
|
22
24
|
"""URL'nin bu extractor tarafından işlenip işlenemeyeceğini kontrol eder."""
|
KekikStream/Core/MediaHandler.py
CHANGED
@@ -5,7 +5,10 @@ from .ExtractorModels import ExtractResult
|
|
5
5
|
import subprocess, os
|
6
6
|
|
7
7
|
class MediaHandler:
|
8
|
-
def __init__(self, title: str = "KekikStream", headers: dict =
|
8
|
+
def __init__(self, title: str = "KekikStream", headers: dict = None):
|
9
|
+
if headers is None:
|
10
|
+
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5)"}
|
11
|
+
|
9
12
|
self.headers = headers
|
10
13
|
self.title = title
|
11
14
|
|
@@ -29,16 +32,16 @@ class MediaHandler:
|
|
29
32
|
if "Referer" in self.headers:
|
30
33
|
vlc_command.append(f"--http-referrer={self.headers.get('Referer')}")
|
31
34
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
+
vlc_command.extend(
|
36
|
+
f"--sub-file={subtitle.url}" for subtitle in extract_data.subtitles
|
37
|
+
)
|
35
38
|
vlc_command.append(extract_data.url)
|
36
39
|
|
37
40
|
with open(os.devnull, "w") as devnull:
|
38
41
|
subprocess.run(vlc_command, stdout=devnull, stderr=devnull, check=True)
|
39
42
|
|
40
|
-
except subprocess.CalledProcessError as
|
41
|
-
konsol.print(f"[red]VLC oynatma hatası: {
|
43
|
+
except subprocess.CalledProcessError as hata:
|
44
|
+
konsol.print(f"[red]VLC oynatma hatası: {hata}[/red]")
|
42
45
|
konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
|
43
46
|
except FileNotFoundError:
|
44
47
|
konsol.print("[red]VLC bulunamadı! VLC kurulu olduğundan emin olun.[/red]")
|
@@ -60,16 +63,16 @@ class MediaHandler:
|
|
60
63
|
if "Cookie" in self.headers:
|
61
64
|
mpv_command.append(f"--http-header-fields=Cookie: {self.headers.get('Cookie')}")
|
62
65
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
+
mpv_command.extend(
|
67
|
+
f"--sub-file={subtitle.url}" for subtitle in extract_data.subtitles
|
68
|
+
)
|
66
69
|
mpv_command.append(extract_data.url)
|
67
70
|
|
68
71
|
with open(os.devnull, "w") as devnull:
|
69
72
|
subprocess.run(mpv_command, stdout=devnull, stderr=devnull, check=True)
|
70
73
|
|
71
|
-
except subprocess.CalledProcessError as
|
72
|
-
konsol.print(f"[red]mpv oynatma hatası: {
|
74
|
+
except subprocess.CalledProcessError as hata:
|
75
|
+
konsol.print(f"[red]mpv oynatma hatası: {hata}[/red]")
|
73
76
|
konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
|
74
77
|
except FileNotFoundError:
|
75
78
|
konsol.print("[red]mpv bulunamadı! mpv kurulu olduğundan emin olun.[/red]")
|
KekikStream/Core/PluginLoader.py
CHANGED
@@ -18,11 +18,11 @@ class PluginLoader:
|
|
18
18
|
|
19
19
|
if self.global_plugins_dir.exists():
|
20
20
|
konsol.log(f"[green][*] Global Plugin dizininden yükleniyor: {self.global_plugins_dir}[/green]")
|
21
|
-
plugins
|
21
|
+
plugins |= self._load_from_directory(self.global_plugins_dir)
|
22
22
|
|
23
23
|
if self.local_plugins_dir.exists():
|
24
24
|
konsol.log(f"[green][*] Yerel Plugin dizininden yükleniyor: {self.local_plugins_dir}[/green]")
|
25
|
-
plugins
|
25
|
+
plugins |= self._load_from_directory(self.local_plugins_dir)
|
26
26
|
|
27
27
|
if not plugins:
|
28
28
|
konsol.print("[yellow][!] Yüklenecek bir Plugin bulunamadı![/yellow]")
|
@@ -25,8 +25,8 @@ class MixPlayHD(ExtractorBase):
|
|
25
25
|
try:
|
26
26
|
decrypted_data = AESManager.decrypt(be_player_data, be_player_pass).replace("\\", "")
|
27
27
|
decrypted_json = json.loads(decrypted_data)
|
28
|
-
except Exception as
|
29
|
-
raise RuntimeError(f"Decryption failed: {
|
28
|
+
except Exception as hata:
|
29
|
+
raise RuntimeError(f"Decryption failed: {hata}") from hata
|
30
30
|
|
31
31
|
if video_url_match := re.search(
|
32
32
|
pattern = r'"video_location":"([^"]+)"',
|
@@ -21,8 +21,8 @@ class Odnoklassniki(ExtractorBase):
|
|
21
21
|
try:
|
22
22
|
istek = await self.fetch_with_redirects(url)
|
23
23
|
istek.raise_for_status()
|
24
|
-
except Exception as
|
25
|
-
raise RuntimeError(f"Failed to fetch the URL: {url}, Error: {
|
24
|
+
except Exception as hata:
|
25
|
+
raise RuntimeError(f"Failed to fetch the URL: {url}, Error: {hata}") from hata
|
26
26
|
|
27
27
|
response_text = (
|
28
28
|
istek.text.replace("\\"", "\"")
|
@@ -41,8 +41,8 @@ class Odnoklassniki(ExtractorBase):
|
|
41
41
|
|
42
42
|
try:
|
43
43
|
videos = json.loads(videos_match[1])
|
44
|
-
except json.JSONDecodeError:
|
45
|
-
raise ValueError("Failed to parse video data.")
|
44
|
+
except json.JSONDecodeError as hata:
|
45
|
+
raise ValueError("Failed to parse video data.") from hata
|
46
46
|
|
47
47
|
quality_order = {
|
48
48
|
"ULTRA": 6, # 4K veya daha yüksek
|
@@ -43,8 +43,8 @@ class PeaceMakerst(ExtractorBase):
|
|
43
43
|
video_response = response.json()
|
44
44
|
if video_sources := video_response.get("videoSources", []):
|
45
45
|
m3u_link = video_sources[-1]["file"]
|
46
|
-
except (json.JSONDecodeError, KeyError):
|
47
|
-
raise ValueError("Peace response is invalid or null.")
|
46
|
+
except (json.JSONDecodeError, KeyError) as hata:
|
47
|
+
raise ValueError("Peace response is invalid or null.") from hata
|
48
48
|
|
49
49
|
if not m3u_link:
|
50
50
|
raise ValueError("m3u link not found.")
|
@@ -48,8 +48,8 @@ class RapidVid(ExtractorBase):
|
|
48
48
|
|
49
49
|
escaped_hex = extracted_value[1].replace("\\\\x", "")
|
50
50
|
decoded_url = bytes.fromhex(escaped_hex).decode("utf-8")
|
51
|
-
except Exception as
|
52
|
-
raise RuntimeError(f"Extraction failed: {
|
51
|
+
except Exception as hata:
|
52
|
+
raise RuntimeError(f"Extraction failed: {hata}") from hata
|
53
53
|
|
54
54
|
await self.close()
|
55
55
|
return ExtractResult(
|
@@ -26,8 +26,8 @@ class Sobreatsesuyp(ExtractorBase):
|
|
26
26
|
|
27
27
|
try:
|
28
28
|
post_json = json.loads(post_istek.text)
|
29
|
-
except json.JSONDecodeError:
|
30
|
-
raise ValueError("Failed to parse JSON response.")
|
29
|
+
except json.JSONDecodeError as hata:
|
30
|
+
raise ValueError("Failed to parse JSON response.") from hata
|
31
31
|
|
32
32
|
video_data_list = post_json[1:] if isinstance(post_json, list) else []
|
33
33
|
|
KekikStream/Extractors/TRsTX.py
CHANGED
@@ -26,8 +26,8 @@ class TRsTX(ExtractorBase):
|
|
26
26
|
|
27
27
|
try:
|
28
28
|
post_json = json.loads(post_istek.text)
|
29
|
-
except json.JSONDecodeError:
|
30
|
-
raise ValueError("Failed to parse JSON response.")
|
29
|
+
except json.JSONDecodeError as hata:
|
30
|
+
raise ValueError("Failed to parse JSON response.") from hata
|
31
31
|
|
32
32
|
video_data_list = post_json[1:] if isinstance(post_json, list) else []
|
33
33
|
|
@@ -40,8 +40,8 @@ class VidMoly(ExtractorBase):
|
|
40
40
|
video_data = self._add_marks(script_content, "file")
|
41
41
|
try:
|
42
42
|
video_sources = json.loads(f"[{video_data}]")
|
43
|
-
except json.JSONDecodeError:
|
44
|
-
raise ValueError("Video kaynakları ayrıştırılamadı.")
|
43
|
+
except json.JSONDecodeError as hata:
|
44
|
+
raise ValueError("Video kaynakları ayrıştırılamadı.") from hata
|
45
45
|
|
46
46
|
# Altyazı kaynaklarını ayrıştır
|
47
47
|
subtitles = []
|
@@ -23,8 +23,8 @@ class VideoSeyred(ExtractorBase):
|
|
23
23
|
else:
|
24
24
|
raise ValueError("Empty response from VideoSeyred.")
|
25
25
|
|
26
|
-
except (json.JSONDecodeError, IndexError) as
|
27
|
-
raise RuntimeError(f"Failed to parse response: {
|
26
|
+
except (json.JSONDecodeError, IndexError) as hata:
|
27
|
+
raise RuntimeError(f"Failed to parse response: {hata}") from hata
|
28
28
|
|
29
29
|
subtitles = [
|
30
30
|
Subtitle(name=track["label"], url=self.fix_url(track["file"]))
|
KekikStream/Plugins/DiziBox.py
CHANGED
@@ -99,7 +99,7 @@ class DiziBox(PluginBase):
|
|
99
99
|
|
100
100
|
if atob_data := re.search(r"unescape\(\"(.*)\"\)", istek.text):
|
101
101
|
decoded_atob = urllib.parse.unquote(atob_data[1])
|
102
|
-
str_atob = base64.b64decode(decoded_atob).decode(
|
102
|
+
str_atob = base64.b64decode(decoded_atob).decode("utf-8")
|
103
103
|
|
104
104
|
if iframe := Selector(str_atob).css("div#Player iframe::attr(src)").get():
|
105
105
|
results.append(iframe)
|
@@ -61,7 +61,7 @@ class FullHDFilmizlesene(PluginBase):
|
|
61
61
|
secici = Selector(istek.text)
|
62
62
|
|
63
63
|
script = secici.xpath("(//script)[1]").get()
|
64
|
-
scx_data = json.loads(re.findall(r
|
64
|
+
scx_data = json.loads(re.findall(r"scx = (.*?);", script)[0])
|
65
65
|
scx_keys = list(scx_data.keys())
|
66
66
|
|
67
67
|
link_list = []
|
@@ -72,6 +72,7 @@ class FullHDFilmizlesene(PluginBase):
|
|
72
72
|
if isinstance(t, dict):
|
73
73
|
link_list.extend(StringCodec.decode(v) for k, v in t.items())
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
|
75
|
+
return [
|
76
|
+
f"https:{link}" if link.startswith("//") else link
|
77
|
+
for link in link_list
|
78
|
+
]
|
@@ -60,8 +60,7 @@ class JetFilmizle(PluginBase):
|
|
60
60
|
secici = Selector(istek.text)
|
61
61
|
|
62
62
|
iframes = []
|
63
|
-
main_iframe
|
64
|
-
if main_iframe:
|
63
|
+
if main_iframe := secici.css("div#movie iframe::attr(data-src), div#movie iframe::attr(data), div#movie iframe::attr(src)").get():
|
65
64
|
iframes.append(self.fix_url(main_iframe))
|
66
65
|
|
67
66
|
for part in secici.css("div.film_part a"):
|
@@ -72,13 +71,11 @@ class JetFilmizle(PluginBase):
|
|
72
71
|
part_istek = await self.oturum.get(part_href)
|
73
72
|
part_secici = Selector(part_istek.text)
|
74
73
|
|
75
|
-
iframe
|
76
|
-
if iframe:
|
74
|
+
if iframe := part_secici.css("div#movie iframe::attr(data-src), div#movie iframe::attr(data), div#movie iframe::attr(src)").get():
|
77
75
|
iframes.append(self.fix_url(iframe))
|
78
76
|
else:
|
79
77
|
for link in part_secici.css("div#movie p a"):
|
80
|
-
download_link
|
81
|
-
if download_link:
|
78
|
+
if download_link := link.attrib.get("href"):
|
82
79
|
iframes.append(self.fix_url(download_link))
|
83
80
|
|
84
81
|
processed_iframes = []
|
@@ -87,8 +84,7 @@ class JetFilmizle(PluginBase):
|
|
87
84
|
jetv_istek = await self.oturum.get(iframe)
|
88
85
|
jetv_secici = Selector(jetv_istek.text)
|
89
86
|
|
90
|
-
jetv_iframe
|
91
|
-
if jetv_iframe:
|
87
|
+
if jetv_iframe := jetv_secici.css("iframe::attr(src)").get():
|
92
88
|
processed_iframes.append(self.fix_url(jetv_iframe))
|
93
89
|
else:
|
94
90
|
processed_iframes.append(iframe)
|
KekikStream/__init__.py
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
2
2
|
|
3
|
-
from .CLI
|
4
|
-
from .Managers
|
5
|
-
from .Core
|
6
|
-
from asyncio
|
3
|
+
from .CLI import konsol, cikis_yap, hata_yakala, pypi_kontrol_guncelle
|
4
|
+
from .Managers import PluginManager, ExtractorManager, UIManager, MediaManager
|
5
|
+
from .Core import PluginBase, ExtractorBase, SeriesInfo
|
6
|
+
from asyncio import run
|
7
|
+
from contextlib import suppress
|
7
8
|
|
8
9
|
class KekikStream:
|
9
10
|
def __init__(self):
|
@@ -61,9 +62,15 @@ class KekikStream:
|
|
61
62
|
konsol.print("[bold red]Arama sonucu bulunamadı![/bold red]")
|
62
63
|
return await self.sonuc_bulunamadi()
|
63
64
|
|
64
|
-
if secilen_sonuc := await self.
|
65
|
+
if secilen_sonuc := await self.eklenti_sonuc_secimi(sonuclar):
|
65
66
|
await self.sonuc_detaylari_goster({"plugin": self.suanki_eklenti.name, "url": secilen_sonuc})
|
66
67
|
|
68
|
+
async def eklenti_sonuc_secimi(self, sonuclar):
|
69
|
+
return await self.arayuz_yonetici.select_from_fuzzy(
|
70
|
+
message = "İçerik sonuçlarından birini seçin:",
|
71
|
+
choices = [{"name": sonuc.title, "value": sonuc.url} for sonuc in sonuclar]
|
72
|
+
)
|
73
|
+
|
67
74
|
async def tum_eklentilerde_arama(self):
|
68
75
|
self.arayuz_yonetici.clear_console()
|
69
76
|
konsol.rule("[bold cyan]Tüm Eklentilerde Arama Yapın[/bold cyan]")
|
@@ -77,15 +84,11 @@ class KekikStream:
|
|
77
84
|
secilen_sonuc = await self.tum_sonuc_secimi(sonuclar)
|
78
85
|
|
79
86
|
if secilen_sonuc:
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
return await self.arayuz_yonetici.select_from_fuzzy(
|
84
|
-
message = "İçerik sonuçlarından birini seçin:",
|
85
|
-
choices = [{"name": sonuc.title, "value": sonuc.url} for sonuc in sonuclar]
|
86
|
-
)
|
87
|
+
for _ in range(3):
|
88
|
+
with suppress(Exception):
|
89
|
+
return await self.sonuc_detaylari_goster(secilen_sonuc)
|
87
90
|
|
88
|
-
async def tum_eklentilerde_arama_sorgula(self, sorgu: str):
|
91
|
+
async def tum_eklentilerde_arama_sorgula(self, sorgu: str) -> list:
|
89
92
|
tum_sonuclar = []
|
90
93
|
|
91
94
|
for eklenti_adi, eklenti in self.eklentiler_yonetici.plugins.items():
|
@@ -112,7 +115,7 @@ class KekikStream:
|
|
112
115
|
|
113
116
|
async def tum_sonuc_secimi(self, sonuclar):
|
114
117
|
secenekler = [
|
115
|
-
{"name": f"
|
118
|
+
{"name": f"[{sonuc['plugin']}]".ljust(21) + f" » {sonuc['title']}", "value": sonuc}
|
116
119
|
for sonuc in sonuclar
|
117
120
|
]
|
118
121
|
|
KekikStream/__main__.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: KekikStream
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.8
|
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
|
@@ -1,14 +1,14 @@
|
|
1
|
-
KekikStream/__init__.py,sha256=
|
2
|
-
KekikStream/__main__.py,sha256=
|
1
|
+
KekikStream/__init__.py,sha256=8sSiunt3dOsmNLfNkkp06y74ogKxV03Y59NM-mdPn04,10613
|
2
|
+
KekikStream/__main__.py,sha256=B81dQoeGEb-T5Sycs3eNAmW7unvx0Mef0syCjs4nPds,137
|
3
3
|
KekikStream/requirements.txt,sha256=gS_TUUQx5A7FUmRGxj2dQedxheD7qA6AswdUb2y_Ub8,70
|
4
4
|
KekikStream/CLI/__init__.py,sha256=U6oLq_O7u5y2eHhBnmfhZNns_EqHHJXJmzl8jvZFUNY,230
|
5
5
|
KekikStream/CLI/pypi_kontrol.py,sha256=MchatOwCWCpFBtgt09yag9Rjal9XFyh2W_oVs2p7SNg,1518
|
6
|
-
KekikStream/Core/ExtractorBase.py,sha256
|
6
|
+
KekikStream/Core/ExtractorBase.py,sha256=o9VaOZ0UVKNSxJt6jGpr9OfbfKROv6ChooKC2c8X2WQ,1154
|
7
7
|
KekikStream/Core/ExtractorLoader.py,sha256=rrll3F2CyVmx3foa57PG0FocQMrFuMpdlG0Uf0-2Fz4,3915
|
8
8
|
KekikStream/Core/ExtractorModels.py,sha256=huIcPQ5VIRfMx0LcL5SS1u4dldZbHjzHKEdSEtOPlc0,456
|
9
|
-
KekikStream/Core/MediaHandler.py,sha256=
|
9
|
+
KekikStream/Core/MediaHandler.py,sha256=9nwudUVv4Zu8r0uHswFcwv5OWDKoz2k_PhjHvcq0m3I,3345
|
10
10
|
KekikStream/Core/PluginBase.py,sha256=ZQx6adxOKuX50TPN5pxE8oG9FD-ZjPXSHpSiW086QPQ,2479
|
11
|
-
KekikStream/Core/PluginLoader.py,sha256=
|
11
|
+
KekikStream/Core/PluginLoader.py,sha256=5HQF8Em1TjvqMBPLKB7M_i2y6zPH6JZao-uekeacoSs,2574
|
12
12
|
KekikStream/Core/PluginModels.py,sha256=WWPEz8PpZZ4bLMDJzTE19BsQEJObkyhaYjDkyLaF2Ck,2365
|
13
13
|
KekikStream/Core/__init__.py,sha256=HZpXs3MKy4joO0sDpIGcZ2DrUKwK49IKG-GQgKbO2jk,416
|
14
14
|
KekikStream/Extractors/CloseLoad.py,sha256=YmDB3YvuDaCUbQ0T_tmhnkEsC5mSdEN6GNoAR662fl8,990
|
@@ -19,38 +19,38 @@ KekikStream/Extractors/FourPlayRu.py,sha256=wq1ylxKpsO_IBoYr_ALzB2dVrQpJ-jY9lf2z
|
|
19
19
|
KekikStream/Extractors/HDStreamAble.py,sha256=66n5EvIdX_or5cdnlJ_Uqmzi50n4rl9c5VCw8kBqhQk,245
|
20
20
|
KekikStream/Extractors/Hotlinger.py,sha256=NFMRgUmb6BCrJfa7Hi0VarDNYvCeVknBWEk24FKBBa0,224
|
21
21
|
KekikStream/Extractors/MailRu.py,sha256=lB3Xy912EaSEUw7Im65L5TwtIeM7OLFV1_9lan39g40,1308
|
22
|
-
KekikStream/Extractors/MixPlayHD.py,sha256=
|
23
|
-
KekikStream/Extractors/Odnoklassniki.py,sha256=
|
22
|
+
KekikStream/Extractors/MixPlayHD.py,sha256=M7Zxmpkazkj6ewgLWKKDeZDbBOCM9vkMDyIaVhaSPrY,1554
|
23
|
+
KekikStream/Extractors/Odnoklassniki.py,sha256=B0A2krVVvzmpZBzIpxu40WB9AZ_zzH-Km2HTetrNvqQ,3593
|
24
24
|
KekikStream/Extractors/OkRuHTTP.py,sha256=L-B0i_i_Vnm61GvUfd6cGIW-o_H4M-C7DO_cdw2rQPU,228
|
25
25
|
KekikStream/Extractors/OkRuSSL.py,sha256=FHJ5XZ1dO5ED3mIku3e3vnq8K0slrcr0jqhaUnHmfVk,227
|
26
|
-
KekikStream/Extractors/PeaceMakerst.py,sha256=
|
26
|
+
KekikStream/Extractors/PeaceMakerst.py,sha256=VSXeCeA_-9IkKdjoQ3lvA4FFDzdT_Oj1oFM7i-_3tvQ,2100
|
27
27
|
KekikStream/Extractors/Pichive.py,sha256=BSVYFwL3Ax6yGoS1WkpOWtngxNyuZLoKzpPwjibpu2s,221
|
28
28
|
KekikStream/Extractors/PixelDrain.py,sha256=1kf1kKKxcYwLVPo_8Fg1Za3E2kOplqqVFM41xBT52KY,992
|
29
29
|
KekikStream/Extractors/PlayRu.py,sha256=DQMZyCSJwLkrh-gfDD8T1DvUFNBAKUXpByeCAWuK6YY,215
|
30
|
-
KekikStream/Extractors/RapidVid.py,sha256=
|
30
|
+
KekikStream/Extractors/RapidVid.py,sha256=n03CyrnFLSoL6Ys5Dy4a4d-5iIAdmouqz4-k6Vl3Hok,2369
|
31
31
|
KekikStream/Extractors/SibNet.py,sha256=Jrl93OdKwEhssG348-F2BKaj-XUS7v-Qw3dKMh_ZMRQ,878
|
32
|
-
KekikStream/Extractors/Sobreatsesuyp.py,sha256=
|
33
|
-
KekikStream/Extractors/TRsTX.py,sha256=
|
32
|
+
KekikStream/Extractors/Sobreatsesuyp.py,sha256=mBYu29rHpAZfB8CYJ6Wuy3roUvdRyqzkfAxmEUkkaxw,1959
|
33
|
+
KekikStream/Extractors/TRsTX.py,sha256=ammizq5izjv9FpeV5kyXZPftEX_K0JGQfAnlMhl2Sn0,2111
|
34
34
|
KekikStream/Extractors/TauVideo.py,sha256=ID-QwdPnl62wTECSzTFA8Z0P7Rv9LELd6xdvBz5ALiQ,1018
|
35
35
|
KekikStream/Extractors/TurboImgz.py,sha256=VXx9vZZRTdQiVNER0LcXm2nsv2OaXnxuPpslG-sEKD0,826
|
36
|
-
KekikStream/Extractors/VidMoly.py,sha256=
|
36
|
+
KekikStream/Extractors/VidMoly.py,sha256=BKJgk60GomFYiLFsRQSR2sOYP105Aix5y5XLazBNWmw,3368
|
37
37
|
KekikStream/Extractors/VidMoxy.py,sha256=_K6BA7Uo59DA3ty_tsayCUZjXmRoDBTghekVNXiuZ7g,1800
|
38
|
-
KekikStream/Extractors/VideoSeyred.py,sha256=
|
38
|
+
KekikStream/Extractors/VideoSeyred.py,sha256=otyGi1zdY_JPrXJjoZjesCQDiOkxFdaWiXQ9mOmrygA,1780
|
39
39
|
KekikStream/Managers/ExtractorManager.py,sha256=9rGlUsnedJ7fwIeObN5Vsm8H5VLal0ODO7F93dDRx8w,976
|
40
40
|
KekikStream/Managers/MediaManager.py,sha256=F7mkSvAttAaMHRvnDcxnV2K1D_sK644BCSrEaAmMl_U,522
|
41
41
|
KekikStream/Managers/PluginManager.py,sha256=YDBLHB_Fh79A3Pei0ny2KLVY4VSihdNiKBh_w5tBl-0,637
|
42
42
|
KekikStream/Managers/UIManager.py,sha256=OrGxzbhRPTCqiLEXjipLb8ChF7saV3fvFIUXLKT9w6Q,1612
|
43
43
|
KekikStream/Managers/__init__.py,sha256=3085I_9Sa2L_Vq6Z-QvYUYn1BapkN4sQqBo8ITZoD_4,251
|
44
|
-
KekikStream/Plugins/DiziBox.py,sha256=
|
44
|
+
KekikStream/Plugins/DiziBox.py,sha256=ARzsao-r91c3PVV_3-NCLvNcVRSIxjlGdWl_3-1Q6Mo,5722
|
45
45
|
KekikStream/Plugins/FilmMakinesi.py,sha256=rz8TQeL41PJbeEmksgPHIhp6J-4vbSCBTeEH0ukExz4,2822
|
46
|
-
KekikStream/Plugins/FullHDFilmizlesene.py,sha256=
|
47
|
-
KekikStream/Plugins/JetFilmizle.py,sha256=
|
46
|
+
KekikStream/Plugins/FullHDFilmizlesene.py,sha256=Fa0gRP_NoMfPC8HIKRxERjQVOv8Fyb-ayMJ2EooZ7BE,3080
|
47
|
+
KekikStream/Plugins/JetFilmizle.py,sha256=FXkMSQtjYoxwIonjRENFa91rC42L_8SYRhjhuSgsu60,3919
|
48
48
|
KekikStream/Plugins/SezonlukDizi.py,sha256=5BZVzQ2eQtymHxO0bzjA2ho4FFNahPFQly4hoHuH8lo,4441
|
49
49
|
KekikStream/Plugins/SineWix.py,sha256=ZtcIwPW0ONGkSjT7Ye8b71RWdHZMUZefX-JTWu6uGSs,4854
|
50
50
|
KekikStream/Plugins/UgurFilm.py,sha256=yYXee5uxwNnPqFJZ6s6cRkmUyqS3Vv8x-iesPalc4j4,2930
|
51
|
-
KekikStream-0.3.
|
52
|
-
KekikStream-0.3.
|
53
|
-
KekikStream-0.3.
|
54
|
-
KekikStream-0.3.
|
55
|
-
KekikStream-0.3.
|
56
|
-
KekikStream-0.3.
|
51
|
+
KekikStream-0.3.8.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
52
|
+
KekikStream-0.3.8.dist-info/METADATA,sha256=bnFaZhNtzr4FZX37i-4CxN4kbom-meinCuh_g7apaSw,3987
|
53
|
+
KekikStream-0.3.8.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
54
|
+
KekikStream-0.3.8.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
|
55
|
+
KekikStream-0.3.8.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
|
56
|
+
KekikStream-0.3.8.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|