KekikStream 0.3.8__tar.gz → 0.4.0__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.
Files changed (63) hide show
  1. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/ContentX.py +2 -2
  2. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/Sobreatsesuyp.py +1 -1
  3. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/TRsTX.py +1 -1
  4. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/TauVideo.py +11 -9
  5. kekikstream-0.4.0/KekikStream/Plugins/Dizilla.py +95 -0
  6. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/__init__.py +10 -4
  7. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream.egg-info/PKG-INFO +1 -1
  8. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream.egg-info/SOURCES.txt +1 -0
  9. {kekikstream-0.3.8 → kekikstream-0.4.0}/PKG-INFO +1 -1
  10. {kekikstream-0.3.8 → kekikstream-0.4.0}/setup.py +1 -1
  11. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/CLI/__init__.py +0 -0
  12. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/CLI/pypi_kontrol.py +0 -0
  13. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Core/ExtractorBase.py +0 -0
  14. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Core/ExtractorLoader.py +0 -0
  15. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Core/ExtractorModels.py +0 -0
  16. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Core/MediaHandler.py +0 -0
  17. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Core/PluginBase.py +0 -0
  18. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Core/PluginLoader.py +0 -0
  19. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Core/PluginModels.py +0 -0
  20. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Core/__init__.py +0 -0
  21. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/CloseLoad.py +0 -0
  22. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/FourCX.py +0 -0
  23. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/FourPichive.py +0 -0
  24. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/FourPlayRu.py +0 -0
  25. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/HDStreamAble.py +0 -0
  26. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/Hotlinger.py +0 -0
  27. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/MailRu.py +0 -0
  28. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/MixPlayHD.py +0 -0
  29. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/Odnoklassniki.py +0 -0
  30. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/OkRuHTTP.py +0 -0
  31. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/OkRuSSL.py +0 -0
  32. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/PeaceMakerst.py +0 -0
  33. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/Pichive.py +0 -0
  34. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/PixelDrain.py +0 -0
  35. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/PlayRu.py +0 -0
  36. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/RapidVid.py +0 -0
  37. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/SibNet.py +0 -0
  38. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/TurboImgz.py +0 -0
  39. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/VidMoly.py +0 -0
  40. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/VidMoxy.py +0 -0
  41. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Extractors/VideoSeyred.py +0 -0
  42. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Managers/ExtractorManager.py +0 -0
  43. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Managers/MediaManager.py +0 -0
  44. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Managers/PluginManager.py +0 -0
  45. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Managers/UIManager.py +0 -0
  46. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Managers/__init__.py +0 -0
  47. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Plugins/DiziBox.py +0 -0
  48. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Plugins/FilmMakinesi.py +0 -0
  49. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
  50. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Plugins/JetFilmizle.py +0 -0
  51. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Plugins/SezonlukDizi.py +0 -0
  52. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Plugins/SineWix.py +0 -0
  53. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/Plugins/UgurFilm.py +0 -0
  54. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/__main__.py +0 -0
  55. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream/requirements.txt +0 -0
  56. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream.egg-info/dependency_links.txt +0 -0
  57. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream.egg-info/entry_points.txt +0 -0
  58. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream.egg-info/requires.txt +0 -0
  59. {kekikstream-0.3.8 → kekikstream-0.4.0}/KekikStream.egg-info/top_level.txt +0 -0
  60. {kekikstream-0.3.8 → kekikstream-0.4.0}/LICENSE +0 -0
  61. {kekikstream-0.3.8 → kekikstream-0.4.0}/MANIFEST.in +0 -0
  62. {kekikstream-0.3.8 → kekikstream-0.4.0}/README.md +0 -0
  63. {kekikstream-0.3.8 → kekikstream-0.4.0}/setup.cfg +0 -0
@@ -15,7 +15,7 @@ class ContentX(ExtractorBase):
15
15
  istek.raise_for_status()
16
16
  i_source = istek.text
17
17
 
18
- i_extract = re.search(r"window\.openPlayer\('([^']+)'\)", i_source)
18
+ i_extract = re.search(r"window\.openPlayer\('([^']+)'", i_source)
19
19
  if not i_extract:
20
20
  raise ValueError("i_extract is null")
21
21
  i_extract_value = i_extract[1]
@@ -77,4 +77,4 @@ class ContentX(ExtractorBase):
77
77
  )
78
78
  )
79
79
 
80
- return results
80
+ return results[0] if len(results) == 1 else results
@@ -56,4 +56,4 @@ class Sobreatsesuyp(ExtractorBase):
56
56
  if not all_results:
57
57
  raise ValueError("No videos found in response.")
58
58
 
59
- return all_results
59
+ return all_results[0] if len(all_results) == 1 else all_results
@@ -64,4 +64,4 @@ class TRsTX(ExtractorBase):
64
64
  if not all_results:
65
65
  raise ValueError("No videos found in response.")
66
66
 
67
- return all_results
67
+ return all_results[0] if len(all_results) == 1 else all_results
@@ -21,12 +21,14 @@ class TauVideo(ExtractorBase):
21
21
  if "urls" not in api_data:
22
22
  raise ValueError("API yanıtında 'urls' bulunamadı.")
23
23
 
24
- return [
25
- ExtractResult(
26
- name = f"{self.name} - {video['label']}",
27
- url = video["url"],
28
- referer = referer or self.main_url,
29
- subtitles = []
30
- )
31
- for video in api_data["urls"]
32
- ]
24
+ results = [
25
+ ExtractResult(
26
+ name = f"{self.name} - {video['label']}",
27
+ url = video["url"],
28
+ referer = referer or self.main_url,
29
+ subtitles = []
30
+ )
31
+ for video in api_data["urls"]
32
+ ]
33
+
34
+ return results[0] if len(results) == 1 else results
@@ -0,0 +1,95 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Core import PluginBase, SearchResult, SeriesInfo, Episode
4
+ from parsel import Selector
5
+ from json import loads
6
+
7
+ class Dizilla(PluginBase):
8
+ name = "Dizilla"
9
+ main_url = "https://dizilla.club"
10
+
11
+ async def search(self, query: str) -> list[SearchResult]:
12
+ ilk_istek = await self.oturum.get(self.main_url)
13
+ ilk_secici = Selector(ilk_istek.text)
14
+ cKey = ilk_secici.css("input[name='cKey']::attr(value)").get()
15
+ cValue = ilk_secici.css("input[name='cValue']::attr(value)").get()
16
+
17
+ self.oturum.headers.update({
18
+ "Accept" : "application/json, text/javascript, */*; q=0.01",
19
+ "X-Requested-With" : "XMLHttpRequest",
20
+ "Referer" : f"{self.main_url}/"
21
+ })
22
+ self.oturum.cookies.update({
23
+ "showAllDaFull" : "true",
24
+ "PHPSESSID" : ilk_istek.cookies.get("PHPSESSID"),
25
+ })
26
+
27
+ arama_istek = await self.oturum.post(
28
+ url = f"{self.main_url}/bg/searchcontent",
29
+ data = {
30
+ "cKey" : cKey,
31
+ "cValue" : cValue,
32
+ "searchterm" : query
33
+ }
34
+ )
35
+ arama_veri = arama_istek.json().get("data", {}).get("result", [])
36
+
37
+ return [
38
+ SearchResult(
39
+ title = veri.get("object_name"),
40
+ url = self.fix_url(f"{self.main_url}/{veri.get('used_slug')}"),
41
+ poster = self.fix_url(veri.get("object_poster_url")),
42
+ )
43
+ for veri in arama_veri
44
+ ]
45
+
46
+ async def load_item(self, url: str) -> SeriesInfo:
47
+ istek = await self.oturum.get(url)
48
+ secici = Selector(istek.text)
49
+ veri = loads(secici.xpath("//script[@type='application/ld+json']/text()").getall()[-1])
50
+
51
+ title = veri.get("name")
52
+ if alt_title := veri.get("alternateName"):
53
+ title += f" - ({alt_title})"
54
+
55
+ poster = self.fix_url(veri.get("image"))
56
+ description = veri.get("description")
57
+ year = veri.get("datePublished").split("-")[0]
58
+ tags = []
59
+ rating = veri.get("aggregateRating", {}).get("ratingValue")
60
+ actors = [actor.get("name") for actor in veri.get("actor", []) if actor.get("name")]
61
+
62
+ bolumler = []
63
+ sezonlar = veri.get("containsSeason") if isinstance(veri.get("containsSeason"), list) else [veri.get("containsSeason")]
64
+ for sezon in sezonlar:
65
+ for bolum in sezon.get("episode"):
66
+ bolumler.append(Episode(
67
+ season = sezon.get("seasonNumber"),
68
+ episode = bolum.get("episodeNumber"),
69
+ title = bolum.get("name"),
70
+ url = bolum.get("url"),
71
+ ))
72
+
73
+ return SeriesInfo(
74
+ url = url,
75
+ poster = poster,
76
+ title = title,
77
+ description = description,
78
+ tags = tags,
79
+ rating = rating,
80
+ year = year,
81
+ episodes = bolumler,
82
+ actors = actors
83
+ )
84
+
85
+ async def load_links(self, url: str) -> list[str]:
86
+ istek = await self.oturum.get(url)
87
+ secici = Selector(istek.text)
88
+
89
+ iframes = [self.fix_url(secici.css("div#playerLsDizilla iframe::attr(src)").get())]
90
+ for alternatif in secici.css("a[href*='player']"):
91
+ alt_istek = await self.oturum.get(self.fix_url(alternatif.css("::attr(href)").get()))
92
+ alt_secici = Selector(alt_istek.text)
93
+ iframes.append(self.fix_url(alt_secici.css("div#playerLsDizilla iframe::attr(src)").get()))
94
+
95
+ return iframes
@@ -84,9 +84,7 @@ class KekikStream:
84
84
  secilen_sonuc = await self.tum_sonuc_secimi(sonuclar)
85
85
 
86
86
  if secilen_sonuc:
87
- for _ in range(3):
88
- with suppress(Exception):
89
- return await self.sonuc_detaylari_goster(secilen_sonuc)
87
+ return await self.sonuc_detaylari_goster(secilen_sonuc)
90
88
 
91
89
  async def tum_eklentilerde_arama_sorgula(self, sorgu: str) -> list:
92
90
  tum_sonuclar = []
@@ -134,7 +132,15 @@ class KekikStream:
134
132
  else:
135
133
  url = secilen_sonuc
136
134
 
137
- medya_bilgi = await self.suanki_eklenti.load_item(url)
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()
143
+
138
144
  except Exception as hata:
139
145
  konsol.log(secilen_sonuc)
140
146
  return hata_yakala(hata)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: KekikStream
3
- Version: 0.3.8
3
+ Version: 0.4.0
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
@@ -52,6 +52,7 @@ KekikStream/Managers/PluginManager.py
52
52
  KekikStream/Managers/UIManager.py
53
53
  KekikStream/Managers/__init__.py
54
54
  KekikStream/Plugins/DiziBox.py
55
+ KekikStream/Plugins/Dizilla.py
55
56
  KekikStream/Plugins/FilmMakinesi.py
56
57
  KekikStream/Plugins/FullHDFilmizlesene.py
57
58
  KekikStream/Plugins/JetFilmizle.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: KekikStream
3
- Version: 0.3.8
3
+ Version: 0.4.0
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
@@ -6,7 +6,7 @@ from io import open
6
6
  setup(
7
7
  # ? Genel Bilgiler
8
8
  name = "KekikStream",
9
- version = "0.3.8",
9
+ version = "0.4.0",
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