KekikStream 1.8.7__tar.gz → 1.8.8__tar.gz
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-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/Media/MediaHandler.py +84 -12
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream.egg-info/PKG-INFO +84 -97
- {kekikstream-1.8.7 → kekikstream-1.8.8}/PKG-INFO +84 -97
- {kekikstream-1.8.7 → kekikstream-1.8.8}/README.md +83 -96
- {kekikstream-1.8.7 → kekikstream-1.8.8}/setup.py +1 -1
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/CLI/__init__.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/CLI/pypi_kontrol.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/Extractor/ExtractorBase.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/Extractor/ExtractorLoader.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/Extractor/ExtractorManager.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/Extractor/ExtractorModels.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/Media/MediaManager.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/Plugin/PluginBase.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/Plugin/PluginLoader.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/Plugin/PluginManager.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/Plugin/PluginModels.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/UI/UIManager.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Core/__init__.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/CloseLoad.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/ContentX.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/DzenRu.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/ExPlay.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/FirePlayer.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/FourCX.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/FourPichive.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/FourPlayRu.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/HDPlayerSystem.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/HDStreamAble.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/Hotlinger.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/JetTv.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/MailRu.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/MixPlayHD.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/MixTiger.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/MolyStream.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/Odnoklassniki.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/OkRuHTTP.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/OkRuSSL.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/PeaceMakerst.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/Pichive.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/PixelDrain.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/PlayRu.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/PlayerFilmIzle.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/RapidVid.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/SetPlay.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/SetPrime.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/SibNet.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/Sobreatsesuyp.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/TRsTX.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/TauVideo.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/TurboImgz.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/TurkeyPlayer.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/VidHide.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/VidMoly.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/VidMolyMe.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/VidMoxy.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/VidPapi.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/VideoSeyred.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Extractors/YildizKisaFilm.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/DiziBox.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/DiziPal.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/DiziYou.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/Dizilla.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/FilmBip.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/FilmMakinesi.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/FilmModu.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/FullHDFilm.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/HDFilmCehennemi.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/JetFilmizle.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/KultFilmler.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/RecTV.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/RoketDizi.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/SelcukFlix.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/SezonlukDizi.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/SineWix.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/Sinefy.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/SinemaCX.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/Sinezy.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/SuperFilmGeldi.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/Plugins/UgurFilm.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/__init__.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/__main__.py +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream/requirements.txt +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream.egg-info/SOURCES.txt +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream.egg-info/dependency_links.txt +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream.egg-info/entry_points.txt +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream.egg-info/requires.txt +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/KekikStream.egg-info/top_level.txt +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/LICENSE +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/MANIFEST.in +0 -0
- {kekikstream-1.8.7 → kekikstream-1.8.8}/setup.cfg +0 -0
|
@@ -2,13 +2,59 @@
|
|
|
2
2
|
|
|
3
3
|
from ...CLI import konsol
|
|
4
4
|
from ..Extractor.ExtractorModels import ExtractResult
|
|
5
|
-
import subprocess, os
|
|
5
|
+
import subprocess, os, yt_dlp
|
|
6
6
|
|
|
7
7
|
class MediaHandler:
|
|
8
8
|
def __init__(self, title: str = "KekikStream"):
|
|
9
9
|
self.title = title
|
|
10
10
|
self.headers = {}
|
|
11
11
|
|
|
12
|
+
self._ytdlp_extractors = yt_dlp.extractor.list_extractors()
|
|
13
|
+
|
|
14
|
+
def should_use_ytdlp(self, url: str, user_agent: str) -> bool:
|
|
15
|
+
"""
|
|
16
|
+
yt-dlp gereken durumları akıllıca tespit et
|
|
17
|
+
|
|
18
|
+
yt-dlp'nin kendi 1863+ extractor'ını kullanarak otomatik tespit yapar.
|
|
19
|
+
YouTube, Vimeo, Twitch, TikTok, Instagram vb. binlerce site için çalışır.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
url: Video URL'si
|
|
23
|
+
user_agent: User-Agent string'i
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
bool: yt-dlp kullanılması gerekiyorsa True
|
|
27
|
+
"""
|
|
28
|
+
# 1. User-Agent bazlı kontrol (mevcut davranışı koru - RecTV, MolyStream için)
|
|
29
|
+
ytdlp_user_agents = [
|
|
30
|
+
"googleusercontent",
|
|
31
|
+
"Mozilla/5.0 (X11; Linux x86_64; rv:101.0) Gecko/20100101 Firefox/101.0"
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
if user_agent in ytdlp_user_agents:
|
|
35
|
+
konsol.log("[cyan][ℹ] User-Agent bazlı yt-dlp tespiti[/cyan]")
|
|
36
|
+
return True
|
|
37
|
+
|
|
38
|
+
# 2. yt-dlp'nin kendi extractor tespitini kullan
|
|
39
|
+
try:
|
|
40
|
+
# Tüm extractorları kontrol et (Generic hariç)
|
|
41
|
+
for ie in self._ytdlp_extractors:
|
|
42
|
+
# Generic extractor'ı atla (her URL'ye uygundur ama özel değildir)
|
|
43
|
+
if ie.ie_key() == 'Generic':
|
|
44
|
+
continue
|
|
45
|
+
|
|
46
|
+
# Bu extractor bu URL'yi işleyebilir mi?
|
|
47
|
+
if ie.suitable(url):
|
|
48
|
+
konsol.log(f"[cyan][ℹ] yt-dlp extractor bulundu: {ie.ie_key()}[/cyan]")
|
|
49
|
+
return True
|
|
50
|
+
|
|
51
|
+
# Özel extractor bulunamadı
|
|
52
|
+
return False
|
|
53
|
+
|
|
54
|
+
except Exception as e:
|
|
55
|
+
konsol.log(f"[yellow][⚠] yt-dlp kontrol hatası: {e}[/yellow]")
|
|
56
|
+
return False
|
|
57
|
+
|
|
12
58
|
def play_media(self, extract_data: ExtractResult):
|
|
13
59
|
# user-agent ekle (varsayılan veya extract_data'dan)
|
|
14
60
|
user_agent = extract_data.user_agent or "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5)"
|
|
@@ -18,19 +64,38 @@ class MediaHandler:
|
|
|
18
64
|
if extract_data.referer:
|
|
19
65
|
self.headers["referer"] = extract_data.referer
|
|
20
66
|
|
|
21
|
-
#
|
|
22
|
-
if user_agent in ["googleusercontent", "Mozilla/5.0 (X11; Linux x86_64; rv:101.0) Gecko/20100101 Firefox/101.0"]:
|
|
23
|
-
return self.play_with_ytdlp(extract_data)
|
|
24
|
-
|
|
25
|
-
# İşletim sistemine göre oynatıcı seç
|
|
67
|
+
# İşletim sistemine göre oynatıcı seç (Android durumu)
|
|
26
68
|
if subprocess.check_output(['uname', '-o']).strip() == b'Android':
|
|
27
69
|
return self.play_with_android_mxplayer(extract_data)
|
|
28
70
|
|
|
29
|
-
#
|
|
30
|
-
if extract_data.
|
|
31
|
-
|
|
71
|
+
# Akıllı yt-dlp tespiti
|
|
72
|
+
if self.should_use_ytdlp(extract_data.url, user_agent):
|
|
73
|
+
konsol.log("[green][✓] yt-dlp kullanılacak[/green]")
|
|
74
|
+
success = self.play_with_ytdlp(extract_data)
|
|
75
|
+
if success:
|
|
76
|
+
return True
|
|
77
|
+
konsol.log("[yellow][⚠] yt-dlp başarısız, standart oynatıcılar deneniyor...[/yellow]")
|
|
78
|
+
|
|
79
|
+
# Oynatıcı öncelik sırası (fallback zincirleme)
|
|
80
|
+
players = [
|
|
81
|
+
("MPV", self.play_with_mpv),
|
|
82
|
+
("VLC", self.play_with_vlc),
|
|
83
|
+
("yt-dlp", self.play_with_ytdlp)
|
|
84
|
+
]
|
|
85
|
+
|
|
86
|
+
# Fallback zincirleme
|
|
87
|
+
for player_name, player_func in players:
|
|
88
|
+
try:
|
|
89
|
+
result = player_func(extract_data)
|
|
90
|
+
if result or result is None: # None = MPV (exception yok)
|
|
91
|
+
konsol.log(f"[green][✓] {player_name} ile başarılı[/green]")
|
|
92
|
+
return True
|
|
93
|
+
except Exception as e:
|
|
94
|
+
konsol.log(f"[yellow][⚠] {player_name} hatası: {e}[/yellow]")
|
|
95
|
+
continue
|
|
32
96
|
|
|
33
|
-
|
|
97
|
+
konsol.print("[red][✗] Hiçbir oynatıcı çalışmadı![/red]")
|
|
98
|
+
return False
|
|
34
99
|
|
|
35
100
|
def play_with_vlc(self, extract_data: ExtractResult):
|
|
36
101
|
konsol.log(f"[yellow][»] VLC ile Oynatılıyor : {extract_data.url}")
|
|
@@ -88,12 +153,15 @@ class MediaHandler:
|
|
|
88
153
|
with open(os.devnull, "w") as devnull:
|
|
89
154
|
subprocess.run(mpv_command, stdout=devnull, stderr=devnull, check=True)
|
|
90
155
|
|
|
156
|
+
return True
|
|
91
157
|
except subprocess.CalledProcessError as hata:
|
|
92
158
|
konsol.print(f"[red]mpv oynatma hatası: {hata}[/red]")
|
|
93
159
|
konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
|
|
160
|
+
return False
|
|
94
161
|
except FileNotFoundError:
|
|
95
162
|
konsol.print("[red]mpv bulunamadı! mpv kurulu olduğundan emin olun.[/red]")
|
|
96
163
|
konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
|
|
164
|
+
return False
|
|
97
165
|
|
|
98
166
|
def play_with_ytdlp(self, extract_data: ExtractResult):
|
|
99
167
|
konsol.log(f"[yellow][»] yt-dlp ile Oynatılıyor : {extract_data.url}")
|
|
@@ -121,12 +189,15 @@ class MediaHandler:
|
|
|
121
189
|
with subprocess.Popen(ytdlp_command, stdout=subprocess.PIPE) as ytdlp_proc:
|
|
122
190
|
subprocess.run(mpv_command, stdin=ytdlp_proc.stdout, check=True)
|
|
123
191
|
|
|
192
|
+
return True
|
|
124
193
|
except subprocess.CalledProcessError as hata:
|
|
125
194
|
konsol.print(f"[red]Oynatma hatası: {hata}[/red]")
|
|
126
195
|
konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
|
|
196
|
+
return False
|
|
127
197
|
except FileNotFoundError:
|
|
128
198
|
konsol.print("[red]yt-dlp veya mpv bulunamadı! Kurulumlarından emin olun.[/red]")
|
|
129
199
|
konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
|
|
200
|
+
return False
|
|
130
201
|
|
|
131
202
|
def play_with_android_mxplayer(self, extract_data: ExtractResult):
|
|
132
203
|
konsol.log(f"[yellow][»] MxPlayer ile Oynatılıyor : {extract_data.url}")
|
|
@@ -151,11 +222,12 @@ class MediaHandler:
|
|
|
151
222
|
with open(os.devnull, "w") as devnull:
|
|
152
223
|
subprocess.run(android_command, stdout=devnull, stderr=devnull, check=True)
|
|
153
224
|
|
|
154
|
-
return
|
|
155
|
-
|
|
225
|
+
return True
|
|
156
226
|
except subprocess.CalledProcessError as hata:
|
|
157
227
|
konsol.print(f"[red]{paket} oynatma hatası: {hata}[/red]")
|
|
158
228
|
konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
|
|
229
|
+
return False
|
|
159
230
|
except FileNotFoundError:
|
|
160
231
|
konsol.print(f"Paket: {paket}, Hata: MX Player kurulu değil")
|
|
161
232
|
konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
|
|
233
|
+
return False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: KekikStream
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.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
|
|
@@ -51,8 +51,8 @@ Dynamic: summary
|
|
|
51
51
|
|
|
52
52
|
[](https://github.com/keyiflerolsun/KekikStream/actions/workflows/pypiYukle.yml)
|
|
53
53
|
|
|
54
|
-
**Modüler ve
|
|
55
|
-
Terminal üzerinden
|
|
54
|
+
**Modüler ve genişletilebilir medya streaming kütüphanesi**
|
|
55
|
+
Terminal üzerinden içerik arayın, VLC/MPV ile doğrudan izleyin veya kendi API’nizi kurun. 🚀
|
|
56
56
|
|
|
57
57
|
[](https://github.com/user-attachments/assets/63d31bb0-0b69-40b4-84aa-66623f2a253f)
|
|
58
58
|
|
|
@@ -61,41 +61,96 @@ Terminal üzerinden medya içeriği arayın, VLC/MPV ile doğrudan izleyin! 🚀
|
|
|
61
61
|
|
|
62
62
|
---
|
|
63
63
|
|
|
64
|
-
##
|
|
64
|
+
## 🚦 Ne Sunar?
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
KekikStream, Türkçe medya kaynaklarını tek CLI arayüzünde toplayarak hızlı arama ve oynatma sunar. Plugin mimarisi sayesinde yeni kaynaklar eklemek ve [KekikStreamAPI](https://github.com/keyiflerolsun/KekikStreamAPI) ile web/API üzerinden yayın yapmak kolaydır.
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
- 🖥️ **CLI & Kütüphane** - Terminal veya kod içinde kullanın
|
|
74
|
-
- 🌐 **API ve Web UI Desteği** - [KekikStreamAPI](https://github.com/keyiflerolsun/KekikStreamAPI) ile ağ üzerinden erişim
|
|
68
|
+
- 🎥 Çoklu kaynak desteği: Onlarca Türkçe medya sitesi
|
|
69
|
+
- 🔌 Plugin mimarisi: Yeni kaynak eklemek dakikalar sürer
|
|
70
|
+
- 🎬 Çoklu oynatıcı: VLC, MPV, MX Player
|
|
71
|
+
- 🖥️ CLI & kütüphane: Terminalde veya kod içinde kullanın
|
|
72
|
+
- 🌐 API/Web UI: KekikStreamAPI üzerinden uzak erişim
|
|
75
73
|
|
|
76
74
|
---
|
|
77
75
|
|
|
78
76
|
## 🚀 Hızlı Başlangıç
|
|
79
77
|
|
|
80
|
-
|
|
78
|
+
> Gereksinimler: Python 3.11+, sistemde VLC veya MPV kurulu olmalı (Android için MX Player + ADB).
|
|
81
79
|
|
|
82
80
|
```bash
|
|
83
|
-
#
|
|
81
|
+
# Kurulum
|
|
84
82
|
pip install KekikStream
|
|
85
83
|
|
|
86
|
-
#
|
|
84
|
+
# Güncelleme
|
|
87
85
|
pip install -U KekikStream
|
|
88
86
|
```
|
|
89
87
|
|
|
90
|
-
> **Gereksinimler:** Sisteminizde VLC veya MPV yüklü olmalıdır.
|
|
91
|
-
|
|
92
88
|
### Temel Kullanım
|
|
93
89
|
|
|
94
|
-
**
|
|
90
|
+
**CLI:**
|
|
95
91
|
```bash
|
|
96
92
|
KekikStream
|
|
97
93
|
```
|
|
98
94
|
|
|
95
|
+
**Kütüphane (örnek arama):**
|
|
96
|
+
```python
|
|
97
|
+
from KekikStream import Manager
|
|
98
|
+
results = Manager().search("vikings")
|
|
99
|
+
print(results[0].title)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## ✨ Özellikler
|
|
105
|
+
|
|
106
|
+
### 🔌 Plugin Sistemi
|
|
107
|
+
|
|
108
|
+
KekikStream modüler bir plugin mimarisi kullanır; her medya kaynağı bağımsız bir plugin'dir.
|
|
109
|
+
|
|
110
|
+
**Mevcut Pluginler (örnek):** Dizilla, HDFilmCehennemi, Dizipal, Dizifon, RoketDizi, Sinefy, Moviesseed, FullHDFilmizlesene, HDBestMovies, SuperFilmGeldi, Sinezy ve daha fazlası.
|
|
111
|
+
|
|
112
|
+
**Plugin Geliştirme:**
|
|
113
|
+
```python
|
|
114
|
+
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, SeriesInfo
|
|
115
|
+
|
|
116
|
+
class MyPlugin(PluginBase):
|
|
117
|
+
name = "MyPlugin"
|
|
118
|
+
language = "en"
|
|
119
|
+
main_url = "https://example.com"
|
|
120
|
+
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
121
|
+
description = "MyPlugin description"
|
|
122
|
+
|
|
123
|
+
main_page = {
|
|
124
|
+
f"{main_url}/category/" : "Category Name"
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
|
128
|
+
return results
|
|
129
|
+
|
|
130
|
+
async def search(self, query: str) -> list[SearchResult]:
|
|
131
|
+
return results
|
|
132
|
+
|
|
133
|
+
async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
|
|
134
|
+
return details
|
|
135
|
+
|
|
136
|
+
async def load_links(self, url: str) -> list[dict]:
|
|
137
|
+
return links
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 🎬 Oynatıcı Desteği
|
|
141
|
+
|
|
142
|
+
| Oynatıcı | Platform | Özellikler |
|
|
143
|
+
|----------|----------|------------|
|
|
144
|
+
| **VLC** | Desktop | Custom headers, subtitles, varsayılan |
|
|
145
|
+
| **MPV** | Desktop | Custom headers, subtitles |
|
|
146
|
+
| **MX Player** | Android | ADB üzerinden |
|
|
147
|
+
|
|
148
|
+
> Özel durumlar için (Google Drive vb.) arka planda otomatik olarak yt-dlp devreye girer.
|
|
149
|
+
|
|
150
|
+
### 🔗 Extractor Sistemi
|
|
151
|
+
|
|
152
|
+
Vidmoly, Filemoon, Sibnet, Sendvid, Voe, Doodstream, Streamtape, Upstream, Dailymotion, JWPlayer ve birçok kaynaktan direkt streaming linki çıkarır.
|
|
153
|
+
|
|
99
154
|
---
|
|
100
155
|
|
|
101
156
|
## 🏗️ Mimari
|
|
@@ -164,69 +219,6 @@ graph TB
|
|
|
164
219
|
|
|
165
220
|
---
|
|
166
221
|
|
|
167
|
-
## ✨ Özellikler
|
|
168
|
-
|
|
169
|
-
### 🔌 Plugin Sistemi
|
|
170
|
-
|
|
171
|
-
KekikStream modüler bir plugin mimarisi kullanır. Her medya kaynağı bağımsız bir plugin'dir.
|
|
172
|
-
|
|
173
|
-
**Mevcut Pluginler:**
|
|
174
|
-
- Dizilla, HDFilmCehennemi, Dizipal, Dizifon
|
|
175
|
-
- RoketDizi, Sinefy, Moviesseed, FullHDFilmizlesene
|
|
176
|
-
- HDBestMovies, SuperFilmGeldi, Sinezy ve daha fazlası...
|
|
177
|
-
|
|
178
|
-
**Plugin Geliştirme:**
|
|
179
|
-
```python
|
|
180
|
-
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, SeriesInfo
|
|
181
|
-
|
|
182
|
-
class MyPlugin(PluginBase):
|
|
183
|
-
name = "MyPlugin"
|
|
184
|
-
language = "en"
|
|
185
|
-
main_url = "https://example.com"
|
|
186
|
-
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
187
|
-
description = "MyPlugin description"
|
|
188
|
-
|
|
189
|
-
main_page = {
|
|
190
|
-
f"{main_url}/category/" : "Category Name"
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
|
194
|
-
# Ana sayfa implementasyonu
|
|
195
|
-
return results
|
|
196
|
-
|
|
197
|
-
async def search(self, query: str) -> list[SearchResult]:
|
|
198
|
-
# Arama implementasyonu
|
|
199
|
-
return results
|
|
200
|
-
|
|
201
|
-
async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
|
|
202
|
-
# İçerik detayları
|
|
203
|
-
return details
|
|
204
|
-
|
|
205
|
-
async def load_links(self, url: str) -> list[dict]:
|
|
206
|
-
# Video bağlantıları
|
|
207
|
-
return links
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### 🎬 Oynatıcı Desteği
|
|
211
|
-
|
|
212
|
-
| Oynatıcı | Platform | Özellikler |
|
|
213
|
-
|----------|----------|------------|
|
|
214
|
-
| **VLC** | Desktop | Custom headers, subtitles, varsayılan |
|
|
215
|
-
| **MPV** | Desktop | Custom headers, subtitles |
|
|
216
|
-
| **MX Player** | Android | ADB üzerinden |
|
|
217
|
-
|
|
218
|
-
> **Not:** Özel durumlar için (Google Drive, vb.) arka planda otomatik olarak yt-dlp kullanılabilir.
|
|
219
|
-
|
|
220
|
-
### 🔗 Extractor Sistemi
|
|
221
|
-
|
|
222
|
-
Video barındırma sitelerinden direkt streaming linkleri çıkarır:
|
|
223
|
-
|
|
224
|
-
- Vidmoly, Filemoon, Sibnet, Sendvid
|
|
225
|
-
- Voe, Doodstream, Streamtape, Upstream
|
|
226
|
-
- Dailymotion, JWPlayer ve daha fazlası...
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
222
|
## 🛠️ Geliştirme
|
|
231
223
|
|
|
232
224
|
### Proje Yapısı
|
|
@@ -245,12 +237,10 @@ KekikStream/
|
|
|
245
237
|
|
|
246
238
|
### Yeni Plugin Ekleme
|
|
247
239
|
|
|
248
|
-
1. `KekikStream/Plugins/` altına yeni dosya oluşturun
|
|
249
|
-
2. `PluginBase` sınıfından türetin
|
|
250
|
-
3.
|
|
251
|
-
4. Plugin'i test edin
|
|
252
|
-
|
|
253
|
-
**Örnek:** [Tests/Single.py](https://github.com/keyiflerolsun/KekikStream/blob/master/Tests/Single.py)
|
|
240
|
+
1. `KekikStream/Plugins/` altına yeni dosya oluşturun.
|
|
241
|
+
2. `PluginBase` sınıfından türetin.
|
|
242
|
+
3. `get_main_page`, `search`, `load_item`, `load_links` metodlarını implemente edin.
|
|
243
|
+
4. Plugin'i test edin (örnek: `Tests/Single.py`).
|
|
254
244
|
|
|
255
245
|
---
|
|
256
246
|
|
|
@@ -270,12 +260,10 @@ KekikStream/
|
|
|
270
260
|
|
|
271
261
|
Projeyi geliştirmek için katkılarınızı bekliyoruz!
|
|
272
262
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
3. **Feature Request:** Yeni özellik önerileri
|
|
278
|
-
4. **Dokümantasyon:** README ve kod dokümantasyonu iyileştirmeleri
|
|
263
|
+
1. Yeni plugin ekleyin
|
|
264
|
+
2. Bug raporu açın
|
|
265
|
+
3. Feature request gönderin
|
|
266
|
+
4. Dokümantasyon iyileştirin
|
|
279
267
|
|
|
280
268
|
### 🎁 Teşekkürler
|
|
281
269
|
|
|
@@ -283,14 +271,13 @@ Projeyi geliştirmek için katkılarınızı bekliyoruz!
|
|
|
283
271
|
|
|
284
272
|
### 💻 Genişletme Referansları
|
|
285
273
|
|
|
286
|
-
- [keyiflerolsun/Kekik-cloudstream](https://github.com/keyiflerolsun/Kekik-cloudstream)
|
|
274
|
+
- [keyiflerolsun/Kekik-cloudstream](https://github.com/keyiflerolsun/Kekik-cloudstream)
|
|
287
275
|
- [keyiflerolsun/seyirTurk-Parser](https://github.com/keyiflerolsun/seyirTurk-Parser)
|
|
288
276
|
|
|
289
277
|
## 🌐 Telif Hakkı ve Lisans
|
|
290
278
|
|
|
291
|
-
*
|
|
292
|
-
|
|
293
|
-
|
|
279
|
+
*Copyright (C) 2024 by* [keyiflerolsun](https://github.com/keyiflerolsun) ❤️️
|
|
280
|
+
[GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007](https://github.com/keyiflerolsun/KekikStream/blob/master/LICENSE) *Koşullarına göre lisanslanmıştır..*
|
|
294
281
|
|
|
295
282
|
---
|
|
296
283
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: KekikStream
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.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
|
|
@@ -51,8 +51,8 @@ Dynamic: summary
|
|
|
51
51
|
|
|
52
52
|
[](https://github.com/keyiflerolsun/KekikStream/actions/workflows/pypiYukle.yml)
|
|
53
53
|
|
|
54
|
-
**Modüler ve
|
|
55
|
-
Terminal üzerinden
|
|
54
|
+
**Modüler ve genişletilebilir medya streaming kütüphanesi**
|
|
55
|
+
Terminal üzerinden içerik arayın, VLC/MPV ile doğrudan izleyin veya kendi API’nizi kurun. 🚀
|
|
56
56
|
|
|
57
57
|
[](https://github.com/user-attachments/assets/63d31bb0-0b69-40b4-84aa-66623f2a253f)
|
|
58
58
|
|
|
@@ -61,41 +61,96 @@ Terminal üzerinden medya içeriği arayın, VLC/MPV ile doğrudan izleyin! 🚀
|
|
|
61
61
|
|
|
62
62
|
---
|
|
63
63
|
|
|
64
|
-
##
|
|
64
|
+
## 🚦 Ne Sunar?
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
KekikStream, Türkçe medya kaynaklarını tek CLI arayüzünde toplayarak hızlı arama ve oynatma sunar. Plugin mimarisi sayesinde yeni kaynaklar eklemek ve [KekikStreamAPI](https://github.com/keyiflerolsun/KekikStreamAPI) ile web/API üzerinden yayın yapmak kolaydır.
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
- 🖥️ **CLI & Kütüphane** - Terminal veya kod içinde kullanın
|
|
74
|
-
- 🌐 **API ve Web UI Desteği** - [KekikStreamAPI](https://github.com/keyiflerolsun/KekikStreamAPI) ile ağ üzerinden erişim
|
|
68
|
+
- 🎥 Çoklu kaynak desteği: Onlarca Türkçe medya sitesi
|
|
69
|
+
- 🔌 Plugin mimarisi: Yeni kaynak eklemek dakikalar sürer
|
|
70
|
+
- 🎬 Çoklu oynatıcı: VLC, MPV, MX Player
|
|
71
|
+
- 🖥️ CLI & kütüphane: Terminalde veya kod içinde kullanın
|
|
72
|
+
- 🌐 API/Web UI: KekikStreamAPI üzerinden uzak erişim
|
|
75
73
|
|
|
76
74
|
---
|
|
77
75
|
|
|
78
76
|
## 🚀 Hızlı Başlangıç
|
|
79
77
|
|
|
80
|
-
|
|
78
|
+
> Gereksinimler: Python 3.11+, sistemde VLC veya MPV kurulu olmalı (Android için MX Player + ADB).
|
|
81
79
|
|
|
82
80
|
```bash
|
|
83
|
-
#
|
|
81
|
+
# Kurulum
|
|
84
82
|
pip install KekikStream
|
|
85
83
|
|
|
86
|
-
#
|
|
84
|
+
# Güncelleme
|
|
87
85
|
pip install -U KekikStream
|
|
88
86
|
```
|
|
89
87
|
|
|
90
|
-
> **Gereksinimler:** Sisteminizde VLC veya MPV yüklü olmalıdır.
|
|
91
|
-
|
|
92
88
|
### Temel Kullanım
|
|
93
89
|
|
|
94
|
-
**
|
|
90
|
+
**CLI:**
|
|
95
91
|
```bash
|
|
96
92
|
KekikStream
|
|
97
93
|
```
|
|
98
94
|
|
|
95
|
+
**Kütüphane (örnek arama):**
|
|
96
|
+
```python
|
|
97
|
+
from KekikStream import Manager
|
|
98
|
+
results = Manager().search("vikings")
|
|
99
|
+
print(results[0].title)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## ✨ Özellikler
|
|
105
|
+
|
|
106
|
+
### 🔌 Plugin Sistemi
|
|
107
|
+
|
|
108
|
+
KekikStream modüler bir plugin mimarisi kullanır; her medya kaynağı bağımsız bir plugin'dir.
|
|
109
|
+
|
|
110
|
+
**Mevcut Pluginler (örnek):** Dizilla, HDFilmCehennemi, Dizipal, Dizifon, RoketDizi, Sinefy, Moviesseed, FullHDFilmizlesene, HDBestMovies, SuperFilmGeldi, Sinezy ve daha fazlası.
|
|
111
|
+
|
|
112
|
+
**Plugin Geliştirme:**
|
|
113
|
+
```python
|
|
114
|
+
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, SeriesInfo
|
|
115
|
+
|
|
116
|
+
class MyPlugin(PluginBase):
|
|
117
|
+
name = "MyPlugin"
|
|
118
|
+
language = "en"
|
|
119
|
+
main_url = "https://example.com"
|
|
120
|
+
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
121
|
+
description = "MyPlugin description"
|
|
122
|
+
|
|
123
|
+
main_page = {
|
|
124
|
+
f"{main_url}/category/" : "Category Name"
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
|
128
|
+
return results
|
|
129
|
+
|
|
130
|
+
async def search(self, query: str) -> list[SearchResult]:
|
|
131
|
+
return results
|
|
132
|
+
|
|
133
|
+
async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
|
|
134
|
+
return details
|
|
135
|
+
|
|
136
|
+
async def load_links(self, url: str) -> list[dict]:
|
|
137
|
+
return links
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 🎬 Oynatıcı Desteği
|
|
141
|
+
|
|
142
|
+
| Oynatıcı | Platform | Özellikler |
|
|
143
|
+
|----------|----------|------------|
|
|
144
|
+
| **VLC** | Desktop | Custom headers, subtitles, varsayılan |
|
|
145
|
+
| **MPV** | Desktop | Custom headers, subtitles |
|
|
146
|
+
| **MX Player** | Android | ADB üzerinden |
|
|
147
|
+
|
|
148
|
+
> Özel durumlar için (Google Drive vb.) arka planda otomatik olarak yt-dlp devreye girer.
|
|
149
|
+
|
|
150
|
+
### 🔗 Extractor Sistemi
|
|
151
|
+
|
|
152
|
+
Vidmoly, Filemoon, Sibnet, Sendvid, Voe, Doodstream, Streamtape, Upstream, Dailymotion, JWPlayer ve birçok kaynaktan direkt streaming linki çıkarır.
|
|
153
|
+
|
|
99
154
|
---
|
|
100
155
|
|
|
101
156
|
## 🏗️ Mimari
|
|
@@ -164,69 +219,6 @@ graph TB
|
|
|
164
219
|
|
|
165
220
|
---
|
|
166
221
|
|
|
167
|
-
## ✨ Özellikler
|
|
168
|
-
|
|
169
|
-
### 🔌 Plugin Sistemi
|
|
170
|
-
|
|
171
|
-
KekikStream modüler bir plugin mimarisi kullanır. Her medya kaynağı bağımsız bir plugin'dir.
|
|
172
|
-
|
|
173
|
-
**Mevcut Pluginler:**
|
|
174
|
-
- Dizilla, HDFilmCehennemi, Dizipal, Dizifon
|
|
175
|
-
- RoketDizi, Sinefy, Moviesseed, FullHDFilmizlesene
|
|
176
|
-
- HDBestMovies, SuperFilmGeldi, Sinezy ve daha fazlası...
|
|
177
|
-
|
|
178
|
-
**Plugin Geliştirme:**
|
|
179
|
-
```python
|
|
180
|
-
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, SeriesInfo
|
|
181
|
-
|
|
182
|
-
class MyPlugin(PluginBase):
|
|
183
|
-
name = "MyPlugin"
|
|
184
|
-
language = "en"
|
|
185
|
-
main_url = "https://example.com"
|
|
186
|
-
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
187
|
-
description = "MyPlugin description"
|
|
188
|
-
|
|
189
|
-
main_page = {
|
|
190
|
-
f"{main_url}/category/" : "Category Name"
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
|
194
|
-
# Ana sayfa implementasyonu
|
|
195
|
-
return results
|
|
196
|
-
|
|
197
|
-
async def search(self, query: str) -> list[SearchResult]:
|
|
198
|
-
# Arama implementasyonu
|
|
199
|
-
return results
|
|
200
|
-
|
|
201
|
-
async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
|
|
202
|
-
# İçerik detayları
|
|
203
|
-
return details
|
|
204
|
-
|
|
205
|
-
async def load_links(self, url: str) -> list[dict]:
|
|
206
|
-
# Video bağlantıları
|
|
207
|
-
return links
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### 🎬 Oynatıcı Desteği
|
|
211
|
-
|
|
212
|
-
| Oynatıcı | Platform | Özellikler |
|
|
213
|
-
|----------|----------|------------|
|
|
214
|
-
| **VLC** | Desktop | Custom headers, subtitles, varsayılan |
|
|
215
|
-
| **MPV** | Desktop | Custom headers, subtitles |
|
|
216
|
-
| **MX Player** | Android | ADB üzerinden |
|
|
217
|
-
|
|
218
|
-
> **Not:** Özel durumlar için (Google Drive, vb.) arka planda otomatik olarak yt-dlp kullanılabilir.
|
|
219
|
-
|
|
220
|
-
### 🔗 Extractor Sistemi
|
|
221
|
-
|
|
222
|
-
Video barındırma sitelerinden direkt streaming linkleri çıkarır:
|
|
223
|
-
|
|
224
|
-
- Vidmoly, Filemoon, Sibnet, Sendvid
|
|
225
|
-
- Voe, Doodstream, Streamtape, Upstream
|
|
226
|
-
- Dailymotion, JWPlayer ve daha fazlası...
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
222
|
## 🛠️ Geliştirme
|
|
231
223
|
|
|
232
224
|
### Proje Yapısı
|
|
@@ -245,12 +237,10 @@ KekikStream/
|
|
|
245
237
|
|
|
246
238
|
### Yeni Plugin Ekleme
|
|
247
239
|
|
|
248
|
-
1. `KekikStream/Plugins/` altına yeni dosya oluşturun
|
|
249
|
-
2. `PluginBase` sınıfından türetin
|
|
250
|
-
3.
|
|
251
|
-
4. Plugin'i test edin
|
|
252
|
-
|
|
253
|
-
**Örnek:** [Tests/Single.py](https://github.com/keyiflerolsun/KekikStream/blob/master/Tests/Single.py)
|
|
240
|
+
1. `KekikStream/Plugins/` altına yeni dosya oluşturun.
|
|
241
|
+
2. `PluginBase` sınıfından türetin.
|
|
242
|
+
3. `get_main_page`, `search`, `load_item`, `load_links` metodlarını implemente edin.
|
|
243
|
+
4. Plugin'i test edin (örnek: `Tests/Single.py`).
|
|
254
244
|
|
|
255
245
|
---
|
|
256
246
|
|
|
@@ -270,12 +260,10 @@ KekikStream/
|
|
|
270
260
|
|
|
271
261
|
Projeyi geliştirmek için katkılarınızı bekliyoruz!
|
|
272
262
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
3. **Feature Request:** Yeni özellik önerileri
|
|
278
|
-
4. **Dokümantasyon:** README ve kod dokümantasyonu iyileştirmeleri
|
|
263
|
+
1. Yeni plugin ekleyin
|
|
264
|
+
2. Bug raporu açın
|
|
265
|
+
3. Feature request gönderin
|
|
266
|
+
4. Dokümantasyon iyileştirin
|
|
279
267
|
|
|
280
268
|
### 🎁 Teşekkürler
|
|
281
269
|
|
|
@@ -283,14 +271,13 @@ Projeyi geliştirmek için katkılarınızı bekliyoruz!
|
|
|
283
271
|
|
|
284
272
|
### 💻 Genişletme Referansları
|
|
285
273
|
|
|
286
|
-
- [keyiflerolsun/Kekik-cloudstream](https://github.com/keyiflerolsun/Kekik-cloudstream)
|
|
274
|
+
- [keyiflerolsun/Kekik-cloudstream](https://github.com/keyiflerolsun/Kekik-cloudstream)
|
|
287
275
|
- [keyiflerolsun/seyirTurk-Parser](https://github.com/keyiflerolsun/seyirTurk-Parser)
|
|
288
276
|
|
|
289
277
|
## 🌐 Telif Hakkı ve Lisans
|
|
290
278
|
|
|
291
|
-
*
|
|
292
|
-
|
|
293
|
-
|
|
279
|
+
*Copyright (C) 2024 by* [keyiflerolsun](https://github.com/keyiflerolsun) ❤️️
|
|
280
|
+
[GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007](https://github.com/keyiflerolsun/KekikStream/blob/master/LICENSE) *Koşullarına göre lisanslanmıştır..*
|
|
294
281
|
|
|
295
282
|
---
|
|
296
283
|
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
[](https://github.com/keyiflerolsun/KekikStream/actions/workflows/pypiYukle.yml)
|
|
16
16
|
|
|
17
|
-
**Modüler ve
|
|
18
|
-
Terminal üzerinden
|
|
17
|
+
**Modüler ve genişletilebilir medya streaming kütüphanesi**
|
|
18
|
+
Terminal üzerinden içerik arayın, VLC/MPV ile doğrudan izleyin veya kendi API’nizi kurun. 🚀
|
|
19
19
|
|
|
20
20
|
[](https://github.com/user-attachments/assets/63d31bb0-0b69-40b4-84aa-66623f2a253f)
|
|
21
21
|
|
|
@@ -24,41 +24,96 @@ Terminal üzerinden medya içeriği arayın, VLC/MPV ile doğrudan izleyin! 🚀
|
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
-
##
|
|
27
|
+
## 🚦 Ne Sunar?
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
KekikStream, Türkçe medya kaynaklarını tek CLI arayüzünde toplayarak hızlı arama ve oynatma sunar. Plugin mimarisi sayesinde yeni kaynaklar eklemek ve [KekikStreamAPI](https://github.com/keyiflerolsun/KekikStreamAPI) ile web/API üzerinden yayın yapmak kolaydır.
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
- 🖥️ **CLI & Kütüphane** - Terminal veya kod içinde kullanın
|
|
37
|
-
- 🌐 **API ve Web UI Desteği** - [KekikStreamAPI](https://github.com/keyiflerolsun/KekikStreamAPI) ile ağ üzerinden erişim
|
|
31
|
+
- 🎥 Çoklu kaynak desteği: Onlarca Türkçe medya sitesi
|
|
32
|
+
- 🔌 Plugin mimarisi: Yeni kaynak eklemek dakikalar sürer
|
|
33
|
+
- 🎬 Çoklu oynatıcı: VLC, MPV, MX Player
|
|
34
|
+
- 🖥️ CLI & kütüphane: Terminalde veya kod içinde kullanın
|
|
35
|
+
- 🌐 API/Web UI: KekikStreamAPI üzerinden uzak erişim
|
|
38
36
|
|
|
39
37
|
---
|
|
40
38
|
|
|
41
39
|
## 🚀 Hızlı Başlangıç
|
|
42
40
|
|
|
43
|
-
|
|
41
|
+
> Gereksinimler: Python 3.11+, sistemde VLC veya MPV kurulu olmalı (Android için MX Player + ADB).
|
|
44
42
|
|
|
45
43
|
```bash
|
|
46
|
-
#
|
|
44
|
+
# Kurulum
|
|
47
45
|
pip install KekikStream
|
|
48
46
|
|
|
49
|
-
#
|
|
47
|
+
# Güncelleme
|
|
50
48
|
pip install -U KekikStream
|
|
51
49
|
```
|
|
52
50
|
|
|
53
|
-
> **Gereksinimler:** Sisteminizde VLC veya MPV yüklü olmalıdır.
|
|
54
|
-
|
|
55
51
|
### Temel Kullanım
|
|
56
52
|
|
|
57
|
-
**
|
|
53
|
+
**CLI:**
|
|
58
54
|
```bash
|
|
59
55
|
KekikStream
|
|
60
56
|
```
|
|
61
57
|
|
|
58
|
+
**Kütüphane (örnek arama):**
|
|
59
|
+
```python
|
|
60
|
+
from KekikStream import Manager
|
|
61
|
+
results = Manager().search("vikings")
|
|
62
|
+
print(results[0].title)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## ✨ Özellikler
|
|
68
|
+
|
|
69
|
+
### 🔌 Plugin Sistemi
|
|
70
|
+
|
|
71
|
+
KekikStream modüler bir plugin mimarisi kullanır; her medya kaynağı bağımsız bir plugin'dir.
|
|
72
|
+
|
|
73
|
+
**Mevcut Pluginler (örnek):** Dizilla, HDFilmCehennemi, Dizipal, Dizifon, RoketDizi, Sinefy, Moviesseed, FullHDFilmizlesene, HDBestMovies, SuperFilmGeldi, Sinezy ve daha fazlası.
|
|
74
|
+
|
|
75
|
+
**Plugin Geliştirme:**
|
|
76
|
+
```python
|
|
77
|
+
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, SeriesInfo
|
|
78
|
+
|
|
79
|
+
class MyPlugin(PluginBase):
|
|
80
|
+
name = "MyPlugin"
|
|
81
|
+
language = "en"
|
|
82
|
+
main_url = "https://example.com"
|
|
83
|
+
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
84
|
+
description = "MyPlugin description"
|
|
85
|
+
|
|
86
|
+
main_page = {
|
|
87
|
+
f"{main_url}/category/" : "Category Name"
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
|
91
|
+
return results
|
|
92
|
+
|
|
93
|
+
async def search(self, query: str) -> list[SearchResult]:
|
|
94
|
+
return results
|
|
95
|
+
|
|
96
|
+
async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
|
|
97
|
+
return details
|
|
98
|
+
|
|
99
|
+
async def load_links(self, url: str) -> list[dict]:
|
|
100
|
+
return links
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 🎬 Oynatıcı Desteği
|
|
104
|
+
|
|
105
|
+
| Oynatıcı | Platform | Özellikler |
|
|
106
|
+
|----------|----------|------------|
|
|
107
|
+
| **VLC** | Desktop | Custom headers, subtitles, varsayılan |
|
|
108
|
+
| **MPV** | Desktop | Custom headers, subtitles |
|
|
109
|
+
| **MX Player** | Android | ADB üzerinden |
|
|
110
|
+
|
|
111
|
+
> Özel durumlar için (Google Drive vb.) arka planda otomatik olarak yt-dlp devreye girer.
|
|
112
|
+
|
|
113
|
+
### 🔗 Extractor Sistemi
|
|
114
|
+
|
|
115
|
+
Vidmoly, Filemoon, Sibnet, Sendvid, Voe, Doodstream, Streamtape, Upstream, Dailymotion, JWPlayer ve birçok kaynaktan direkt streaming linki çıkarır.
|
|
116
|
+
|
|
62
117
|
---
|
|
63
118
|
|
|
64
119
|
## 🏗️ Mimari
|
|
@@ -127,69 +182,6 @@ graph TB
|
|
|
127
182
|
|
|
128
183
|
---
|
|
129
184
|
|
|
130
|
-
## ✨ Özellikler
|
|
131
|
-
|
|
132
|
-
### 🔌 Plugin Sistemi
|
|
133
|
-
|
|
134
|
-
KekikStream modüler bir plugin mimarisi kullanır. Her medya kaynağı bağımsız bir plugin'dir.
|
|
135
|
-
|
|
136
|
-
**Mevcut Pluginler:**
|
|
137
|
-
- Dizilla, HDFilmCehennemi, Dizipal, Dizifon
|
|
138
|
-
- RoketDizi, Sinefy, Moviesseed, FullHDFilmizlesene
|
|
139
|
-
- HDBestMovies, SuperFilmGeldi, Sinezy ve daha fazlası...
|
|
140
|
-
|
|
141
|
-
**Plugin Geliştirme:**
|
|
142
|
-
```python
|
|
143
|
-
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, SeriesInfo
|
|
144
|
-
|
|
145
|
-
class MyPlugin(PluginBase):
|
|
146
|
-
name = "MyPlugin"
|
|
147
|
-
language = "en"
|
|
148
|
-
main_url = "https://example.com"
|
|
149
|
-
favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
|
|
150
|
-
description = "MyPlugin description"
|
|
151
|
-
|
|
152
|
-
main_page = {
|
|
153
|
-
f"{main_url}/category/" : "Category Name"
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
|
157
|
-
# Ana sayfa implementasyonu
|
|
158
|
-
return results
|
|
159
|
-
|
|
160
|
-
async def search(self, query: str) -> list[SearchResult]:
|
|
161
|
-
# Arama implementasyonu
|
|
162
|
-
return results
|
|
163
|
-
|
|
164
|
-
async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
|
|
165
|
-
# İçerik detayları
|
|
166
|
-
return details
|
|
167
|
-
|
|
168
|
-
async def load_links(self, url: str) -> list[dict]:
|
|
169
|
-
# Video bağlantıları
|
|
170
|
-
return links
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### 🎬 Oynatıcı Desteği
|
|
174
|
-
|
|
175
|
-
| Oynatıcı | Platform | Özellikler |
|
|
176
|
-
|----------|----------|------------|
|
|
177
|
-
| **VLC** | Desktop | Custom headers, subtitles, varsayılan |
|
|
178
|
-
| **MPV** | Desktop | Custom headers, subtitles |
|
|
179
|
-
| **MX Player** | Android | ADB üzerinden |
|
|
180
|
-
|
|
181
|
-
> **Not:** Özel durumlar için (Google Drive, vb.) arka planda otomatik olarak yt-dlp kullanılabilir.
|
|
182
|
-
|
|
183
|
-
### 🔗 Extractor Sistemi
|
|
184
|
-
|
|
185
|
-
Video barındırma sitelerinden direkt streaming linkleri çıkarır:
|
|
186
|
-
|
|
187
|
-
- Vidmoly, Filemoon, Sibnet, Sendvid
|
|
188
|
-
- Voe, Doodstream, Streamtape, Upstream
|
|
189
|
-
- Dailymotion, JWPlayer ve daha fazlası...
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
185
|
## 🛠️ Geliştirme
|
|
194
186
|
|
|
195
187
|
### Proje Yapısı
|
|
@@ -208,12 +200,10 @@ KekikStream/
|
|
|
208
200
|
|
|
209
201
|
### Yeni Plugin Ekleme
|
|
210
202
|
|
|
211
|
-
1. `KekikStream/Plugins/` altına yeni dosya oluşturun
|
|
212
|
-
2. `PluginBase` sınıfından türetin
|
|
213
|
-
3.
|
|
214
|
-
4. Plugin'i test edin
|
|
215
|
-
|
|
216
|
-
**Örnek:** [Tests/Single.py](https://github.com/keyiflerolsun/KekikStream/blob/master/Tests/Single.py)
|
|
203
|
+
1. `KekikStream/Plugins/` altına yeni dosya oluşturun.
|
|
204
|
+
2. `PluginBase` sınıfından türetin.
|
|
205
|
+
3. `get_main_page`, `search`, `load_item`, `load_links` metodlarını implemente edin.
|
|
206
|
+
4. Plugin'i test edin (örnek: `Tests/Single.py`).
|
|
217
207
|
|
|
218
208
|
---
|
|
219
209
|
|
|
@@ -233,12 +223,10 @@ KekikStream/
|
|
|
233
223
|
|
|
234
224
|
Projeyi geliştirmek için katkılarınızı bekliyoruz!
|
|
235
225
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
3. **Feature Request:** Yeni özellik önerileri
|
|
241
|
-
4. **Dokümantasyon:** README ve kod dokümantasyonu iyileştirmeleri
|
|
226
|
+
1. Yeni plugin ekleyin
|
|
227
|
+
2. Bug raporu açın
|
|
228
|
+
3. Feature request gönderin
|
|
229
|
+
4. Dokümantasyon iyileştirin
|
|
242
230
|
|
|
243
231
|
### 🎁 Teşekkürler
|
|
244
232
|
|
|
@@ -246,14 +234,13 @@ Projeyi geliştirmek için katkılarınızı bekliyoruz!
|
|
|
246
234
|
|
|
247
235
|
### 💻 Genişletme Referansları
|
|
248
236
|
|
|
249
|
-
- [keyiflerolsun/Kekik-cloudstream](https://github.com/keyiflerolsun/Kekik-cloudstream)
|
|
237
|
+
- [keyiflerolsun/Kekik-cloudstream](https://github.com/keyiflerolsun/Kekik-cloudstream)
|
|
250
238
|
- [keyiflerolsun/seyirTurk-Parser](https://github.com/keyiflerolsun/seyirTurk-Parser)
|
|
251
239
|
|
|
252
240
|
## 🌐 Telif Hakkı ve Lisans
|
|
253
241
|
|
|
254
|
-
*
|
|
255
|
-
|
|
256
|
-
|
|
242
|
+
*Copyright (C) 2024 by* [keyiflerolsun](https://github.com/keyiflerolsun) ❤️️
|
|
243
|
+
[GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007](https://github.com/keyiflerolsun/KekikStream/blob/master/LICENSE) *Koşullarına göre lisanslanmıştır..*
|
|
257
244
|
|
|
258
245
|
---
|
|
259
246
|
|
|
@@ -6,7 +6,7 @@ from io import open
|
|
|
6
6
|
setup(
|
|
7
7
|
# ? Genel Bilgiler
|
|
8
8
|
name = "KekikStream",
|
|
9
|
-
version = "1.8.
|
|
9
|
+
version = "1.8.8",
|
|
10
10
|
url = "https://github.com/keyiflerolsun/KekikStream",
|
|
11
11
|
description = "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ı",
|
|
12
12
|
keywords = ["KekikStream", "KekikAkademi", "keyiflerolsun"],
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|