KekikStream 0.1.7__tar.gz → 0.1.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.
Files changed (45) hide show
  1. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Core/PluginBase.py +38 -4
  2. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Extractors/PixelDrain.py +1 -1
  3. kekikstream-0.1.8/KekikStream/Plugins/JetFilmizle.py +96 -0
  4. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream.egg-info/PKG-INFO +1 -1
  5. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream.egg-info/SOURCES.txt +1 -0
  6. {kekikstream-0.1.7 → kekikstream-0.1.8}/PKG-INFO +1 -1
  7. {kekikstream-0.1.7 → kekikstream-0.1.8}/setup.py +1 -1
  8. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/CLI/__init__.py +0 -0
  9. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/CLI/check_update.py +0 -0
  10. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Core/ExtractorBase.py +0 -0
  11. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Core/ExtractorLoader.py +0 -0
  12. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Core/ExtractorModels.py +0 -0
  13. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Core/MediaHandler.py +0 -0
  14. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Core/PluginLoader.py +0 -0
  15. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Core/PluginModels.py +0 -0
  16. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Core/__init__.py +0 -0
  17. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Extractors/CloseLoad.py +0 -0
  18. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Extractors/MailRu.py +0 -0
  19. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Extractors/RapidVid.py +0 -0
  20. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Extractors/SibNet.py +0 -0
  21. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Extractors/Sobreatsesuyp.py +0 -0
  22. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Extractors/TRsTX.py +0 -0
  23. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Extractors/TauVideo.py +0 -0
  24. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Extractors/TurboImgz.py +0 -0
  25. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Extractors/VidMoxy.py +0 -0
  26. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Managers/ExtractorManager.py +0 -0
  27. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Managers/MediaManager.py +0 -0
  28. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Managers/PluginManager.py +0 -0
  29. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Managers/UIManager.py +0 -0
  30. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Managers/__init__.py +0 -0
  31. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Plugins/FilmMakinesi.py +0 -0
  32. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
  33. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Plugins/SineWix.py +0 -0
  34. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/Plugins/UgurFilm.py +0 -0
  35. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/__init__.py +0 -0
  36. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/__main__.py +0 -0
  37. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream/requirements.txt +0 -0
  38. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream.egg-info/dependency_links.txt +0 -0
  39. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream.egg-info/entry_points.txt +0 -0
  40. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream.egg-info/requires.txt +0 -0
  41. {kekikstream-0.1.7 → kekikstream-0.1.8}/KekikStream.egg-info/top_level.txt +0 -0
  42. {kekikstream-0.1.7 → kekikstream-0.1.8}/LICENSE +0 -0
  43. {kekikstream-0.1.7 → kekikstream-0.1.8}/MANIFEST.in +0 -0
  44. {kekikstream-0.1.7 → kekikstream-0.1.8}/README.md +0 -0
  45. {kekikstream-0.1.7 → kekikstream-0.1.8}/setup.cfg +0 -0
@@ -4,6 +4,8 @@ from abc import ABC, abstractmethod
4
4
  from httpx import AsyncClient, Timeout
5
5
  from .PluginModels import SearchResult, MovieInfo
6
6
  from .MediaHandler import MediaHandler
7
+ from urllib.parse import urljoin
8
+ import re
7
9
 
8
10
  class PluginBase(ABC):
9
11
  name = "Plugin"
@@ -38,8 +40,40 @@ class PluginBase(ABC):
38
40
  async def close(self):
39
41
  await self.oturum.aclose()
40
42
 
41
- def fix_url(self, partial_url: str):
42
- if partial_url.startswith("http"):
43
- return partial_url
43
+ def fix_url(self, url: str) -> str:
44
+ if not url:
45
+ return ""
46
+
47
+ if url.startswith("http") or url.startswith("{\""):
48
+ return url
44
49
 
45
- return self.main_url.rstrip("/") + "/" + partial_url.lstrip("/")
50
+ if url.startswith("//"):
51
+ return f"https:{url}"
52
+
53
+ return urljoin(self.main_url, url)
54
+
55
+ @staticmethod
56
+ def clean_title(title: str) -> str:
57
+ suffixes = [
58
+ " izle",
59
+ " full film",
60
+ " filmini full",
61
+ " full türkçe",
62
+ " alt yazılı",
63
+ " altyazılı",
64
+ " tr dublaj",
65
+ " hd türkçe",
66
+ " türkçe dublaj",
67
+ " yeşilçam ",
68
+ " erotik fil",
69
+ " türkçe",
70
+ " yerli",
71
+ " tüekçe dublaj",
72
+ ]
73
+
74
+ cleaned_title = title.strip()
75
+
76
+ for suffix in suffixes:
77
+ cleaned_title = re.sub(f"{re.escape(suffix)}.*$", "", cleaned_title, flags=re.IGNORECASE).strip()
78
+
79
+ return cleaned_title
@@ -11,7 +11,7 @@ class PixelDrain(ExtractorBase):
11
11
  if referer:
12
12
  self.oturum.headers.update({"Referer": referer})
13
13
 
14
- pixel_id_match = re.search(r"([^\/]+)(?=\?download)", url)
14
+ pixel_id_match = re.search(r"/u/([^/?]+)|([^\/]+)(?=\?download)", url)
15
15
  if not pixel_id_match:
16
16
  raise ValueError("PixelDrain bağlantısından ID çıkarılamadı.")
17
17
 
@@ -0,0 +1,96 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Core import PluginBase, SearchResult, MovieInfo
4
+ from parsel import Selector
5
+
6
+ class JetFilmizle(PluginBase):
7
+ name = "JetFilmizle"
8
+ main_url = "https://jetfilmizle.media"
9
+
10
+ async def search(self, query: str) -> list[SearchResult]:
11
+ istek = await self.oturum.post(
12
+ url = f"{self.main_url}/filmara.php",
13
+ data = {"s": query},
14
+ headers = {"Referer": f"{self.main_url}/"}
15
+ )
16
+ secici = Selector(istek.text)
17
+
18
+ results = []
19
+ for article in secici.css("article.movie"):
20
+ title = self.clean_title(article.css("h2 a::text, h3 a::text, h4 a::text, h5 a::text, h6 a::text").get())
21
+ href = article.css("a::attr(href)").get()
22
+ poster = article.css("img::attr(data-src)").get() or article.css("img::attr(src)").get()
23
+
24
+ if title and href:
25
+ results.append(
26
+ SearchResult(
27
+ title = title.strip(),
28
+ url = self.fix_url(href.strip()),
29
+ poster = self.fix_url(poster.strip()) if poster else None,
30
+ )
31
+ )
32
+
33
+ return results
34
+
35
+ async def load_item(self, url: str) -> MovieInfo:
36
+ istek = await self.oturum.get(url)
37
+ secici = Selector(istek.text)
38
+
39
+ title = self.clean_title(secici.css("div.movie-exp-title::text").get())
40
+ poster = secici.css("section.movie-exp img::attr(data-src), section.movie-exp img::attr(src)").get().strip()
41
+ description = secici.css("section.movie-exp p.aciklama::text").get().strip()
42
+ tags = secici.css("section.movie-exp div.catss a::text").getall()
43
+ rating = secici.css("section.movie-exp div.imdb_puan span::text").get().strip()
44
+ year = secici.xpath("//div[@class='yap' and (contains(., 'Vizyon') or contains(., 'Yapım'))]/text()").get().strip()
45
+ actors = secici.css("div[itemprop='actor'] a span::text").getall()
46
+
47
+ return MovieInfo(
48
+ url = url,
49
+ poster = self.fix_url(poster),
50
+ title = title,
51
+ description = description,
52
+ tags = tags,
53
+ rating = rating,
54
+ year = year,
55
+ actors = actors
56
+ )
57
+
58
+ async def load_links(self, url: str) -> list[str]:
59
+ istek = await self.oturum.get(url)
60
+ secici = Selector(istek.text)
61
+
62
+ iframes = []
63
+ main_iframe = secici.css("div#movie iframe::attr(data-src), div#movie iframe::attr(data), div#movie iframe::attr(src)").get()
64
+ if main_iframe:
65
+ iframes.append(self.fix_url(main_iframe))
66
+
67
+ for part in secici.css("div.film_part a"):
68
+ part_href = part.attrib.get("href")
69
+ if not part_href:
70
+ continue
71
+
72
+ part_istek = await self.oturum.get(part_href)
73
+ part_secici = Selector(part_istek.text)
74
+
75
+ iframe = part_secici.css("div#movie iframe::attr(data-src), div#movie iframe::attr(data), div#movie iframe::attr(src)").get()
76
+ if iframe:
77
+ iframes.append(self.fix_url(iframe))
78
+ else:
79
+ for link in part_secici.css("div#movie p a"):
80
+ download_link = link.attrib.get("href")
81
+ if download_link:
82
+ iframes.append(self.fix_url(download_link))
83
+
84
+ processed_iframes = []
85
+ for iframe in iframes:
86
+ if "jetv.xyz" in iframe:
87
+ jetv_istek = await self.oturum.get(iframe)
88
+ jetv_secici = Selector(jetv_istek.text)
89
+
90
+ jetv_iframe = jetv_secici.css("iframe::attr(src)").get()
91
+ if jetv_iframe:
92
+ processed_iframes.append(self.fix_url(jetv_iframe))
93
+ else:
94
+ processed_iframes.append(iframe)
95
+
96
+ return processed_iframes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: KekikStream
3
- Version: 0.1.7
3
+ Version: 0.1.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
@@ -38,5 +38,6 @@ KekikStream/Managers/UIManager.py
38
38
  KekikStream/Managers/__init__.py
39
39
  KekikStream/Plugins/FilmMakinesi.py
40
40
  KekikStream/Plugins/FullHDFilmizlesene.py
41
+ KekikStream/Plugins/JetFilmizle.py
41
42
  KekikStream/Plugins/SineWix.py
42
43
  KekikStream/Plugins/UgurFilm.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: KekikStream
3
- Version: 0.1.7
3
+ Version: 0.1.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
@@ -6,7 +6,7 @@ from io import open
6
6
  setup(
7
7
  # ? Genel Bilgiler
8
8
  name = "KekikStream",
9
- version = "0.1.7",
9
+ version = "0.1.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