KekikStream 1.2.2__py3-none-any.whl → 1.2.4__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 (36) hide show
  1. KekikStream/Core/Extractor/ExtractorBase.py +2 -2
  2. KekikStream/Core/Plugin/PluginBase.py +11 -8
  3. KekikStream/Extractors/CloseLoad.py +2 -2
  4. KekikStream/Extractors/ContentX.py +4 -4
  5. KekikStream/Extractors/MailRu.py +2 -2
  6. KekikStream/Extractors/MixPlayHD.py +2 -2
  7. KekikStream/Extractors/Odnoklassniki.py +3 -3
  8. KekikStream/Extractors/PeaceMakerst.py +4 -4
  9. KekikStream/Extractors/PixelDrain.py +1 -1
  10. KekikStream/Extractors/RapidVid.py +2 -2
  11. KekikStream/Extractors/SibNet.py +2 -2
  12. KekikStream/Extractors/Sobreatsesuyp.py +4 -4
  13. KekikStream/Extractors/TRsTX.py +4 -4
  14. KekikStream/Extractors/TauVideo.py +2 -2
  15. KekikStream/Extractors/TurboImgz.py +2 -2
  16. KekikStream/Extractors/VidMoly.py +3 -3
  17. KekikStream/Extractors/VidMoxy.py +2 -2
  18. KekikStream/Extractors/VideoSeyred.py +3 -3
  19. KekikStream/Plugins/DiziBox.py +17 -16
  20. KekikStream/Plugins/DiziYou.py +3 -3
  21. KekikStream/Plugins/Dizilla.py +7 -7
  22. KekikStream/Plugins/FilmMakinesi.py +3 -3
  23. KekikStream/Plugins/FullHDFilmizlesene.py +3 -3
  24. KekikStream/Plugins/{HdFilmCehennemi.py → HDFilmCehennemi.py} +58 -55
  25. KekikStream/Plugins/JetFilmizle.py +5 -5
  26. KekikStream/Plugins/SezonlukDizi.py +7 -7
  27. KekikStream/Plugins/Shorten.py +6 -6
  28. KekikStream/Plugins/SineWix.py +7 -6
  29. KekikStream/Plugins/UgurFilm.py +5 -5
  30. {kekikstream-1.2.2.dist-info → kekikstream-1.2.4.dist-info}/METADATA +1 -1
  31. kekikstream-1.2.4.dist-info/RECORD +62 -0
  32. kekikstream-1.2.2.dist-info/RECORD +0 -62
  33. {kekikstream-1.2.2.dist-info → kekikstream-1.2.4.dist-info}/LICENSE +0 -0
  34. {kekikstream-1.2.2.dist-info → kekikstream-1.2.4.dist-info}/WHEEL +0 -0
  35. {kekikstream-1.2.2.dist-info → kekikstream-1.2.4.dist-info}/entry_points.txt +0 -0
  36. {kekikstream-1.2.2.dist-info → kekikstream-1.2.4.dist-info}/top_level.txt +0 -0
@@ -14,7 +14,7 @@ class ExtractorBase(ABC):
14
14
 
15
15
  def __init__(self):
16
16
  # HTTP istekleri için oturum oluştur
17
- self.oturum = AsyncClient(
17
+ self.httpx = AsyncClient(
18
18
  headers = {
19
19
  "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5)",
20
20
  "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
@@ -35,7 +35,7 @@ class ExtractorBase(ABC):
35
35
 
36
36
  async def close(self):
37
37
  # HTTP oturumunu güvenli bir şekilde kapat
38
- await self.oturum.aclose()
38
+ await self.httpx.aclose()
39
39
 
40
40
  def fix_url(self, url: str) -> str:
41
41
  # Eksik URL'leri düzelt ve tam URL formatına çevir
@@ -9,13 +9,16 @@ from urllib.parse import urljoin
9
9
  import re
10
10
 
11
11
  class PluginBase(ABC):
12
- name = "Plugin"
13
- main_url = "https://example.com"
14
- _data = {}
15
- main_page = {}
12
+ name = "Plugin"
13
+ language = "tr"
14
+ main_url = "https://example.com"
15
+ description = "No description provided."
16
+ favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
17
+ main_page = {}
18
+ _data = {}
16
19
 
17
20
  def __init__(self):
18
- self.oturum = AsyncClient(
21
+ self.httpx = AsyncClient(
19
22
  headers = {
20
23
  "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5)",
21
24
  "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
@@ -24,8 +27,8 @@ class PluginBase(ABC):
24
27
  )
25
28
  self.media_handler = MediaHandler()
26
29
  self.cloudscraper = CloudScraper()
27
- self.oturum.headers.update(self.cloudscraper.headers)
28
- self.oturum.cookies.update(self.cloudscraper.cookies)
30
+ self.httpx.headers.update(self.cloudscraper.headers)
31
+ self.httpx.cookies.update(self.cloudscraper.cookies)
29
32
 
30
33
  # @abstractmethod
31
34
  # async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
@@ -48,7 +51,7 @@ class PluginBase(ABC):
48
51
  pass
49
52
 
50
53
  async def close(self):
51
- await self.oturum.aclose()
54
+ await self.httpx.aclose()
52
55
 
53
56
  def fix_url(self, url: str) -> str:
54
57
  if not url:
@@ -10,9 +10,9 @@ class CloseLoadExtractor(ExtractorBase):
10
10
 
11
11
  async def extract(self, url, referer=None) -> ExtractResult:
12
12
  if referer:
13
- self.oturum.headers.update({"Referer": referer})
13
+ self.httpx.headers.update({"Referer": referer})
14
14
 
15
- istek = await self.oturum.get(url)
15
+ istek = await self.httpx.get(url)
16
16
  istek.raise_for_status()
17
17
 
18
18
  secici = Selector(istek.text)
@@ -9,9 +9,9 @@ class ContentX(ExtractorBase):
9
9
 
10
10
  async def extract(self, url, referer=None) -> list[ExtractResult]:
11
11
  if referer:
12
- self.oturum.headers.update({"Referer": referer})
12
+ self.httpx.headers.update({"Referer": referer})
13
13
 
14
- istek = await self.oturum.get(url)
14
+ istek = await self.httpx.get(url)
15
15
  istek.raise_for_status()
16
16
  i_source = istek.text
17
17
 
@@ -39,7 +39,7 @@ class ContentX(ExtractorBase):
39
39
  )
40
40
  )
41
41
 
42
- vid_source_request = await self.oturum.get(f"{self.main_url}/source2.php?v={i_extract_value}", headers={"Referer": referer or self.main_url})
42
+ vid_source_request = await self.httpx.get(f"{self.main_url}/source2.php?v={i_extract_value}", headers={"Referer": referer or self.main_url})
43
43
  vid_source_request.raise_for_status()
44
44
 
45
45
  vid_source = vid_source_request.text
@@ -59,7 +59,7 @@ class ContentX(ExtractorBase):
59
59
 
60
60
  if i_dublaj := re.search(r',\"([^"]+)\",\"Türkçe"', i_source):
61
61
  dublaj_value = i_dublaj[1]
62
- dublaj_source_request = await self.oturum.get(f"{self.main_url}/source2.php?v={dublaj_value}", headers={"Referer": referer or self.main_url})
62
+ dublaj_source_request = await self.httpx.get(f"{self.main_url}/source2.php?v={dublaj_value}", headers={"Referer": referer or self.main_url})
63
63
  dublaj_source_request.raise_for_status()
64
64
 
65
65
  dublaj_source = dublaj_source_request.text
@@ -11,9 +11,9 @@ class MailRuExtractor(ExtractorBase):
11
11
  video_meta_url = f"{self.main_url}/+/video/meta/{vid_id}"
12
12
 
13
13
  if referer:
14
- self.oturum.headers.update({"Referer": referer})
14
+ self.httpx.headers.update({"Referer": referer})
15
15
 
16
- istek = await self.oturum.get(video_meta_url)
16
+ istek = await self.httpx.get(video_meta_url)
17
17
  istek.raise_for_status()
18
18
 
19
19
  video_key = istek.cookies.get("video_key")
@@ -10,9 +10,9 @@ class MixPlayHD(ExtractorBase):
10
10
 
11
11
  async def extract(self, url, referer=None) -> ExtractResult:
12
12
  if referer:
13
- self.oturum.headers.update({"Referer": referer})
13
+ self.httpx.headers.update({"Referer": referer})
14
14
 
15
- istek = await self.oturum.get(url)
15
+ istek = await self.httpx.get(url)
16
16
  istek.raise_for_status()
17
17
 
18
18
  be_player_match = re.search(r"bePlayer\('([^']+)',\s*'(\{[^\}]+\})'\);", istek.text)
@@ -9,9 +9,9 @@ class Odnoklassniki(ExtractorBase):
9
9
 
10
10
  async def extract(self, url, referer=None) -> ExtractResult:
11
11
  if referer:
12
- self.oturum.headers.update({"Referer": referer})
12
+ self.httpx.headers.update({"Referer": referer})
13
13
 
14
- self.oturum.headers.update({
14
+ self.httpx.headers.update({
15
15
  "User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36"
16
16
  })
17
17
 
@@ -88,7 +88,7 @@ class Odnoklassniki(ExtractorBase):
88
88
  """Yönlendirmeleri takip eden bir fonksiyon"""
89
89
  redirects = 0
90
90
  while redirects < max_redirects:
91
- istek = await self.oturum.get(url, follow_redirects=False)
91
+ istek = await self.httpx.get(url, follow_redirects=False)
92
92
 
93
93
  if istek.status_code not in [301, 302]:
94
94
  break # Yönlendirme yoksa çık
@@ -9,14 +9,14 @@ class PeaceMakerst(ExtractorBase):
9
9
 
10
10
  async def extract(self, url, referer=None) -> ExtractResult:
11
11
  if referer:
12
- self.oturum.headers.update({"Referer": referer})
12
+ self.httpx.headers.update({"Referer": referer})
13
13
 
14
- self.oturum.headers.update({
14
+ self.httpx.headers.update({
15
15
  "Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8",
16
16
  "X-Requested-With" : "XMLHttpRequest"
17
17
  })
18
18
 
19
- response = await self.oturum.post(
19
+ response = await self.httpx.post(
20
20
  url = f"{url}?do=getVideo",
21
21
  data = {
22
22
  "hash" : url.split("video/")[-1],
@@ -33,7 +33,7 @@ class PeaceMakerst(ExtractorBase):
33
33
  teve2_id = re.search(r"teve2\.com\.tr\\\/embed\\\/(\d+)", response_text)[1]
34
34
  teve2_url = f"https://www.teve2.com.tr/action/media/{teve2_id}"
35
35
 
36
- teve2_response = await self.oturum.get(teve2_url, headers={"Referer": f"https://www.teve2.com.tr/embed/{teve2_id}"})
36
+ teve2_response = await self.httpx.get(teve2_url, headers={"Referer": f"https://www.teve2.com.tr/embed/{teve2_id}"})
37
37
  teve2_response.raise_for_status()
38
38
  teve2_json = teve2_response.json()
39
39
 
@@ -9,7 +9,7 @@ class PixelDrain(ExtractorBase):
9
9
 
10
10
  async def extract(self, url, referer=None) -> ExtractResult:
11
11
  if referer:
12
- self.oturum.headers.update({"Referer": referer})
12
+ self.httpx.headers.update({"Referer": referer})
13
13
 
14
14
  pixel_id_match = re.search(r"/u/([^/?]+)|([^\/]+)(?=\?download)", url)
15
15
  if not pixel_id_match:
@@ -10,9 +10,9 @@ class RapidVid(ExtractorBase):
10
10
 
11
11
  async def extract(self, url, referer=None) -> ExtractResult:
12
12
  if referer:
13
- self.oturum.headers.update({"Referer": referer})
13
+ self.httpx.headers.update({"Referer": referer})
14
14
 
15
- istek = await self.oturum.get(url)
15
+ istek = await self.httpx.get(url)
16
16
  istek.raise_for_status()
17
17
 
18
18
  subtitles = []
@@ -9,9 +9,9 @@ class SibNet(ExtractorBase):
9
9
 
10
10
  async def extract(self, url, referer=None) -> ExtractResult:
11
11
  if referer:
12
- self.oturum.headers.update({"Referer": referer})
12
+ self.httpx.headers.update({"Referer": referer})
13
13
 
14
- response = await self.oturum.get(url)
14
+ response = await self.httpx.get(url)
15
15
  response.raise_for_status()
16
16
 
17
17
  match = re.search(r'player\.src\(\[\{src: \"([^\"]+)\"', response.text)
@@ -9,9 +9,9 @@ class Sobreatsesuyp(ExtractorBase):
9
9
 
10
10
  async def extract(self, url, referer=None) -> ExtractResult:
11
11
  if referer:
12
- self.oturum.headers.update({"Referer": referer})
12
+ self.httpx.headers.update({"Referer": referer})
13
13
 
14
- istek = await self.oturum.get(url)
14
+ istek = await self.httpx.get(url)
15
15
  istek.raise_for_status()
16
16
 
17
17
  file_match = re.search(r'file\":\"([^\"]+)', istek.text)
@@ -21,7 +21,7 @@ class Sobreatsesuyp(ExtractorBase):
21
21
  file_path = file_match[1].replace("\\", "")
22
22
  post_link = f"{self.main_url}/{file_path}"
23
23
 
24
- post_istek = await self.oturum.post(post_link)
24
+ post_istek = await self.httpx.post(post_link)
25
25
  post_istek.raise_for_status()
26
26
 
27
27
  try:
@@ -41,7 +41,7 @@ class Sobreatsesuyp(ExtractorBase):
41
41
  continue
42
42
 
43
43
  playlist_url = f"{self.main_url}/playlist/{file.lstrip('/')}.txt"
44
- playlist_request = await self.oturum.post(playlist_url, headers={"Referer": referer or self.main_url})
44
+ playlist_request = await self.httpx.post(playlist_url, headers={"Referer": referer or self.main_url})
45
45
  playlist_request.raise_for_status()
46
46
 
47
47
  all_results.append(
@@ -9,9 +9,9 @@ class TRsTX(ExtractorBase):
9
9
 
10
10
  async def extract(self, url, referer=None) -> list[ExtractResult]:
11
11
  if referer:
12
- self.oturum.headers.update({"Referer": referer})
12
+ self.httpx.headers.update({"Referer": referer})
13
13
 
14
- istek = await self.oturum.get(url)
14
+ istek = await self.httpx.get(url)
15
15
  istek.raise_for_status()
16
16
 
17
17
  file_match = re.search(r'file\":\"([^\"]+)', istek.text)
@@ -21,7 +21,7 @@ class TRsTX(ExtractorBase):
21
21
  file_path = file_match[1].replace("\\", "")
22
22
  post_link = f"{self.main_url}/{file_path}"
23
23
 
24
- post_istek = await self.oturum.post(post_link)
24
+ post_istek = await self.httpx.post(post_link)
25
25
  post_istek.raise_for_status()
26
26
 
27
27
  try:
@@ -42,7 +42,7 @@ class TRsTX(ExtractorBase):
42
42
  continue
43
43
 
44
44
  playlist_url = f"{self.main_url}/playlist/{file.lstrip('/')}.txt"
45
- playlist_request = await self.oturum.post(playlist_url, headers={"Referer": referer or self.main_url})
45
+ playlist_request = await self.httpx.post(playlist_url, headers={"Referer": referer or self.main_url})
46
46
  playlist_request.raise_for_status()
47
47
 
48
48
  video_data = playlist_request.text
@@ -8,12 +8,12 @@ class TauVideo(ExtractorBase):
8
8
 
9
9
  async def extract(self, url, referer=None) -> list[ExtractResult]:
10
10
  if referer:
11
- self.oturum.headers.update({"Referer": referer})
11
+ self.httpx.headers.update({"Referer": referer})
12
12
 
13
13
  video_key = url.split("/")[-1]
14
14
  api_url = f"{self.main_url}/api/video/{video_key}"
15
15
 
16
- response = await self.oturum.get(api_url)
16
+ response = await self.httpx.get(api_url)
17
17
  response.raise_for_status()
18
18
 
19
19
  api_data = response.json()
@@ -9,9 +9,9 @@ class TurboImgz(ExtractorBase):
9
9
 
10
10
  async def extract(self, url, referer=None) -> ExtractResult:
11
11
  if referer:
12
- self.oturum.headers.update({"Referer": referer})
12
+ self.httpx.headers.update({"Referer": referer})
13
13
 
14
- istek = await self.oturum.get(url)
14
+ istek = await self.httpx.get(url)
15
15
  istek.raise_for_status()
16
16
 
17
17
  if video_match := re.search(r'file: "(.*)",', istek.text):
@@ -10,9 +10,9 @@ class VidMoly(ExtractorBase):
10
10
 
11
11
  async def extract(self, url: str, referer: str = None) -> ExtractResult:
12
12
  if referer:
13
- self.oturum.headers.update({"Referer": referer})
13
+ self.httpx.headers.update({"Referer": referer})
14
14
 
15
- self.oturum.headers.update({
15
+ self.httpx.headers.update({
16
16
  "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
17
17
  "Sec-Fetch-Dest" : "iframe",
18
18
  })
@@ -29,7 +29,7 @@ class VidMoly(ExtractorBase):
29
29
  # Script verisini almak için deneme yap
30
30
  while attempts < 10 and not script_content:
31
31
  attempts += 1
32
- response = await self.oturum.get(embed_url)
32
+ response = await self.httpx.get(embed_url)
33
33
  response.raise_for_status()
34
34
 
35
35
  script_match = re.search(r"sources:\s*\[(.*?)\],", response.text, re.DOTALL)
@@ -10,9 +10,9 @@ class VidMoxy(ExtractorBase):
10
10
 
11
11
  async def extract(self, url, referer=None) -> ExtractResult:
12
12
  if referer:
13
- self.oturum.headers.update({"Referer": referer})
13
+ self.httpx.headers.update({"Referer": referer})
14
14
 
15
- istek = await self.oturum.get(url)
15
+ istek = await self.httpx.get(url)
16
16
  istek.raise_for_status()
17
17
 
18
18
  subtitles = []
@@ -9,18 +9,18 @@ class VideoSeyred(ExtractorBase):
9
9
 
10
10
  async def extract(self, url, referer=None) -> ExtractResult:
11
11
  if referer:
12
- self.oturum.headers.update({"Referer": referer})
12
+ self.httpx.headers.update({"Referer": referer})
13
13
 
14
14
  video_id = url.split("embed/")[1].split("?")[0]
15
15
  if len(video_id) > 10:
16
- kontrol = await self.oturum.get(url)
16
+ kontrol = await self.httpx.get(url)
17
17
  kontrol.raise_for_status()
18
18
 
19
19
  video_id = re.search(r"playlist\/(.*)\.json", kontrol.text)[1]
20
20
 
21
21
  video_url = f"{self.main_url}/playlist/{video_id}.json"
22
22
 
23
- response = await self.oturum.get(video_url)
23
+ response = await self.httpx.get(video_url)
24
24
  response.raise_for_status()
25
25
 
26
26
  try:
@@ -6,8 +6,9 @@ from parsel import Selector
6
6
  import re, urllib.parse, base64, contextlib, asyncio
7
7
 
8
8
  class DiziBox(PluginBase):
9
- name = "DiziBox"
10
- main_url = "https://www.dizibox.live"
9
+ name = "DiziBox"
10
+ main_url = "https://www.dizibox.live"
11
+ description = "Yabancı Dizi izle, Tüm yabancı dizilerin yeni ve eski sezonlarını full hd izleyebileceğiniz elit site."
11
12
 
12
13
  main_page = {
13
14
  f"{main_url}/dizi-arsivi/page/SAYFA/?ulke[]=turkiye&yil=&imdb" : "Yerli",
@@ -38,7 +39,7 @@ class DiziBox(PluginBase):
38
39
  }
39
40
 
40
41
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
41
- istek = await self.oturum.get(
42
+ istek = await self.httpx.get(
42
43
  url = f"{url.replace('SAYFA', str(page))}",
43
44
  cookies = {
44
45
  "LockUser" : "true",
@@ -60,12 +61,12 @@ class DiziBox(PluginBase):
60
61
  ]
61
62
 
62
63
  async def search(self, query: str) -> list[SearchResult]:
63
- self.oturum.cookies.update({
64
+ self.httpx.cookies.update({
64
65
  "LockUser" : "true",
65
66
  "isTrustedUser" : "true",
66
67
  "dbxu" : "1722403730363"
67
68
  })
68
- istek = await self.oturum.get(f"{self.main_url}/?s={query}")
69
+ istek = await self.httpx.get(f"{self.main_url}/?s={query}")
69
70
  secici = Selector(istek.text)
70
71
 
71
72
  return [
@@ -78,7 +79,7 @@ class DiziBox(PluginBase):
78
79
  ]
79
80
 
80
81
  async def load_item(self, url: str) -> SeriesInfo:
81
- istek = await self.oturum.get(url)
82
+ istek = await self.httpx.get(url)
82
83
  secici = Selector(istek.text)
83
84
 
84
85
  title = secici.css("div.tv-overview h1 a::text").get()
@@ -92,7 +93,7 @@ class DiziBox(PluginBase):
92
93
  episodes = []
93
94
  for sezon_link in secici.css("div#seasons-list a::attr(href)").getall():
94
95
  sezon_url = self.fix_url(sezon_link)
95
- sezon_istek = await self.oturum.get(sezon_url)
96
+ sezon_istek = await self.httpx.get(sezon_url)
96
97
  sezon_secici = Selector(sezon_istek.text)
97
98
 
98
99
  for bolum in sezon_secici.css("article.grid-box"):
@@ -128,14 +129,14 @@ class DiziBox(PluginBase):
128
129
 
129
130
  if "/player/king/king.php" in iframe_link:
130
131
  iframe_link = iframe_link.replace("king.php?v=", "king.php?wmode=opaque&v=")
131
- self.oturum.headers.update({"Referer": referer})
132
+ self.httpx.headers.update({"Referer": referer})
132
133
 
133
- istek = await self.oturum.get(iframe_link)
134
+ istek = await self.httpx.get(iframe_link)
134
135
  secici = Selector(istek.text)
135
136
  iframe = secici.css("div#Player iframe::attr(src)").get()
136
137
 
137
- self.oturum.headers.update({"Referer": self.main_url})
138
- istek = await self.oturum.get(iframe)
138
+ self.httpx.headers.update({"Referer": self.main_url})
139
+ istek = await self.httpx.get(iframe)
139
140
 
140
141
  crypt_data = re.search(r"CryptoJS\.AES\.decrypt\(\"(.*)\",\"", istek.text)[1]
141
142
  crypt_pass = re.search(r"\",\"(.*)\"\);", istek.text)[1]
@@ -148,11 +149,11 @@ class DiziBox(PluginBase):
148
149
 
149
150
  elif "/player/moly/moly.php" in iframe_link:
150
151
  iframe_link = iframe_link.replace("moly.php?h=", "moly.php?wmode=opaque&h=")
151
- self.oturum.headers.update({"Referer": referer})
152
+ self.httpx.headers.update({"Referer": referer})
152
153
  while True:
153
154
  await asyncio.sleep(.3)
154
155
  with contextlib.suppress(Exception):
155
- istek = await self.oturum.get(iframe_link)
156
+ istek = await self.httpx.get(iframe_link)
156
157
 
157
158
  if atob_data := re.search(r"unescape\(\"(.*)\"\)", istek.text):
158
159
  decoded_atob = urllib.parse.unquote(atob_data[1])
@@ -170,7 +171,7 @@ class DiziBox(PluginBase):
170
171
  return results
171
172
 
172
173
  async def load_links(self, url: str) -> list[str]:
173
- istek = await self.oturum.get(url)
174
+ istek = await self.httpx.get(url)
174
175
  secici = Selector(istek.text)
175
176
 
176
177
  iframes = []
@@ -185,8 +186,8 @@ class DiziBox(PluginBase):
185
186
  if not alt_link:
186
187
  continue
187
188
 
188
- self.oturum.headers.update({"Referer": url})
189
- alt_istek = await self.oturum.get(alt_link)
189
+ self.httpx.headers.update({"Referer": url})
190
+ alt_istek = await self.httpx.get(alt_link)
190
191
  alt_istek.raise_for_status()
191
192
 
192
193
  alt_secici = Selector(alt_istek.text)
@@ -9,7 +9,7 @@ class DiziYou(PluginBase):
9
9
  main_url = "https://www.diziyou1.com"
10
10
 
11
11
  async def search(self, query: str) -> list[SearchResult]:
12
- istek = await self.oturum.get(f"{self.main_url}/?s={query}")
12
+ istek = await self.httpx.get(f"{self.main_url}/?s={query}")
13
13
  secici = Selector(istek.text)
14
14
 
15
15
  return [
@@ -22,7 +22,7 @@ class DiziYou(PluginBase):
22
22
  ]
23
23
 
24
24
  async def load_item(self, url: str) -> SeriesInfo:
25
- istek = await self.oturum.get(url)
25
+ istek = await self.httpx.get(url)
26
26
  secici = Selector(istek.text)
27
27
 
28
28
  title = secici.css("h1::text").get().strip()
@@ -68,7 +68,7 @@ class DiziYou(PluginBase):
68
68
  )
69
69
 
70
70
  async def load_links(self, url: str) -> list[str]:
71
- istek = await self.oturum.get(url)
71
+ istek = await self.httpx.get(url)
72
72
  secici = Selector(istek.text)
73
73
 
74
74
  item_title = secici.css("div.title h1::text").get()
@@ -10,22 +10,22 @@ class Dizilla(PluginBase):
10
10
  main_url = "https://dizilla.club"
11
11
 
12
12
  async def search(self, query: str) -> list[SearchResult]:
13
- ilk_istek = await self.oturum.get(self.main_url)
13
+ ilk_istek = await self.httpx.get(self.main_url)
14
14
  ilk_secici = Selector(ilk_istek.text)
15
15
  cKey = ilk_secici.css("input[name='cKey']::attr(value)").get()
16
16
  cValue = ilk_secici.css("input[name='cValue']::attr(value)").get()
17
17
 
18
- self.oturum.headers.update({
18
+ self.httpx.headers.update({
19
19
  "Accept" : "application/json, text/javascript, */*; q=0.01",
20
20
  "X-Requested-With" : "XMLHttpRequest",
21
21
  "Referer" : f"{self.main_url}/"
22
22
  })
23
- self.oturum.cookies.update({
23
+ self.httpx.cookies.update({
24
24
  "showAllDaFull" : "true",
25
25
  "PHPSESSID" : ilk_istek.cookies.get("PHPSESSID"),
26
26
  })
27
27
 
28
- arama_istek = await self.oturum.post(
28
+ arama_istek = await self.httpx.post(
29
29
  url = f"{self.main_url}/bg/searchcontent",
30
30
  data = {
31
31
  "cKey" : cKey,
@@ -55,7 +55,7 @@ class Dizilla(PluginBase):
55
55
  return urlunparse(yeni_url)
56
56
 
57
57
  async def load_item(self, url: str) -> SeriesInfo:
58
- istek = await self.oturum.get(url)
58
+ istek = await self.httpx.get(url)
59
59
  secici = Selector(istek.text)
60
60
  veri = loads(secici.xpath("//script[@type='application/ld+json']/text()").getall()[-1])
61
61
 
@@ -94,12 +94,12 @@ class Dizilla(PluginBase):
94
94
  )
95
95
 
96
96
  async def load_links(self, url: str) -> list[str]:
97
- istek = await self.oturum.get(url)
97
+ istek = await self.httpx.get(url)
98
98
  secici = Selector(istek.text)
99
99
 
100
100
  iframes = [self.fix_url(secici.css("div#playerLsDizilla iframe::attr(src)").get())]
101
101
  for alternatif in secici.css("a[href*='player']"):
102
- alt_istek = await self.oturum.get(self.fix_url(alternatif.css("::attr(href)").get()))
102
+ alt_istek = await self.httpx.get(self.fix_url(alternatif.css("::attr(href)").get()))
103
103
  alt_secici = Selector(alt_istek.text)
104
104
  iframes.append(self.fix_url(alt_secici.css("div#playerLsDizilla iframe::attr(src)").get()))
105
105
 
@@ -8,7 +8,7 @@ class FilmMakinesi(PluginBase):
8
8
  main_url = "https://filmmakinesi.de"
9
9
 
10
10
  async def search(self, query: str) -> list[SearchResult]:
11
- istek = await self.oturum.get(f"{self.main_url}/?s={query}")
11
+ istek = await self.httpx.get(f"{self.main_url}/?s={query}")
12
12
  secici = Selector(istek.text)
13
13
 
14
14
  results = []
@@ -29,7 +29,7 @@ class FilmMakinesi(PluginBase):
29
29
  return results
30
30
 
31
31
  async def load_item(self, url: str) -> MovieInfo:
32
- istek = await self.oturum.get(url)
32
+ istek = await self.httpx.get(url)
33
33
  secici = Selector(istek.text)
34
34
 
35
35
  title = secici.css("h1.single_h1 a::text").get().strip()
@@ -58,7 +58,7 @@ class FilmMakinesi(PluginBase):
58
58
  )
59
59
 
60
60
  async def load_links(self, url: str) -> list[str]:
61
- istek = await self.oturum.get(url)
61
+ istek = await self.httpx.get(url)
62
62
  secici = Selector(istek.text)
63
63
 
64
64
  iframe_src = secici.css("div.player-div iframe::attr(src)").get() or secici.css("div.player-div iframe::attr(data-src)").get()
@@ -11,7 +11,7 @@ class FullHDFilmizlesene(PluginBase):
11
11
  main_url = "https://www.fullhdfilmizlesene.de"
12
12
 
13
13
  async def search(self, query: str) -> list[SearchResult]:
14
- istek = await self.oturum.get(f"{self.main_url}/arama/{query}")
14
+ istek = await self.httpx.get(f"{self.main_url}/arama/{query}")
15
15
  secici = Selector(istek.text)
16
16
 
17
17
  results = []
@@ -32,7 +32,7 @@ class FullHDFilmizlesene(PluginBase):
32
32
  return results
33
33
 
34
34
  async def load_item(self, url: str) -> MovieInfo:
35
- istek = await self.oturum.get(url)
35
+ istek = await self.httpx.get(url)
36
36
  secici = Selector(istek.text)
37
37
 
38
38
  title = secici.xpath("normalize-space(//div[@class='izle-titles'])").get().strip()
@@ -57,7 +57,7 @@ class FullHDFilmizlesene(PluginBase):
57
57
  )
58
58
 
59
59
  async def load_links(self, url: str) -> list[str]:
60
- istek = await self.oturum.get(url)
60
+ istek = await self.httpx.get(url)
61
61
  secici = Selector(istek.text)
62
62
 
63
63
  script = secici.xpath("(//script)[1]").get()
@@ -1,22 +1,22 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
3
  from KekikStream.Core import PluginBase, SearchResult, MovieInfo, ExtractResult, Subtitle
4
- from Kekik.Sifreleme import Packer, HexCodec
5
4
  from parsel import Selector
6
- import re, base64, random, string
5
+ import random, string
7
6
 
8
- class HdFilmCehennemi(PluginBase):
9
- name = "HdFilmCehennemi"
7
+ class HDFilmCehennemi(PluginBase):
8
+ name = "HDFilmCehennemi"
10
9
  main_url = "https://www.hdfilmcehennemi.nl"
11
-
12
10
 
13
11
  async def search(self, query: str) -> list[SearchResult]:
14
- istek = await self.oturum.get(
12
+ istek = await self.httpx.get(
15
13
  url = f"{self.main_url}/search?q={query}",
16
- headers = {"Referer": f"{self.main_url}/", "X-Requested-With": "fetch", "authority": f"{self.main_url}"}
14
+ headers = {
15
+ "Referer" : f"{self.main_url}/",
16
+ "X-Requested-With" : "fetch",
17
+ "authority" : f"{self.main_url}"
18
+ }
17
19
  )
18
-
19
- secici = Selector(istek.text)
20
20
 
21
21
  results = []
22
22
  for veri in istek.json().get("results"):
@@ -37,7 +37,7 @@ class HdFilmCehennemi(PluginBase):
37
37
  return results
38
38
 
39
39
  async def load_item(self, url: str) -> MovieInfo:
40
- istek = await self.oturum.get(url, headers = {"Referer": f"{self.main_url}/"})
40
+ istek = await self.httpx.get(url, headers = {"Referer": f"{self.main_url}/"})
41
41
  secici = Selector(istek.text)
42
42
 
43
43
  title = secici.css("h1.section-title::text").get().strip()
@@ -48,13 +48,13 @@ class HdFilmCehennemi(PluginBase):
48
48
  year = secici.css("div.post-info-year-country a::text").get().strip()
49
49
  actors = secici.css("div.post-info-cast a > strong::text").getall()
50
50
  duration = secici.css("div.post-info-duration::text").get().replace("dakika", "").strip()
51
+
51
52
 
52
- duration_minutes = 0
53
53
  try:
54
- duration_minutes = int(duration[2:-1])
55
- except Exception as ex:
56
- pass
57
-
54
+ duration_minutes = int(duration[2:-1])
55
+ except Exception:
56
+ duration_minutes = 0
57
+
58
58
  return MovieInfo(
59
59
  url = url,
60
60
  poster = self.fix_url(poster),
@@ -68,87 +68,90 @@ class HdFilmCehennemi(PluginBase):
68
68
  )
69
69
 
70
70
  def generate_random_cookie(self):
71
- return ''.join(random.choices(string.ascii_letters + string.digits, k=16))
71
+ return "".join(random.choices(string.ascii_letters + string.digits, k=16))
72
72
 
73
73
  async def load_links(self, url: str) -> list[str]:
74
74
  self._data.clear()
75
75
 
76
- istek = await self.oturum.get(url)
76
+ istek = await self.httpx.get(url)
77
77
  secici = Selector(istek.text)
78
78
 
79
79
  lang_code = secici.css("div.alternative-links::attr(data-lang)").get().upper()
80
- buttons = secici.css("div.alternative-links > button")
81
-
80
+ buttons = secici.css("div.alternative-links > button")
81
+
82
82
  link_list = []
83
-
83
+
84
84
  for button in buttons:
85
- source = button.css("button.alternative-link::text").get().replace("(HDrip Xbet)", "").strip() + " " + lang_code
85
+ source = button.css("button.alternative-link::text").get().replace("(HDrip Xbet)", "").strip() + " " + lang_code
86
86
  video_id = button.css("button.alternative-link::attr(data-video)").get()
87
-
88
- istek = await self.oturum.get(
87
+
88
+ istek = await self.httpx.get(
89
89
  url = f"{self.main_url}/video/{video_id}/",
90
- headers = {"Referer": f"{self.main_url}/",
91
- "X-Requested-With": "fetch",
92
- "authority": f"{self.main_url}"}
90
+ headers = {
91
+ "Referer" : f"{self.main_url}/",
92
+ "X-Requested-With" : "fetch",
93
+ "authority" : f"{self.main_url}"
94
+ }
93
95
  )
94
96
 
95
- data = istek.json().get("data")
96
- secici = Selector(data["html"])
97
+ data = istek.json().get("data")
98
+ secici = Selector(data["html"])
97
99
  iframe_url = secici.css("iframe::attr(src)").get() or secici.css("iframe::attr(data-src)").get()
98
-
100
+
99
101
  if "?rapidrame_id=" in iframe_url:
100
102
  # https://hdfilmcehennemi.mobi/video/embed/uQcCR9nhaNz/?rapidrame_id=j4b4kvc0s24l\
101
- video_id = iframe_url.split('=')[1]
103
+ video_id = iframe_url.split("=")[1]
102
104
  else:
103
105
  # https://www.hdfilmcehennemi.nl/rplayer/j4b4kvc0s24l/
104
- video_id = iframe_url.split('/')[-1]
105
-
106
- print(video_id)
106
+ video_id = iframe_url.split("/")[-1]
107
+
108
+ # print(video_id)
107
109
  if(video_id):
108
110
  break
109
111
 
110
112
  # selected_quality: low
111
- random_cookie = self.generate_random_cookie()
112
- istek = await self.oturum.post(
113
- url = f"https://cehennempass.pw/process_quality_selection.php",
114
- headers = {"Referer": f"https://cehennempass.pw/download/{video_id}",
115
- "X-Requested-With": "fetch",
116
- "authority": "cehennempass.pw",
117
- 'Cookie': f'PHPSESSID={random_cookie}'},
118
- data = {"video_id": video_id, "selected_quality": "low"},
119
- )
113
+ istek = await self.httpx.post(
114
+ url = "https://cehennempass.pw/process_quality_selection.php",
115
+ headers = {
116
+ "Referer" : f"https://cehennempass.pw/download/{video_id}",
117
+ "X-Requested-With" : "fetch",
118
+ "authority" : "cehennempass.pw",
119
+ "Cookie" : f"PHPSESSID={self.generate_random_cookie()}"
120
+ },
121
+ data = {"video_id": video_id, "selected_quality": "low"},
122
+ )
120
123
 
121
124
  video_url = istek.json().get("download_link")
122
125
  # print(video_url)
123
126
 
124
127
  self._data[self.fix_url(video_url)] = {
125
- "ext_name" : self.name,
128
+ "ext_name" : f"{self.name} | Düşük Kalite",
126
129
  "name" : "Düşük Kalite",
127
130
  "referer" : f"https://cehennempass.pw/download/{video_id}",
128
131
  "subtitles" : []
129
132
  }
130
133
 
131
134
  # selected_quality: high
132
- random_cookie = self.generate_random_cookie()
133
- istek = await self.oturum.post(
134
- url = f"https://cehennempass.pw/process_quality_selection.php",
135
- headers = {"Referer": f"https://cehennempass.pw/download/{video_id}",
136
- "X-Requested-With": "fetch",
137
- "authority": "cehennempass.pw",
138
- 'Cookie': f'PHPSESSID={random_cookie}'},
139
- data = {"video_id": video_id, "selected_quality": "high"},
140
- )
135
+ istek = await self.httpx.post(
136
+ url = "https://cehennempass.pw/process_quality_selection.php",
137
+ headers = {
138
+ "Referer" : f"https://cehennempass.pw/download/{video_id}",
139
+ "X-Requested-With" : "fetch",
140
+ "authority" : "cehennempass.pw",
141
+ "Cookie" : f"PHPSESSID={self.generate_random_cookie()}"
142
+ },
143
+ data = {"video_id": video_id, "selected_quality": "high"},
144
+ )
141
145
 
142
146
  video_url = istek.json().get("download_link")
143
- # print(video_url)
144
147
 
145
148
  self._data[self.fix_url(video_url)] = {
146
- "ext_name" : self.name,
149
+ "ext_name" : f"{self.name} | Yüksek Kalite",
147
150
  "name" : "Yüksek Kalite",
148
151
  "referer" : f"https://cehennempass.pw/download/{video_id}",
149
152
  "subtitles" : []
150
153
  }
151
-
154
+
152
155
  return list(self._data.keys())
153
156
 
154
157
  async def play(self, name: str, url: str, referer: str, subtitles: list[Subtitle]):
@@ -8,7 +8,7 @@ class JetFilmizle(PluginBase):
8
8
  main_url = "https://jetfilmizle.io"
9
9
 
10
10
  async def search(self, query: str) -> list[SearchResult]:
11
- istek = await self.oturum.post(
11
+ istek = await self.httpx.post(
12
12
  url = f"{self.main_url}/filmara.php",
13
13
  data = {"s": query},
14
14
  headers = {"Referer": f"{self.main_url}/"}
@@ -33,7 +33,7 @@ class JetFilmizle(PluginBase):
33
33
  return results
34
34
 
35
35
  async def load_item(self, url: str) -> MovieInfo:
36
- istek = await self.oturum.get(url)
36
+ istek = await self.httpx.get(url)
37
37
  secici = Selector(istek.text)
38
38
 
39
39
  title = self.clean_title(secici.css("div.movie-exp-title::text").get())
@@ -56,7 +56,7 @@ class JetFilmizle(PluginBase):
56
56
  )
57
57
 
58
58
  async def load_links(self, url: str) -> list[str]:
59
- istek = await self.oturum.get(url)
59
+ istek = await self.httpx.get(url)
60
60
  secici = Selector(istek.text)
61
61
 
62
62
  iframes = []
@@ -68,7 +68,7 @@ class JetFilmizle(PluginBase):
68
68
  if not part_href:
69
69
  continue
70
70
 
71
- part_istek = await self.oturum.get(part_href)
71
+ part_istek = await self.httpx.get(part_href)
72
72
  part_secici = Selector(part_istek.text)
73
73
 
74
74
  if iframe := part_secici.css("div#movie iframe::attr(data-src), div#movie iframe::attr(data), div#movie iframe::attr(src)").get():
@@ -81,7 +81,7 @@ class JetFilmizle(PluginBase):
81
81
  processed_iframes = []
82
82
  for iframe in iframes:
83
83
  if "jetv.xyz" in iframe:
84
- jetv_istek = await self.oturum.get(iframe)
84
+ jetv_istek = await self.httpx.get(iframe)
85
85
  jetv_secici = Selector(jetv_istek.text)
86
86
 
87
87
  if jetv_iframe := jetv_secici.css("iframe::attr(src)").get():
@@ -8,7 +8,7 @@ class SezonlukDizi(PluginBase):
8
8
  main_url = "https://sezonlukdizi6.com"
9
9
 
10
10
  async def search(self, query: str) -> list[SearchResult]:
11
- istek = await self.oturum.get(f"{self.main_url}/diziler.asp?adi={query}")
11
+ istek = await self.httpx.get(f"{self.main_url}/diziler.asp?adi={query}")
12
12
  secici = Selector(istek.text)
13
13
 
14
14
  return [
@@ -21,7 +21,7 @@ class SezonlukDizi(PluginBase):
21
21
  ]
22
22
 
23
23
  async def load_item(self, url: str) -> SeriesInfo:
24
- istek = await self.oturum.get(url)
24
+ istek = await self.httpx.get(url)
25
25
  secici = Selector(istek.text)
26
26
 
27
27
  title = secici.css("div.header::text").get().strip()
@@ -32,14 +32,14 @@ class SezonlukDizi(PluginBase):
32
32
  rating = secici.css("div.dizipuani a div::text").re_first(r"[\d.,]+")
33
33
  actors = []
34
34
 
35
- actors_istek = await self.oturum.get(f"{self.main_url}/oyuncular/{url.split('/')[-1]}")
35
+ actors_istek = await self.httpx.get(f"{self.main_url}/oyuncular/{url.split('/')[-1]}")
36
36
  actors_secici = Selector(actors_istek.text)
37
37
  actors = [
38
38
  actor.css("div.header::text").get().strip()
39
39
  for actor in actors_secici.css("div.doubling div.ui")
40
40
  ]
41
41
 
42
- episodes_istek = await self.oturum.get(f"{self.main_url}/bolumler/{url.split('/')[-1]}")
42
+ episodes_istek = await self.httpx.get(f"{self.main_url}/bolumler/{url.split('/')[-1]}")
43
43
  episodes_secici = Selector(episodes_istek.text)
44
44
  episodes = []
45
45
 
@@ -72,7 +72,7 @@ class SezonlukDizi(PluginBase):
72
72
  )
73
73
 
74
74
  async def load_links(self, url: str) -> list[str]:
75
- istek = await self.oturum.get(url)
75
+ istek = await self.httpx.get(url)
76
76
  secici = Selector(istek.text)
77
77
 
78
78
  bid = secici.css("div#dilsec::attr(data-id)").get()
@@ -81,7 +81,7 @@ class SezonlukDizi(PluginBase):
81
81
 
82
82
  links = []
83
83
  for dil, label in [("1", "AltYazı"), ("0", "Dublaj")]:
84
- dil_istek = await self.oturum.post(
84
+ dil_istek = await self.httpx.post(
85
85
  url = f"{self.main_url}/ajax/dataAlternatif22.asp",
86
86
  headers = {"X-Requested-With": "XMLHttpRequest"},
87
87
  data = {"bid": bid, "dil": dil},
@@ -94,7 +94,7 @@ class SezonlukDizi(PluginBase):
94
94
 
95
95
  if dil_json.get("status") == "success":
96
96
  for veri in dil_json.get("data", []):
97
- veri_response = await self.oturum.post(
97
+ veri_response = await self.httpx.post(
98
98
  url = f"{self.main_url}/ajax/dataEmbed22.asp",
99
99
  headers = {"X-Requested-With": "XMLHttpRequest"},
100
100
  data = {"id": veri.get("id")},
@@ -69,18 +69,18 @@ class Shorten(PluginBase):
69
69
  token = None
70
70
 
71
71
  async def __giris(self):
72
- await self.oturum.get(f"{self.main_url}/tr", follow_redirects=True)
72
+ await self.httpx.get(f"{self.main_url}/tr", follow_redirects=True)
73
73
 
74
- self.token = await self.oturum.get(f"{self.main_url}/api/session")
74
+ self.token = await self.httpx.get(f"{self.main_url}/api/session")
75
75
  self.token = self.token.json().get("token")
76
76
 
77
- self.oturum.headers.update({"Authorization": f"Bearer {self.token}"})
77
+ self.httpx.headers.update({"Authorization": f"Bearer {self.token}"})
78
78
 
79
79
  async def raw_diziler(self):
80
80
  if not self.token:
81
81
  await self.__giris()
82
82
 
83
- veriler = await self.oturum.get("https://api.shorten.watch/api/series/you-might-like?page=1&per_page=100")
83
+ veriler = await self.httpx.get("https://api.shorten.watch/api/series/you-might-like?page=1&per_page=100")
84
84
  veriler = veriler.json()
85
85
 
86
86
  return [
@@ -94,7 +94,7 @@ class Shorten(PluginBase):
94
94
  if not self.token:
95
95
  await self.__giris()
96
96
 
97
- istek = await self.oturum.get(f"{self.main_url}/tr/series/{slug}", follow_redirects=True)
97
+ istek = await self.httpx.get(f"{self.main_url}/tr/series/{slug}", follow_redirects=True)
98
98
  veriler = await extract_next_f_push_data(istek.text)
99
99
  veriler = veriler["8"][-1]["children"][-2][-1]["children"][-1]["data"]
100
100
  return [
@@ -128,7 +128,7 @@ class Shorten(PluginBase):
128
128
  raw_req = await self.raw_bolumler(slug)
129
129
  number, _hash = raw_req[0].values()
130
130
 
131
- istek = await self.oturum.get(f"{self.main_url}/tr/series/{slug}/episode-{number}-{_hash}", follow_redirects=True)
131
+ istek = await self.httpx.get(f"{self.main_url}/tr/series/{slug}/episode-{number}-{_hash}", follow_redirects=True)
132
132
  veriler = await extract_next_f_push_data(istek.text)
133
133
  veriler = veriler["b"][3]["children"][1][3]["children"][3]["children"][3]["children"][-1]
134
134
 
@@ -3,8 +3,9 @@
3
3
  from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, Episode, SeriesInfo, ExtractResult, Subtitle
4
4
 
5
5
  class SineWix(PluginBase):
6
- name = "SineWix"
7
- main_url = "https://ythls.kekikakademi.org"
6
+ name = "SineWix"
7
+ main_url = "https://ythls.kekikakademi.org"
8
+ description = "Sinewix | Ücretsiz Film - Dizi - Anime İzleme Uygulaması"
8
9
 
9
10
  main_page = {
10
11
  f"{main_url}/sinewix/movies" : "Filmler",
@@ -32,7 +33,7 @@ class SineWix(PluginBase):
32
33
  }
33
34
 
34
35
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
35
- istek = await self.oturum.get(f"{url}/{page}")
36
+ istek = await self.httpx.get(f"{url}/{page}")
36
37
  veriler = istek.json()
37
38
 
38
39
  return [
@@ -46,7 +47,7 @@ class SineWix(PluginBase):
46
47
  ]
47
48
 
48
49
  async def search(self, query: str) -> list[SearchResult]:
49
- istek = await self.oturum.get(f"{self.main_url}/sinewix/search/{query}")
50
+ istek = await self.httpx.get(f"{self.main_url}/sinewix/search/{query}")
50
51
 
51
52
  return [
52
53
  SearchResult(
@@ -61,7 +62,7 @@ class SineWix(PluginBase):
61
62
  item_type = url.split("?type=")[-1].split("&id=")[0]
62
63
  item_id = url.split("&id=")[-1]
63
64
 
64
- istek = await self.oturum.get(f"{self.main_url}/sinewix/{item_type}/{item_id}")
65
+ istek = await self.httpx.get(f"{self.main_url}/sinewix/{item_type}/{item_id}")
65
66
  veri = istek.json()
66
67
 
67
68
  match item_type:
@@ -123,7 +124,7 @@ class SineWix(PluginBase):
123
124
  if not url.startswith(self.main_url):
124
125
  return [url]
125
126
 
126
- istek = await self.oturum.get(url)
127
+ istek = await self.httpx.get(url)
127
128
  veri = istek.json()
128
129
 
129
130
  org_title = veri.get("title")
@@ -8,7 +8,7 @@ class UgurFilm(PluginBase):
8
8
  main_url = "https://ugurfilm8.com"
9
9
 
10
10
  async def search(self, query: str) -> list[SearchResult]:
11
- istek = await self.oturum.get(f"{self.main_url}/?s={query}")
11
+ istek = await self.httpx.get(f"{self.main_url}/?s={query}")
12
12
  secici = Selector(istek.text)
13
13
 
14
14
  results = []
@@ -29,7 +29,7 @@ class UgurFilm(PluginBase):
29
29
  return results
30
30
 
31
31
  async def load_item(self, url: str) -> MovieInfo:
32
- istek = await self.oturum.get(url)
32
+ istek = await self.httpx.get(url)
33
33
  secici = Selector(istek.text)
34
34
 
35
35
  title = secici.css("div.bilgi h2::text").get().strip()
@@ -50,12 +50,12 @@ class UgurFilm(PluginBase):
50
50
  )
51
51
 
52
52
  async def load_links(self, url: str) -> list[str]:
53
- istek = await self.oturum.get(url)
53
+ istek = await self.httpx.get(url)
54
54
  secici = Selector(istek.text)
55
55
  results = []
56
56
 
57
57
  for part_link in secici.css("li.parttab a::attr(href)").getall():
58
- sub_response = await self.oturum.get(part_link)
58
+ sub_response = await self.httpx.get(part_link)
59
59
  sub_selector = Selector(sub_response.text)
60
60
 
61
61
  iframe = sub_selector.css("div#vast iframe::attr(src)").get()
@@ -65,7 +65,7 @@ class UgurFilm(PluginBase):
65
65
  "alternative" : "vidmoly",
66
66
  "ord" : "0",
67
67
  }
68
- player_response = await self.oturum.post(
68
+ player_response = await self.httpx.post(
69
69
  url = f"{self.main_url}/player/ajax_sources.php",
70
70
  data = post_data
71
71
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: KekikStream
3
- Version: 1.2.2
3
+ Version: 1.2.4
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
@@ -0,0 +1,62 @@
1
+ KekikStream/__init__.py,sha256=T6b93GPnam4ww2tOU2dZaS-WHKwCEXqNAaRh6Lrg4Kw,15477
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/__init__.py,sha256=4ykq-DBlbbfjGAd5m2AZfuljTLBFYkI8DPLxV03AAcA,673
7
+ KekikStream/Core/Extractor/ExtractorBase.py,sha256=7dmYh5e1Za5N_pLJrTZRuwFh-CqwGc0YJOBWf5dirjc,1724
8
+ KekikStream/Core/Extractor/ExtractorLoader.py,sha256=ecrfz9mYizlENCjbyfjdfnOrQorxQTF4ZFGhPpU6JHk,4193
9
+ KekikStream/Core/Extractor/ExtractorManager.py,sha256=4L1H3jiTnf0kTq4W6uS7n95bBYHlKJ8_hh0og8z4erQ,1244
10
+ KekikStream/Core/Extractor/ExtractorModels.py,sha256=huIcPQ5VIRfMx0LcL5SS1u4dldZbHjzHKEdSEtOPlc0,456
11
+ KekikStream/Core/Media/MediaHandler.py,sha256=AJNPTXgxWykfDMyZIyGSjWl3Vp0salT8lKDrfAwaga4,6936
12
+ KekikStream/Core/Media/MediaManager.py,sha256=9ItiUguOkk3wg3YY5uf3mrjfwLPCvggnP8QviX0uiuE,526
13
+ KekikStream/Core/Plugin/PluginBase.py,sha256=RtIskTR2N05cBE5ivLb8jUX5XftNLTMEnc_KXWNEKco,2910
14
+ KekikStream/Core/Plugin/PluginLoader.py,sha256=2UM3gNcEgd7k-FxG-JB5nTIS0K_clzvFtzGjMA_Sx7Q,3379
15
+ KekikStream/Core/Plugin/PluginManager.py,sha256=CZVg1eegi8vfMfccx0DRV0Box8kXz-aoULTQLgbPbvM,893
16
+ KekikStream/Core/Plugin/PluginModels.py,sha256=ZZJUXbC0G2k0DU7Wpbf0rwjn7spywpiaLIHE7kLajhk,2533
17
+ KekikStream/Core/UI/UIManager.py,sha256=T4V_kdTTWa-UDamgLSKa__dWJuzcvRK9NuwBlzU9Bzc,1693
18
+ KekikStream/Extractors/CloseLoad.py,sha256=q464dRwlNH347EcznyPvgWfMgDDgWI62cwT32HqZqpg,988
19
+ KekikStream/Extractors/ContentX.py,sha256=u1sDdM79MNx9OdPTPcAA0OQDS7537IO8aJlffxhMi8c,2976
20
+ KekikStream/Extractors/FourCX.py,sha256=4FrMj1IZBBpN_g1P6S3A-8eUu7QFwlt4fJXzJ7vfe0Q,221
21
+ KekikStream/Extractors/FourPichive.py,sha256=iq3BCUbih1UVF4y4BIWO--0hX5jP2nxqesNx3MGP3kQ,234
22
+ KekikStream/Extractors/FourPlayRu.py,sha256=wq1ylxKpsO_IBoYr_ALzB2dVrQpJ-jY9lf2zPhcAZX8,228
23
+ KekikStream/Extractors/HDStreamAble.py,sha256=66n5EvIdX_or5cdnlJ_Uqmzi50n4rl9c5VCw8kBqhQk,245
24
+ KekikStream/Extractors/Hotlinger.py,sha256=NFMRgUmb6BCrJfa7Hi0VarDNYvCeVknBWEk24FKBBa0,224
25
+ KekikStream/Extractors/MailRu.py,sha256=HH89V4GdQChG2TnIimqNbd5dGWco0bdrSGpLudt5WGs,1306
26
+ KekikStream/Extractors/MixPlayHD.py,sha256=POV_yq3KoZ6S6EqFsKYULEBz92NdUa2BpYKNo0eNQH8,1552
27
+ KekikStream/Extractors/MolyStream.py,sha256=aJZL1SE40gB5KeShu-TV5IWNICHCtAXY87F0wqYrw1k,604
28
+ KekikStream/Extractors/Odnoklassniki.py,sha256=TZOJyti05ch62QCUTKUzKNKmjzwGZYVpLWbmp92QTO4,3590
29
+ KekikStream/Extractors/OkRuHTTP.py,sha256=L-B0i_i_Vnm61GvUfd6cGIW-o_H4M-C7DO_cdw2rQPU,228
30
+ KekikStream/Extractors/OkRuSSL.py,sha256=FHJ5XZ1dO5ED3mIku3e3vnq8K0slrcr0jqhaUnHmfVk,227
31
+ KekikStream/Extractors/PeaceMakerst.py,sha256=ZKk454eNZpeamht61UH9yMYe00_zGb3MSyujfDlbVDc,2096
32
+ KekikStream/Extractors/Pichive.py,sha256=BSVYFwL3Ax6yGoS1WkpOWtngxNyuZLoKzpPwjibpu2s,221
33
+ KekikStream/Extractors/PixelDrain.py,sha256=WAlxFHwDYFZd7E3M-wTBkOSzDLbaLpX4J7r1zzlfJVo,991
34
+ KekikStream/Extractors/PlayRu.py,sha256=DQMZyCSJwLkrh-gfDD8T1DvUFNBAKUXpByeCAWuK6YY,215
35
+ KekikStream/Extractors/RapidVid.py,sha256=nTND3zuH105oeO359gltKKE9n35YLQsM9Crg17G7L0c,2367
36
+ KekikStream/Extractors/SibNet.py,sha256=tKo2y_JL0Es-B1mNSMk7IDeFTkk0CmMBZTKwWOy59ho,876
37
+ KekikStream/Extractors/Sobreatsesuyp.py,sha256=qlSQHUHjTjBoY0nsuZQWAjnfswbPORkBg6rUuP7SagA,2000
38
+ KekikStream/Extractors/TRsTX.py,sha256=mbSRGnQt26a73SbqwtY9rpiYFwgRgVbvA6bkGb_PvP8,2152
39
+ KekikStream/Extractors/TauVideo.py,sha256=2ai9BwwM6qlCgxK7E0B642LtOF5y4hEb9tQ2aDpbMtc,1112
40
+ KekikStream/Extractors/TurboImgz.py,sha256=nnWnP1K4JZbMj6S-YuXxej31UZtF4JcboSW4n7A4A5c,824
41
+ KekikStream/Extractors/VidMoly.py,sha256=O6F_82E-LeFVOgSw-ot91B1ZP8pqqt1jZ5pmkwklWGY,3526
42
+ KekikStream/Extractors/VidMolyMe.py,sha256=ogLiFUJVqFbhtzQrZ1gSB9me85DiHvntjWtSvidYVS8,218
43
+ KekikStream/Extractors/VidMoxy.py,sha256=T1iqfyOasRxoepmuWAmXeVW6E7M1O18KG3264KUSzc0,1798
44
+ KekikStream/Extractors/VideoSeyred.py,sha256=M6QPZ_isX9vM_7LPo-2I_8Cf1vB9awHw8vvzBODtoiQ,1977
45
+ KekikStream/Plugins/DiziBox.py,sha256=8bLw6XtHadJtNhpz1DIYv2I9g1qzyBBYR0nWuU4UF3c,9232
46
+ KekikStream/Plugins/DiziYou.py,sha256=1e-NTWgg-yP2lDFzYLevKNMX8Da5pScKyIWRiO2fMb0,5666
47
+ KekikStream/Plugins/Dizilla.py,sha256=xDd3xxXFeY-k1L0sYSZIJB6RSrMEckuu8wIfbNdYLJA,4250
48
+ KekikStream/Plugins/FilmMakinesi.py,sha256=nDmUk-yVlP_F8r7rYtOGq5zMJrdZCCC_KO5K-edJsKA,2819
49
+ KekikStream/Plugins/FullHDFilmizlesene.py,sha256=cOl7HVl4pNgHX8IS7ZkAJE6KFiYOQw4MppaAwBTwQlo,3077
50
+ KekikStream/Plugins/HDFilmCehennemi.py,sha256=xpMwoCqG-HwtAdP3j4DsudqjUuEuAbxZp8fwXWZNn5o,6670
51
+ KekikStream/Plugins/JetFilmizle.py,sha256=vXt0AIs1XMqxIlD_BnoTxQse2fzVROpdplQCtbFRBQw,3911
52
+ KekikStream/Plugins/RecTV.py,sha256=TYpV6T7U8TkkHYB3XK0xqar0pKlULXdztvK4TDc9734,5106
53
+ KekikStream/Plugins/SezonlukDizi.py,sha256=hKzO0Y0ypHEutmUM9c91x8e8vzRQ_zxpnwY0rhswxxI,4437
54
+ KekikStream/Plugins/Shorten.py,sha256=arakUY8ampyA408MYzikPp0VSYUvI8scPEkuZefEnyE,8852
55
+ KekikStream/Plugins/SineWix.py,sha256=AX69mbqnhsntpJEKJfkG88jwv7fKzfrdGtJ8ezpUuBk,6920
56
+ KekikStream/Plugins/UgurFilm.py,sha256=C9ZIUNBJJfBwgeS5-b7o-Dn07M8aXiNrNzutH6biTXw,2925
57
+ kekikstream-1.2.4.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
58
+ kekikstream-1.2.4.dist-info/METADATA,sha256=D_qOzKNyku5KyPkWmnhxxRmEf-EV4DSMAdAtxSWenh4,4508
59
+ kekikstream-1.2.4.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
60
+ kekikstream-1.2.4.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
61
+ kekikstream-1.2.4.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
62
+ kekikstream-1.2.4.dist-info/RECORD,,
@@ -1,62 +0,0 @@
1
- KekikStream/__init__.py,sha256=T6b93GPnam4ww2tOU2dZaS-WHKwCEXqNAaRh6Lrg4Kw,15477
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/__init__.py,sha256=4ykq-DBlbbfjGAd5m2AZfuljTLBFYkI8DPLxV03AAcA,673
7
- KekikStream/Core/Extractor/ExtractorBase.py,sha256=ZyasO5m7iAsnh-mwhtlp-VXkZ4pIuWuHvCIskBX7FUg,1726
8
- KekikStream/Core/Extractor/ExtractorLoader.py,sha256=ecrfz9mYizlENCjbyfjdfnOrQorxQTF4ZFGhPpU6JHk,4193
9
- KekikStream/Core/Extractor/ExtractorManager.py,sha256=4L1H3jiTnf0kTq4W6uS7n95bBYHlKJ8_hh0og8z4erQ,1244
10
- KekikStream/Core/Extractor/ExtractorModels.py,sha256=huIcPQ5VIRfMx0LcL5SS1u4dldZbHjzHKEdSEtOPlc0,456
11
- KekikStream/Core/Media/MediaHandler.py,sha256=AJNPTXgxWykfDMyZIyGSjWl3Vp0salT8lKDrfAwaga4,6936
12
- KekikStream/Core/Media/MediaManager.py,sha256=9ItiUguOkk3wg3YY5uf3mrjfwLPCvggnP8QviX0uiuE,526
13
- KekikStream/Core/Plugin/PluginBase.py,sha256=RadYkRQ2VN6Ay9RqnIXs8XOtAFwuc8yABPX0rgXWcMs,2758
14
- KekikStream/Core/Plugin/PluginLoader.py,sha256=2UM3gNcEgd7k-FxG-JB5nTIS0K_clzvFtzGjMA_Sx7Q,3379
15
- KekikStream/Core/Plugin/PluginManager.py,sha256=CZVg1eegi8vfMfccx0DRV0Box8kXz-aoULTQLgbPbvM,893
16
- KekikStream/Core/Plugin/PluginModels.py,sha256=ZZJUXbC0G2k0DU7Wpbf0rwjn7spywpiaLIHE7kLajhk,2533
17
- KekikStream/Core/UI/UIManager.py,sha256=T4V_kdTTWa-UDamgLSKa__dWJuzcvRK9NuwBlzU9Bzc,1693
18
- KekikStream/Extractors/CloseLoad.py,sha256=YmDB3YvuDaCUbQ0T_tmhnkEsC5mSdEN6GNoAR662fl8,990
19
- KekikStream/Extractors/ContentX.py,sha256=XPoAuA95LOTgCUGyioXxOFWR0nNKWWOHLkYMlzguIIE,2980
20
- KekikStream/Extractors/FourCX.py,sha256=4FrMj1IZBBpN_g1P6S3A-8eUu7QFwlt4fJXzJ7vfe0Q,221
21
- KekikStream/Extractors/FourPichive.py,sha256=iq3BCUbih1UVF4y4BIWO--0hX5jP2nxqesNx3MGP3kQ,234
22
- KekikStream/Extractors/FourPlayRu.py,sha256=wq1ylxKpsO_IBoYr_ALzB2dVrQpJ-jY9lf2zPhcAZX8,228
23
- KekikStream/Extractors/HDStreamAble.py,sha256=66n5EvIdX_or5cdnlJ_Uqmzi50n4rl9c5VCw8kBqhQk,245
24
- KekikStream/Extractors/Hotlinger.py,sha256=NFMRgUmb6BCrJfa7Hi0VarDNYvCeVknBWEk24FKBBa0,224
25
- KekikStream/Extractors/MailRu.py,sha256=lB3Xy912EaSEUw7Im65L5TwtIeM7OLFV1_9lan39g40,1308
26
- KekikStream/Extractors/MixPlayHD.py,sha256=M7Zxmpkazkj6ewgLWKKDeZDbBOCM9vkMDyIaVhaSPrY,1554
27
- KekikStream/Extractors/MolyStream.py,sha256=aJZL1SE40gB5KeShu-TV5IWNICHCtAXY87F0wqYrw1k,604
28
- KekikStream/Extractors/Odnoklassniki.py,sha256=B0A2krVVvzmpZBzIpxu40WB9AZ_zzH-Km2HTetrNvqQ,3593
29
- KekikStream/Extractors/OkRuHTTP.py,sha256=L-B0i_i_Vnm61GvUfd6cGIW-o_H4M-C7DO_cdw2rQPU,228
30
- KekikStream/Extractors/OkRuSSL.py,sha256=FHJ5XZ1dO5ED3mIku3e3vnq8K0slrcr0jqhaUnHmfVk,227
31
- KekikStream/Extractors/PeaceMakerst.py,sha256=VSXeCeA_-9IkKdjoQ3lvA4FFDzdT_Oj1oFM7i-_3tvQ,2100
32
- KekikStream/Extractors/Pichive.py,sha256=BSVYFwL3Ax6yGoS1WkpOWtngxNyuZLoKzpPwjibpu2s,221
33
- KekikStream/Extractors/PixelDrain.py,sha256=1kf1kKKxcYwLVPo_8Fg1Za3E2kOplqqVFM41xBT52KY,992
34
- KekikStream/Extractors/PlayRu.py,sha256=DQMZyCSJwLkrh-gfDD8T1DvUFNBAKUXpByeCAWuK6YY,215
35
- KekikStream/Extractors/RapidVid.py,sha256=n03CyrnFLSoL6Ys5Dy4a4d-5iIAdmouqz4-k6Vl3Hok,2369
36
- KekikStream/Extractors/SibNet.py,sha256=Jrl93OdKwEhssG348-F2BKaj-XUS7v-Qw3dKMh_ZMRQ,878
37
- KekikStream/Extractors/Sobreatsesuyp.py,sha256=p5aHxIM9aNBfWEnqjTdI_kYpcFKvBHg1BZoPqbB_eyo,2004
38
- KekikStream/Extractors/TRsTX.py,sha256=Z-Xk6kSAFFbxnj2I7x0gAbBbaQyuj1mIqn2Sw0xFtP4,2156
39
- KekikStream/Extractors/TauVideo.py,sha256=I6TYHqAYSb_fAIcb8PiIdkzlQ0ZX-9Bb5_KMG955sJ4,1114
40
- KekikStream/Extractors/TurboImgz.py,sha256=VXx9vZZRTdQiVNER0LcXm2nsv2OaXnxuPpslG-sEKD0,826
41
- KekikStream/Extractors/VidMoly.py,sha256=jYvFSzE46mStArVEQedkvqUUIPwi1LS47qRk0YntAQU,3529
42
- KekikStream/Extractors/VidMolyMe.py,sha256=ogLiFUJVqFbhtzQrZ1gSB9me85DiHvntjWtSvidYVS8,218
43
- KekikStream/Extractors/VidMoxy.py,sha256=_K6BA7Uo59DA3ty_tsayCUZjXmRoDBTghekVNXiuZ7g,1800
44
- KekikStream/Extractors/VideoSeyred.py,sha256=rgS940vHJjrhF-JH4B_8poL2OwmctVyWTzP9I8gdLGI,1980
45
- KekikStream/Plugins/DiziBox.py,sha256=ug-upa0TV1f351Kr64Yf0TRnLZw4lQazocgaSZvuBBU,9111
46
- KekikStream/Plugins/DiziYou.py,sha256=2WaQZKa8NlBiuGWu3jUTPslXD2l5ALCAY5qnXwozpes,5669
47
- KekikStream/Plugins/Dizilla.py,sha256=XYc5zAjLsiEgCNMi6x1XXy8PpV8BHLgEyLitMoq_5a0,4257
48
- KekikStream/Plugins/FilmMakinesi.py,sha256=rz8TQeL41PJbeEmksgPHIhp6J-4vbSCBTeEH0ukExz4,2822
49
- KekikStream/Plugins/FullHDFilmizlesene.py,sha256=Fa0gRP_NoMfPC8HIKRxERjQVOv8Fyb-ayMJ2EooZ7BE,3080
50
- KekikStream/Plugins/HdFilmCehennemi.py,sha256=GR18SCiieTfepY5HKpJOie1xlGQ9bxId_kjeKvrfo8M,6689
51
- KekikStream/Plugins/JetFilmizle.py,sha256=v2R4iDm_9VWNO2HTpawvfNElVdOoOF_4iPIquziLvhc,3916
52
- KekikStream/Plugins/RecTV.py,sha256=TYpV6T7U8TkkHYB3XK0xqar0pKlULXdztvK4TDc9734,5106
53
- KekikStream/Plugins/SezonlukDizi.py,sha256=VUyKAu2SlUCV4uTQfIr2BLLTus2-LOXPFF4rDHG1rs8,4444
54
- KekikStream/Plugins/Shorten.py,sha256=kDQGmj7qvfdDyDkU__QGjx-FoGSgCOPxcA3veM2BGPk,8858
55
- KekikStream/Plugins/SineWix.py,sha256=LHWX4hq-nbVOR0zDrBDNugoVb3CEFU5yD4jcRprzm4U,6838
56
- KekikStream/Plugins/UgurFilm.py,sha256=rp6M7yjVljVWbGEAC9BB96W1wBsM-PdFbh5tcZ2ZhzI,2930
57
- kekikstream-1.2.2.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
58
- kekikstream-1.2.2.dist-info/METADATA,sha256=u53zotrkCmWM36Uq5DLQ95_o4kBoLVzy3iY5GsaboDw,4508
59
- kekikstream-1.2.2.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
60
- kekikstream-1.2.2.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
61
- kekikstream-1.2.2.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
62
- kekikstream-1.2.2.dist-info/RECORD,,