KekikStream 0.2.3__py3-none-any.whl → 0.5.7__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.
Files changed (53) hide show
  1. KekikStream/CLI/__init__.py +1 -1
  2. KekikStream/CLI/pypi_kontrol.py +30 -0
  3. KekikStream/Core/ExtractorBase.py +13 -2
  4. KekikStream/Core/ExtractorLoader.py +31 -10
  5. KekikStream/Core/ExtractorModels.py +2 -0
  6. KekikStream/Core/MediaHandler.py +70 -30
  7. KekikStream/Core/PluginBase.py +6 -5
  8. KekikStream/Core/PluginLoader.py +3 -5
  9. KekikStream/Core/PluginModels.py +6 -16
  10. KekikStream/Extractors/ContentX.py +80 -0
  11. KekikStream/Extractors/FourCX.py +7 -0
  12. KekikStream/Extractors/FourPichive.py +7 -0
  13. KekikStream/Extractors/FourPlayRu.py +7 -0
  14. KekikStream/Extractors/HDStreamAble.py +7 -0
  15. KekikStream/Extractors/Hotlinger.py +7 -0
  16. KekikStream/Extractors/MixPlayHD.py +42 -0
  17. KekikStream/Extractors/Odnoklassniki.py +106 -0
  18. KekikStream/Extractors/OkRuHTTP.py +7 -0
  19. KekikStream/Extractors/OkRuSSL.py +7 -0
  20. KekikStream/Extractors/PeaceMakerst.py +57 -0
  21. KekikStream/Extractors/Pichive.py +7 -0
  22. KekikStream/Extractors/PixelDrain.py +1 -1
  23. KekikStream/Extractors/PlayRu.py +7 -0
  24. KekikStream/Extractors/RapidVid.py +9 -10
  25. KekikStream/Extractors/SibNet.py +1 -1
  26. KekikStream/Extractors/Sobreatsesuyp.py +5 -6
  27. KekikStream/Extractors/TRsTX.py +5 -6
  28. KekikStream/Extractors/TauVideo.py +11 -10
  29. KekikStream/Extractors/TurboImgz.py +9 -12
  30. KekikStream/Extractors/VidMoly.py +25 -33
  31. KekikStream/Extractors/VidMoxy.py +1 -1
  32. KekikStream/Extractors/VideoSeyred.py +47 -0
  33. KekikStream/Managers/MediaManager.py +1 -1
  34. KekikStream/Managers/UIManager.py +6 -2
  35. KekikStream/Plugins/DiziBox.py +138 -0
  36. KekikStream/Plugins/Dizilla.py +95 -0
  37. KekikStream/Plugins/FilmMakinesi.py +8 -8
  38. KekikStream/Plugins/FullHDFilmizlesene.py +5 -4
  39. KekikStream/Plugins/JetFilmizle.py +4 -8
  40. KekikStream/Plugins/RecTV.py +111 -0
  41. KekikStream/Plugins/SineWix.py +4 -1
  42. KekikStream/Plugins/UgurFilm.py +3 -3
  43. KekikStream/__init__.py +177 -158
  44. KekikStream/__main__.py +1 -1
  45. KekikStream/requirements.txt +2 -1
  46. {KekikStream-0.2.3.dist-info → KekikStream-0.5.7.dist-info}/METADATA +4 -3
  47. KekikStream-0.5.7.dist-info/RECORD +58 -0
  48. KekikStream/CLI/check_update.py +0 -33
  49. KekikStream-0.2.3.dist-info/RECORD +0 -41
  50. {KekikStream-0.2.3.dist-info → KekikStream-0.5.7.dist-info}/LICENSE +0 -0
  51. {KekikStream-0.2.3.dist-info → KekikStream-0.5.7.dist-info}/WHEEL +0 -0
  52. {KekikStream-0.2.3.dist-info → KekikStream-0.5.7.dist-info}/entry_points.txt +0 -0
  53. {KekikStream-0.2.3.dist-info → KekikStream-0.5.7.dist-info}/top_level.txt +0 -0
KekikStream/__init__.py CHANGED
@@ -1,234 +1,253 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from .CLI import konsol, cikis_yap, hata_yakala
4
- from .Managers import PluginManager, ExtractorManager, UIManager, MediaManager
5
- from .Core import PluginBase, ExtractorBase, SeriesInfo
6
- from asyncio import run
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):
10
- self.plugin_manager = PluginManager()
11
- self.extractor_manager = ExtractorManager()
12
- self.ui_manager = UIManager()
13
- self.media_manager = MediaManager()
14
- self.current_plugin:PluginBase = None
15
-
16
- async def run(self):
17
- self.ui_manager.clear_console()
11
+ self.eklentiler_yonetici = PluginManager()
12
+ self.cikaricilar_yonetici = ExtractorManager()
13
+ self.arayuz_yonetici = UIManager()
14
+ self.medya_yonetici = MediaManager()
15
+ self.suanki_eklenti: PluginBase = None
16
+
17
+ async def baslat(self):
18
+ self.arayuz_yonetici.clear_console()
18
19
  konsol.rule("[bold cyan]KekikStream Başlatılıyor[/bold cyan]")
19
- if not self.plugin_manager.get_plugin_names():
20
- konsol.print("[bold red]Hiçbir eklenti bulunamadı![/bold red]")
21
- return
20
+ if not self.eklentiler_yonetici.get_plugin_names():
21
+ return konsol.print("[bold red]Hiçbir eklenti bulunamadı![/bold red]")
22
22
 
23
23
  try:
24
- await self.select_plugin()
24
+ await self.eklenti_secimi()
25
25
  finally:
26
- await self.plugin_manager.close_plugins()
26
+ await self.eklentiler_yonetici.close_plugins()
27
+
28
+ async def sonuc_bulunamadi(self):
29
+ secim = await self.arayuz_yonetici.select_from_list(
30
+ message = "Ne yapmak istersiniz?",
31
+ choices = ["Tüm Eklentilerde Ara", "Ana Menü", "Çıkış"]
32
+ )
27
33
 
28
- async def select_plugin(self):
29
- plugin_name = await self.ui_manager.select_from_fuzzy(
34
+ match secim:
35
+ case "Tüm Eklentilerde Ara":
36
+ await self.tum_eklentilerde_arama()
37
+ case "Ana Menü":
38
+ await self.baslat()
39
+ case "Çıkış":
40
+ cikis_yap(False)
41
+
42
+ async def eklenti_secimi(self):
43
+ eklenti_adi = await self.arayuz_yonetici.select_from_fuzzy(
30
44
  message = "Arama yapılacak eklentiyi seçin:",
31
- choices = ["Tüm Eklentilerde Ara", *self.plugin_manager.get_plugin_names()]
45
+ choices = ["Tüm Eklentilerde Ara", *self.eklentiler_yonetici.get_plugin_names()]
32
46
  )
33
47
 
34
- if plugin_name == "Tüm Eklentilerde Ara":
35
- await self.search_all()
48
+ if eklenti_adi == "Tüm Eklentilerde Ara":
49
+ await self.tum_eklentilerde_arama()
36
50
  else:
37
- self.current_plugin = self.plugin_manager.select_plugin(plugin_name)
38
- await self.search_single_plugin()
51
+ self.suanki_eklenti = self.eklentiler_yonetici.select_plugin(eklenti_adi)
52
+ await self.eklenti_ile_arama()
39
53
 
40
- async def search_single_plugin(self):
41
- self.ui_manager.clear_console()
42
- konsol.rule(f"[bold cyan]{self.current_plugin.name} Eklentisinde Arama Yapın[/bold cyan]")
54
+ async def eklenti_ile_arama(self):
55
+ self.arayuz_yonetici.clear_console()
56
+ konsol.rule(f"[bold cyan]{self.suanki_eklenti.name} Eklentisinde Arama Yapın[/bold cyan]")
43
57
 
44
- query = await self.ui_manager.prompt_text("Arama sorgusu girin:")
45
- results = await self.current_plugin.search(query)
58
+ sorgu = await self.arayuz_yonetici.prompt_text("Arama sorgusu girin:")
59
+ sonuclar = await self.suanki_eklenti.search(sorgu)
46
60
 
47
- if not results:
61
+ if not sonuclar:
48
62
  konsol.print("[bold red]Arama sonucu bulunamadı![/bold red]")
49
- return
63
+ return await self.sonuc_bulunamadi()
50
64
 
51
- selected_result = await self.select_result(results)
65
+ if secilen_sonuc := await self.eklenti_sonuc_secimi(sonuclar):
66
+ await self.sonuc_detaylari_goster({"plugin": self.suanki_eklenti.name, "url": secilen_sonuc})
52
67
 
53
- if selected_result:
54
- await self.show_details({"plugin": self.current_plugin.name, "url": selected_result})
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
+ )
55
73
 
56
- async def search_all(self):
57
- self.ui_manager.clear_console()
74
+ async def tum_eklentilerde_arama(self):
75
+ self.arayuz_yonetici.clear_console()
58
76
  konsol.rule("[bold cyan]Tüm Eklentilerde Arama Yapın[/bold cyan]")
59
77
 
60
- query = await self.ui_manager.prompt_text("Arama sorgusu girin:")
61
- results = await self.search_all_plugins(query)
78
+ sorgu = await self.arayuz_yonetici.prompt_text("Arama sorgusu girin:")
79
+ sonuclar = await self.tum_eklentilerde_arama_sorgula(sorgu)
62
80
 
63
- if not results:
64
- return
81
+ if not sonuclar:
82
+ return await self.sonuc_bulunamadi()
65
83
 
66
- selected_result = await self.select_from_all_results(results)
84
+ secilen_sonuc = await self.tum_sonuc_secimi(sonuclar)
67
85
 
68
- if selected_result:
69
- await self.show_details(selected_result)
86
+ if secilen_sonuc:
87
+ return await self.sonuc_detaylari_goster(secilen_sonuc)
70
88
 
71
- async def select_result(self, results):
72
- selected_url = await self.ui_manager.select_from_fuzzy(
73
- message = "İçerik sonuçlarından birini seçin:",
74
- choices = [{"name": res.title, "value": res.url} for res in results]
75
- )
89
+ async def tum_eklentilerde_arama_sorgula(self, sorgu: str) -> list:
90
+ tum_sonuclar = []
91
+
92
+ for eklenti_adi, eklenti in self.eklentiler_yonetici.plugins.items():
93
+ if not isinstance(eklenti, PluginBase):
94
+ konsol.print(f"[yellow][!] {eklenti_adi} geçerli bir PluginBase değil, atlanıyor...[/yellow]")
95
+ continue
76
96
 
77
- if selected_url:
78
- return selected_url
97
+ konsol.log(f"[yellow][~] {eklenti_adi:<19} aranıyor...[/]")
98
+ try:
99
+ sonuclar = await eklenti.search(sorgu)
100
+ if sonuclar:
101
+ tum_sonuclar.extend(
102
+ [{"plugin": eklenti_adi, "title": sonuc.title, "url": sonuc.url, "poster": sonuc.poster} for sonuc in sonuclar]
103
+ )
104
+ except Exception as hata:
105
+ konsol.print(f"[bold red]{eklenti_adi} » hata oluştu: {hata}[/bold red]")
106
+
107
+ if not tum_sonuclar:
108
+ konsol.print("[bold red]Hiçbir sonuç bulunamadı![/bold red]")
109
+ await self.sonuc_bulunamadi()
110
+ return []
111
+
112
+ return tum_sonuclar
79
113
 
80
- async def show_details(self, selected_result):
114
+ async def tum_sonuc_secimi(self, sonuclar):
115
+ secenekler = [
116
+ {"name": f"[{sonuc['plugin']}]".ljust(21) + f" » {sonuc['title']}", "value": sonuc}
117
+ for sonuc in sonuclar
118
+ ]
119
+
120
+ return await self.arayuz_yonetici.select_from_fuzzy(
121
+ message = "Arama sonuçlarından bir içerik seçin:",
122
+ choices = secenekler
123
+ )
124
+
125
+ async def sonuc_detaylari_goster(self, secilen_sonuc):
81
126
  try:
82
- if isinstance(selected_result, dict) and "plugin" in selected_result:
83
- plugin_name = selected_result["plugin"]
84
- url = selected_result["url"]
127
+ if isinstance(secilen_sonuc, dict) and "plugin" in secilen_sonuc:
128
+ eklenti_adi = secilen_sonuc["plugin"]
129
+ url = secilen_sonuc["url"]
85
130
 
86
- self.current_plugin = self.plugin_manager.select_plugin(plugin_name)
131
+ self.suanki_eklenti = self.eklentiler_yonetici.select_plugin(eklenti_adi)
87
132
  else:
88
- url = selected_result
133
+ url = secilen_sonuc
89
134
 
90
- media_info = await self.current_plugin.load_item(url)
91
- except Exception as hata:
92
- konsol.log(selected_result)
93
- hata_yakala(hata)
94
- return
135
+ medya_bilgi = None
136
+ for _ in range(3):
137
+ with suppress(Exception):
138
+ medya_bilgi = await self.suanki_eklenti.load_item(url)
139
+ break
140
+ if not medya_bilgi:
141
+ konsol.print("[bold red]Medya bilgileri yüklenemedi![/bold red]")
142
+ return await self.sonuc_bulunamadi()
95
143
 
96
- self.media_manager.set_title(f"{self.current_plugin.name} | {media_info.title}")
144
+ except Exception as hata:
145
+ konsol.log(secilen_sonuc)
146
+ return hata_yakala(hata)
97
147
 
98
- self.ui_manager.display_media_info(f"{self.current_plugin.name} | {media_info.title}", media_info)
148
+ self.medya_yonetici.set_title(f"{self.suanki_eklenti.name} | {medya_bilgi.title}")
149
+ self.arayuz_yonetici.display_media_info(f"{self.suanki_eklenti.name} | {medya_bilgi.title}", medya_bilgi)
99
150
 
100
- if isinstance(media_info, SeriesInfo):
101
- selected_episode = await self.ui_manager.select_from_fuzzy(
151
+ if isinstance(medya_bilgi, SeriesInfo):
152
+ secilen_bolum = await self.arayuz_yonetici.select_from_fuzzy(
102
153
  message = "İzlemek istediğiniz bölümü seçin:",
103
154
  choices = [
104
- {"name": f"{episode.season}. Sezon {episode.episode}. Bölüm - {episode.title}", "value": episode.url}
105
- for episode in media_info.episodes
155
+ {"name": f"{bolum.season}. Sezon {bolum.episode}. Bölüm - {bolum.title}", "value": bolum.url}
156
+ for bolum in medya_bilgi.episodes
106
157
  ]
107
158
  )
108
- if selected_episode:
109
- links = await self.current_plugin.load_links(selected_episode)
110
- await self.show_options(links)
159
+ if secilen_bolum:
160
+ baglantilar = await self.suanki_eklenti.load_links(secilen_bolum)
161
+ await self.baglanti_secenekleri_goster(baglantilar)
111
162
  else:
112
- links = await self.current_plugin.load_links(media_info.url)
113
- await self.show_options(links)
163
+ baglantilar = await self.suanki_eklenti.load_links(medya_bilgi.url)
164
+ await self.baglanti_secenekleri_goster(baglantilar)
114
165
 
115
- async def show_options(self, links):
116
- mapping = self.extractor_manager.map_links_to_extractors(links)
117
- has_play_method = hasattr(self.current_plugin, "play") and callable(getattr(self.current_plugin, "play", None))
166
+ async def baglanti_secenekleri_goster(self, baglantilar):
167
+ if not baglantilar:
168
+ konsol.print("[bold red]Hiçbir bağlantı bulunamadı![/bold red]")
169
+ return await self.sonuc_bulunamadi()
170
+
171
+ haritalama = self.cikaricilar_yonetici.map_links_to_extractors(baglantilar)
172
+ play_fonksiyonu_var = hasattr(self.suanki_eklenti, "play") and callable(getattr(self.suanki_eklenti, "play", None))
118
173
  # ! DEBUG
119
- # konsol.print(links)
120
- if not mapping and not has_play_method:
174
+ # konsol.print(baglantilar)
175
+ if not haritalama and not play_fonksiyonu_var:
121
176
  konsol.print("[bold red]Hiçbir Extractor bulunamadı![/bold red]")
122
- konsol.print(links)
123
- return
177
+ konsol.print(baglantilar)
178
+ return await self.sonuc_bulunamadi()
124
179
 
125
- if not mapping:
126
- selected_link = await self.ui_manager.select_from_list(
180
+ if not haritalama:
181
+ secilen_link = await self.arayuz_yonetici.select_from_list(
127
182
  message = "Doğrudan oynatmak için bir bağlantı seçin:",
128
- choices = [{"name": self.current_plugin.name, "value": link} for link in links]
183
+ choices = [{"name": self.suanki_eklenti.name, "value": link} for link in baglantilar]
129
184
  )
130
- if selected_link:
131
- await self.play_media(selected_link)
185
+ if secilen_link:
186
+ await self.medya_oynat(secilen_link)
132
187
  return
133
188
 
134
- action = await self.ui_manager.select_from_list(
189
+ secim = await self.arayuz_yonetici.select_from_list(
135
190
  message = "Ne yapmak istersiniz?",
136
- choices = ["İzle", "Geri Git", "Ana Menü"]
191
+ choices = ["İzle", "Tüm Eklentilerde Ara", "Ana Menü"]
137
192
  )
138
193
 
139
- match action:
194
+ match secim:
140
195
  case "İzle":
141
- selected_link = await self.ui_manager.select_from_list(
142
- message = "İzlemek için bir bağlantı seçin:",
143
- choices = [{"name": extractor_name, "value": link} for link, extractor_name in mapping.items()]
196
+ secilen_link = await self.arayuz_yonetici.select_from_list(
197
+ message = "İzlemek için bir bağlantı seçin:",
198
+ choices = [{"name": cikarici_adi, "value": link} for link, cikarici_adi in haritalama.items()]
144
199
  )
145
- if selected_link:
146
- await self.play_media(selected_link)
200
+ if secilen_link:
201
+ await self.medya_oynat(secilen_link)
147
202
 
148
- case "Geri Git":
149
- await self.search()
203
+ case "Tüm Eklentilerde Ara":
204
+ await self.tum_eklentilerde_arama()
150
205
 
151
206
  case _:
152
- await self.run()
153
-
154
- async def play_media(self, selected_link):
155
- if hasattr(self.current_plugin, "play") and callable(self.current_plugin.play):
156
- await self.current_plugin.play(
157
- name = self.current_plugin._data[selected_link]["name"],
158
- url = selected_link,
159
- referer = self.current_plugin._data[selected_link]["referer"],
160
- subtitles = self.current_plugin._data[selected_link]["subtitles"]
207
+ await self.baslat()
208
+
209
+ async def medya_oynat(self, secilen_link):
210
+ if hasattr(self.suanki_eklenti, "play") and callable(self.suanki_eklenti.play):
211
+ konsol.log(f"[yellow][»] Oynatılıyor : {secilen_link}")
212
+ return await self.suanki_eklenti.play(
213
+ name = self.suanki_eklenti._data[secilen_link]["name"],
214
+ url = secilen_link,
215
+ referer = self.suanki_eklenti._data[secilen_link]["referer"],
216
+ subtitles = self.suanki_eklenti._data[secilen_link]["subtitles"]
161
217
  )
162
- return
163
218
 
164
- extractor: ExtractorBase = self.extractor_manager.find_extractor(selected_link)
165
- if not extractor:
166
- konsol.print("[bold red]Uygun Extractor bulunamadı.[/bold red]")
167
- return
219
+ cikarici: ExtractorBase = self.cikaricilar_yonetici.find_extractor(secilen_link)
220
+ if not cikarici:
221
+ return konsol.print("[bold red]Uygun Extractor bulunamadı.[/bold red]")
168
222
 
169
- extract_data = await extractor.extract(selected_link, referer=self.current_plugin.main_url)
223
+ try:
224
+ extract_data = await cikarici.extract(secilen_link, referer=self.suanki_eklenti.main_url)
225
+ except Exception as hata:
226
+ konsol.print(f"[bold red]{cikarici.name} » hata oluştu: {hata}[/bold red]")
227
+ return await self.sonuc_bulunamadi()
170
228
 
171
229
  if isinstance(extract_data, list):
172
- selected_data = await self.ui_manager.select_from_list(
230
+ secilen_data = await self.arayuz_yonetici.select_from_list(
173
231
  message = "Birden fazla bağlantı bulundu, lütfen birini seçin:",
174
232
  choices = [{"name": data.name, "value": data} for data in extract_data]
175
233
  )
176
234
  else:
177
- selected_data = extract_data
178
-
179
- if selected_data.headers.get("Cookie"):
180
- self.media_manager.set_headers({"Cookie": selected_data.headers.get("Cookie")})
181
-
182
- self.media_manager.set_title(f"{self.media_manager.get_title()} | {selected_data.name}")
183
- self.media_manager.set_headers({"Referer": selected_data.referer})
184
- self.media_manager.play_media(selected_data)
185
-
186
- async def search_all_plugins(self, query: str):
187
- all_results = []
188
-
189
- for plugin_name, plugin in self.plugin_manager.plugins.items():
190
- if not isinstance(plugin, PluginBase):
191
- konsol.print(f"[yellow][!] {plugin_name} geçerli bir PluginBase değil, atlanıyor...[/yellow]")
192
- continue
193
-
194
- konsol.log(f"[yellow][~] {plugin_name:<19} aranıyor...[/]")
195
- try:
196
- results = await plugin.search(query)
197
- if results:
198
- all_results.extend(
199
- [{"plugin": plugin_name, "title": result.title, "url": result.url, "poster": result.poster} for result in results]
200
- )
201
- except Exception as hata:
202
- konsol.print(f"[bold red]{plugin_name} » hata oluştu: {hata}[/bold red]")
203
-
204
- if not all_results:
205
- konsol.print("[bold red]Hiçbir sonuç bulunamadı![/bold red]")
206
- return []
207
-
208
- return all_results
209
-
210
- async def select_from_all_results(self, results):
211
- choices = [
212
- {"name": f"{f'[{res["plugin"]}]':<21} » {res['title']}", "value": res}
213
- for res in results
214
- ]
215
-
216
- selected_result = await self.ui_manager.select_from_fuzzy(
217
- message = "Arama sonuçlarından bir içerik seçin:",
218
- choices = choices
219
- )
235
+ secilen_data = extract_data
220
236
 
221
- return selected_result
237
+ if secilen_data.headers.get("Cookie"):
238
+ self.medya_yonetici.set_headers({"Cookie": secilen_data.headers.get("Cookie")})
222
239
 
223
- from .CLI import check_and_update_package
240
+ self.medya_yonetici.set_title(f"{self.medya_yonetici.get_title()} | {secilen_data.name}")
241
+ self.medya_yonetici.set_headers({"Referer": secilen_data.referer})
242
+ konsol.log(f"[yellow][»] Oynatılıyor : {secilen_data.url}")
243
+ self.medya_yonetici.play_media(secilen_data)
224
244
 
225
245
  def basla():
226
246
  try:
227
- konsol.print("[bold cyan]Güncelleme kontrol ediliyor...[/bold cyan]")
228
- check_and_update_package("KekikStream")
247
+ pypi_kontrol_guncelle("KekikStream")
229
248
 
230
249
  app = KekikStream()
231
- run(app.run())
250
+ run(app.baslat())
232
251
  cikis_yap(False)
233
252
  except KeyboardInterrupt:
234
253
  cikis_yap(True)
KekikStream/__main__.py CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  from . import basla
4
4
 
5
- if __name__ == '__main__':
5
+ if __name__ == "__main__":
6
6
  basla()
@@ -2,7 +2,8 @@ setuptools
2
2
  wheel
3
3
 
4
4
  Kekik
5
- httpx
5
+ httpx[http2]
6
+ cloudscraper
6
7
  parsel
7
8
 
8
9
  pydantic
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: KekikStream
3
- Version: 0.2.3
3
+ Version: 0.5.7
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
@@ -16,7 +16,8 @@ License-File: LICENSE
16
16
  Requires-Dist: setuptools
17
17
  Requires-Dist: wheel
18
18
  Requires-Dist: Kekik
19
- Requires-Dist: httpx
19
+ Requires-Dist: httpx[http2]
20
+ Requires-Dist: cloudscraper
20
21
  Requires-Dist: parsel
21
22
  Requires-Dist: pydantic
22
23
  Requires-Dist: InquirerPy
@@ -39,7 +40,7 @@ Requires-Dist: InquirerPy
39
40
 
40
41
  *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ı*
41
42
 
42
- [![Video](https://github.com/user-attachments/assets/646699b0-32e5-4218-ad09-38e469008e11)](https://github.com/user-attachments/assets/646699b0-32e5-4218-ad09-38e469008e11)
43
+ [![Video](https://github.com/user-attachments/assets/63d31bb0-0b69-40b4-84aa-66623f2a253f)](https://github.com/user-attachments/assets/63d31bb0-0b69-40b4-84aa-66623f2a253f)
43
44
 
44
45
  [![ForTheBadge made-with-python](https://ForTheBadge.com/images/badges/made-with-python.svg)](https://www.python.org/)
45
46
  [![ForTheBadge built-with-love](https://ForTheBadge.com/images/badges/built-with-love.svg)](https://GitHub.com/keyiflerolsun/)
@@ -0,0 +1,58 @@
1
+ KekikStream/__init__.py,sha256=qj5yyeV1jANK-GDuzNXoURWms1lXzjCE3-Gc1p32vyg,10851
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/ExtractorBase.py,sha256=wmGl-Xiem4s5M7baVOxYLba7UdygCDAXggo6Up8pFJE,1409
7
+ KekikStream/Core/ExtractorLoader.py,sha256=rrll3F2CyVmx3foa57PG0FocQMrFuMpdlG0Uf0-2Fz4,3915
8
+ KekikStream/Core/ExtractorModels.py,sha256=huIcPQ5VIRfMx0LcL5SS1u4dldZbHjzHKEdSEtOPlc0,456
9
+ KekikStream/Core/MediaHandler.py,sha256=eV0ugdIwxRlWQtgYt--XmfPJP8K9FL1Q0T1d04YUls0,4517
10
+ KekikStream/Core/PluginBase.py,sha256=ZQx6adxOKuX50TPN5pxE8oG9FD-ZjPXSHpSiW086QPQ,2479
11
+ KekikStream/Core/PluginLoader.py,sha256=5HQF8Em1TjvqMBPLKB7M_i2y6zPH6JZao-uekeacoSs,2574
12
+ KekikStream/Core/PluginModels.py,sha256=q8tjkt_-uiJ7uNxOThYR0FgTQLZglVAOAaM0Kske-28,2063
13
+ KekikStream/Core/__init__.py,sha256=HZpXs3MKy4joO0sDpIGcZ2DrUKwK49IKG-GQgKbO2jk,416
14
+ KekikStream/Extractors/CloseLoad.py,sha256=YmDB3YvuDaCUbQ0T_tmhnkEsC5mSdEN6GNoAR662fl8,990
15
+ KekikStream/Extractors/ContentX.py,sha256=XPoAuA95LOTgCUGyioXxOFWR0nNKWWOHLkYMlzguIIE,2980
16
+ KekikStream/Extractors/FourCX.py,sha256=4FrMj1IZBBpN_g1P6S3A-8eUu7QFwlt4fJXzJ7vfe0Q,221
17
+ KekikStream/Extractors/FourPichive.py,sha256=iq3BCUbih1UVF4y4BIWO--0hX5jP2nxqesNx3MGP3kQ,234
18
+ KekikStream/Extractors/FourPlayRu.py,sha256=wq1ylxKpsO_IBoYr_ALzB2dVrQpJ-jY9lf2zPhcAZX8,228
19
+ KekikStream/Extractors/HDStreamAble.py,sha256=66n5EvIdX_or5cdnlJ_Uqmzi50n4rl9c5VCw8kBqhQk,245
20
+ KekikStream/Extractors/Hotlinger.py,sha256=NFMRgUmb6BCrJfa7Hi0VarDNYvCeVknBWEk24FKBBa0,224
21
+ KekikStream/Extractors/MailRu.py,sha256=lB3Xy912EaSEUw7Im65L5TwtIeM7OLFV1_9lan39g40,1308
22
+ KekikStream/Extractors/MixPlayHD.py,sha256=M7Zxmpkazkj6ewgLWKKDeZDbBOCM9vkMDyIaVhaSPrY,1554
23
+ KekikStream/Extractors/Odnoklassniki.py,sha256=B0A2krVVvzmpZBzIpxu40WB9AZ_zzH-Km2HTetrNvqQ,3593
24
+ KekikStream/Extractors/OkRuHTTP.py,sha256=L-B0i_i_Vnm61GvUfd6cGIW-o_H4M-C7DO_cdw2rQPU,228
25
+ KekikStream/Extractors/OkRuSSL.py,sha256=FHJ5XZ1dO5ED3mIku3e3vnq8K0slrcr0jqhaUnHmfVk,227
26
+ KekikStream/Extractors/PeaceMakerst.py,sha256=VSXeCeA_-9IkKdjoQ3lvA4FFDzdT_Oj1oFM7i-_3tvQ,2100
27
+ KekikStream/Extractors/Pichive.py,sha256=BSVYFwL3Ax6yGoS1WkpOWtngxNyuZLoKzpPwjibpu2s,221
28
+ KekikStream/Extractors/PixelDrain.py,sha256=1kf1kKKxcYwLVPo_8Fg1Za3E2kOplqqVFM41xBT52KY,992
29
+ KekikStream/Extractors/PlayRu.py,sha256=DQMZyCSJwLkrh-gfDD8T1DvUFNBAKUXpByeCAWuK6YY,215
30
+ KekikStream/Extractors/RapidVid.py,sha256=n03CyrnFLSoL6Ys5Dy4a4d-5iIAdmouqz4-k6Vl3Hok,2369
31
+ KekikStream/Extractors/SibNet.py,sha256=Jrl93OdKwEhssG348-F2BKaj-XUS7v-Qw3dKMh_ZMRQ,878
32
+ KekikStream/Extractors/Sobreatsesuyp.py,sha256=p5aHxIM9aNBfWEnqjTdI_kYpcFKvBHg1BZoPqbB_eyo,2004
33
+ KekikStream/Extractors/TRsTX.py,sha256=Z-Xk6kSAFFbxnj2I7x0gAbBbaQyuj1mIqn2Sw0xFtP4,2156
34
+ KekikStream/Extractors/TauVideo.py,sha256=I6TYHqAYSb_fAIcb8PiIdkzlQ0ZX-9Bb5_KMG955sJ4,1114
35
+ KekikStream/Extractors/TurboImgz.py,sha256=VXx9vZZRTdQiVNER0LcXm2nsv2OaXnxuPpslG-sEKD0,826
36
+ KekikStream/Extractors/VidMoly.py,sha256=BKJgk60GomFYiLFsRQSR2sOYP105Aix5y5XLazBNWmw,3368
37
+ KekikStream/Extractors/VidMoxy.py,sha256=_K6BA7Uo59DA3ty_tsayCUZjXmRoDBTghekVNXiuZ7g,1800
38
+ KekikStream/Extractors/VideoSeyred.py,sha256=otyGi1zdY_JPrXJjoZjesCQDiOkxFdaWiXQ9mOmrygA,1780
39
+ KekikStream/Managers/ExtractorManager.py,sha256=9rGlUsnedJ7fwIeObN5Vsm8H5VLal0ODO7F93dDRx8w,976
40
+ KekikStream/Managers/MediaManager.py,sha256=SPO85LchT7bJKSecmXd1FzCjg0rUT8s3B1wulPa4SMw,519
41
+ KekikStream/Managers/PluginManager.py,sha256=YDBLHB_Fh79A3Pei0ny2KLVY4VSihdNiKBh_w5tBl-0,637
42
+ KekikStream/Managers/UIManager.py,sha256=_jJSUDCsOvrByw55KdZD0ioE2U2XmTBuw1KIaPpmm6o,1676
43
+ KekikStream/Managers/__init__.py,sha256=3085I_9Sa2L_Vq6Z-QvYUYn1BapkN4sQqBo8ITZoD_4,251
44
+ KekikStream/Plugins/DiziBox.py,sha256=ARzsao-r91c3PVV_3-NCLvNcVRSIxjlGdWl_3-1Q6Mo,5722
45
+ KekikStream/Plugins/Dizilla.py,sha256=D-gQ23rck3UjnYeYSYzokYWVL7lshzEk4vS3qsR_7Tk,3813
46
+ KekikStream/Plugins/FilmMakinesi.py,sha256=rz8TQeL41PJbeEmksgPHIhp6J-4vbSCBTeEH0ukExz4,2822
47
+ KekikStream/Plugins/FullHDFilmizlesene.py,sha256=Fa0gRP_NoMfPC8HIKRxERjQVOv8Fyb-ayMJ2EooZ7BE,3080
48
+ KekikStream/Plugins/JetFilmizle.py,sha256=FXkMSQtjYoxwIonjRENFa91rC42L_8SYRhjhuSgsu60,3919
49
+ KekikStream/Plugins/RecTV.py,sha256=uEbf5p7U4gXAuQbNjDB-5WxFOif1dqU5vU6Gtt_ZK28,4825
50
+ KekikStream/Plugins/SezonlukDizi.py,sha256=5BZVzQ2eQtymHxO0bzjA2ho4FFNahPFQly4hoHuH8lo,4441
51
+ KekikStream/Plugins/SineWix.py,sha256=iBtSl150N3GHWqHJDLVNFDSJff-00PHksQC1h2urR8w,4851
52
+ KekikStream/Plugins/UgurFilm.py,sha256=yYXee5uxwNnPqFJZ6s6cRkmUyqS3Vv8x-iesPalc4j4,2930
53
+ KekikStream-0.5.7.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
54
+ KekikStream-0.5.7.dist-info/METADATA,sha256=AUm-foF7TNufF_oY_YxOnZQ6cJiR3k2s0YElMEjdM1w,3994
55
+ KekikStream-0.5.7.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
56
+ KekikStream-0.5.7.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
57
+ KekikStream-0.5.7.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
58
+ KekikStream-0.5.7.dist-info/RECORD,,
@@ -1,33 +0,0 @@
1
- # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
-
3
- from . import konsol
4
- from rich.panel import Panel
5
- from pkg_resources import get_distribution
6
- from requests import get
7
- from subprocess import check_call
8
- import sys
9
-
10
- def check_and_update_package(package_name: str):
11
- """Paketi kontrol et ve gerekirse güncelle."""
12
- try:
13
- # Mevcut sürümü al
14
- current_version = get_distribution(package_name).version
15
- konsol.print(Panel(f"[cyan]Yüklü sürüm:[/cyan] [bold yellow]{current_version}[/bold yellow]"))
16
-
17
- # PyPI'den en son sürümü al
18
- response = get(f"https://pypi.org/pypi/{package_name}/json")
19
- if response.status_code == 200:
20
- latest_version = response.json()["info"]["version"]
21
- konsol.print(Panel(f"[cyan]En son sürüm:[/cyan] [bold green]{latest_version}[/bold green]"))
22
-
23
- # Eğer güncel değilse güncelle
24
- if current_version != latest_version:
25
- konsol.print(f"[bold red]{package_name} güncelleniyor...[/bold red]")
26
- check_call([sys.executable, "-m", "pip", "install", "--upgrade", package_name, "--break-system-packages"])
27
- konsol.print(f"[bold green]{package_name} güncellendi![/bold green]")
28
- else:
29
- konsol.print(f"[bold green]{package_name} zaten güncel.[/bold green]")
30
- else:
31
- konsol.print("[bold red]PyPI'ye erişilemiyor. Güncelleme kontrolü atlanıyor.[/bold red]")
32
- except Exception as e:
33
- konsol.print(f"[bold red]Güncelleme kontrolü sırasında hata oluştu: {e}[/bold red]")
@@ -1,41 +0,0 @@
1
- KekikStream/__init__.py,sha256=51EpuqJ5H7CU9aA-K2V1DN2iOF9eRp_y776mhv1E8ls,9328
2
- KekikStream/__main__.py,sha256=4U-NO1f0Mts5Mf_QnWhWqRbTsRBy2y2VPlpHyaqG9_I,137
3
- KekikStream/requirements.txt,sha256=Kh3E0NzIkAmhVODtIwRVffVOHLiElO6Ua9kIgjbocPE,57
4
- KekikStream/CLI/__init__.py,sha256=9YlF135BVff85y492hX4sq2WY2CNqa4BuVzF9hIIaKE,233
5
- KekikStream/CLI/check_update.py,sha256=rOa16bO9sGN-p78yaTRaccFoNfhHWEfDgGZNavpcwNI,1642
6
- KekikStream/Core/ExtractorBase.py,sha256=SPXKZPfpzvgkJeMds-USzgpm8-qb0vgZjjLDs58NfGU,1069
7
- KekikStream/Core/ExtractorLoader.py,sha256=JovJJr6Clk3xpbRLlh7v_XOl3FGwVXCjTZivec1FktI,2533
8
- KekikStream/Core/ExtractorModels.py,sha256=vJeh4qd05K7nbqdCCGU29UkGQpce6jXfsCm7LuDL1G8,454
9
- KekikStream/Core/MediaHandler.py,sha256=Q_9LMc4Wnmv8PhMfoo2IgxpHLeikUgrqp_B_Rfs217U,3005
10
- KekikStream/Core/PluginBase.py,sha256=MmhGy0XtbkWxE5SNvsag0M_jNehMxPGtVyZFOKlJPM8,2304
11
- KekikStream/Core/PluginLoader.py,sha256=og5EPfnVqrb2kUkeGU65AY0fU43IbiUo_h3ix6ZiINY,2596
12
- KekikStream/Core/PluginModels.py,sha256=WWPEz8PpZZ4bLMDJzTE19BsQEJObkyhaYjDkyLaF2Ck,2365
13
- KekikStream/Core/__init__.py,sha256=HZpXs3MKy4joO0sDpIGcZ2DrUKwK49IKG-GQgKbO2jk,416
14
- KekikStream/Extractors/CloseLoad.py,sha256=YmDB3YvuDaCUbQ0T_tmhnkEsC5mSdEN6GNoAR662fl8,990
15
- KekikStream/Extractors/MailRu.py,sha256=lB3Xy912EaSEUw7Im65L5TwtIeM7OLFV1_9lan39g40,1308
16
- KekikStream/Extractors/PixelDrain.py,sha256=JLNaTdFJfXj5ExB_OjjyjwBZBD_gCOmL3fO_TWbHe90,998
17
- KekikStream/Extractors/RapidVid.py,sha256=HmSXDWhE1EXZRhNCxrqqEBbyJKbqFtTFRtq-zYg3G2c,2430
18
- KekikStream/Extractors/SibNet.py,sha256=w0Rv1cYB_Ho6M9Aho9n38Thp6mAfKPNe-eKFC_DbGuE,884
19
- KekikStream/Extractors/Sobreatsesuyp.py,sha256=7JUbqHLMWFkHuzH3NG2ogaV53e9fUmGvAr7h83yRtxs,1953
20
- KekikStream/Extractors/TRsTX.py,sha256=jhPcQq7KPxL0SPvEFL4MG7oDXDpBbt6Qh8vRJ_bLQMU,2105
21
- KekikStream/Extractors/TauVideo.py,sha256=bBjrZFSi4QqSJhRB0sDWMA0Saio-zpoAb6Ss4QZmBeY,1045
22
- KekikStream/Extractors/TurboImgz.py,sha256=0d9t6bj4prVt1_LIbzwcfuqrSRB7SMvc4RKvE25BtW4,851
23
- KekikStream/Extractors/VidMoly.py,sha256=a2ElfpEcTWBpBT0mADWcEF2T8l9WjAEuX8Dux0hiYrU,3390
24
- KekikStream/Extractors/VidMoxy.py,sha256=UnVrCEI4XNiONE2aLV9dGUhRqQ9ELJTnYVXyG81N11A,1800
25
- KekikStream/Managers/ExtractorManager.py,sha256=9rGlUsnedJ7fwIeObN5Vsm8H5VLal0ODO7F93dDRx8w,976
26
- KekikStream/Managers/MediaManager.py,sha256=F7mkSvAttAaMHRvnDcxnV2K1D_sK644BCSrEaAmMl_U,522
27
- KekikStream/Managers/PluginManager.py,sha256=YDBLHB_Fh79A3Pei0ny2KLVY4VSihdNiKBh_w5tBl-0,637
28
- KekikStream/Managers/UIManager.py,sha256=RNsvfwker2Pwel9Ur14Bo0oY7Xg5XmlpvFAWdHQJJMc,1590
29
- KekikStream/Managers/__init__.py,sha256=3085I_9Sa2L_Vq6Z-QvYUYn1BapkN4sQqBo8ITZoD_4,251
30
- KekikStream/Plugins/FilmMakinesi.py,sha256=g4LRDP5Atn97PqbgnEdm0-wjVdXaJIVk1Ru0F8B66Ws,2902
31
- KekikStream/Plugins/FullHDFilmizlesene.py,sha256=HJzHDXHhhMpvXxiD2SjpoZEYs7dmnPymE8EXCSvLKVo,3106
32
- KekikStream/Plugins/JetFilmizle.py,sha256=DPdvTEns8r2MI9pHY8d9EEsUZmlQU7N2C9yr8ox80qU,4016
33
- KekikStream/Plugins/SezonlukDizi.py,sha256=5BZVzQ2eQtymHxO0bzjA2ho4FFNahPFQly4hoHuH8lo,4441
34
- KekikStream/Plugins/SineWix.py,sha256=RJxggTrZxBimQHI4ehtJipVeIBpfHy85NW-ixE2iF2k,4762
35
- KekikStream/Plugins/UgurFilm.py,sha256=U7ryNWpjSZJWuYlMGX1Be9uuyiM3SfuI9VJcEiXedNs,2960
36
- KekikStream-0.2.3.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
37
- KekikStream-0.2.3.dist-info/METADATA,sha256=KRLxDSHdAxoA7dl62Xe3rFDvq5DnEnTOSrmuUeiXC9s,3959
38
- KekikStream-0.2.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
39
- KekikStream-0.2.3.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
40
- KekikStream-0.2.3.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
41
- KekikStream-0.2.3.dist-info/RECORD,,