KekikStream 2.0.8__py3-none-any.whl → 2.0.9__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.
@@ -1,12 +1,15 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
3
  from KekikStream.Core import ExtractorBase, ExtractResult, Subtitle
4
- import re, json
4
+ import re
5
5
 
6
6
  class PlayerFilmIzle(ExtractorBase):
7
7
  name = "PlayerFilmIzle"
8
8
  main_url = "https://player.filmizle.in"
9
9
 
10
+ def can_handle_url(self, url: str) -> bool:
11
+ return "filmizle.in" in url or "fireplayer" in url.lower()
12
+
10
13
  async def extract(self, url: str, referer: str = None) -> ExtractResult:
11
14
  # Kotlin tarafında referer mainUrl olarak zorlanmış
12
15
  ext_ref = self.main_url
@@ -29,20 +32,20 @@ class PlayerFilmIzle(ExtractorBase):
29
32
  # Data yakalama: FirePlayer|DATA|...
30
33
  data_match = re.search(r'FirePlayer\|([^|]+)\|', video_req, re.IGNORECASE)
31
34
  data_val = data_match.group(1) if data_match else None
32
-
35
+
33
36
  if not data_val:
34
37
  raise ValueError("PlayerFilmIzle: Data bulunamadı")
35
38
 
36
39
  url_post = f"{self.main_url}/player/index.php?data={data_val}&do=getVideo"
37
-
40
+
38
41
  post_headers = {
39
42
  "Referer": ext_ref,
40
43
  "X-Requested-With": "XMLHttpRequest"
41
44
  }
42
-
45
+
43
46
  # Kotlin'de post data: "hash" -> data, "r" -> ""
44
47
  post_data = {"hash": data_val, "r": ""}
45
-
48
+
46
49
  response = await self.httpx.post(url_post, data=post_data, headers=post_headers)
47
50
  get_url = response.text.replace("\\", "")
48
51
 
@@ -140,7 +140,7 @@ class SinemaCX(PluginBase):
140
140
  # Extractor'a yönlendir
141
141
  extractor = self.ex_manager.find_extractor(iframe)
142
142
  data = await extractor.extract(iframe, referer=f"{self.main_url}/")
143
- results.append(data.to_dict())
143
+ results.append(data.dict())
144
144
 
145
145
  return results
146
146
 
@@ -89,7 +89,7 @@ class SuperFilmGeldi(PluginBase):
89
89
  # Mix player özel işleme
90
90
  if "mix" in iframe and "index.php?data=" in iframe:
91
91
  iframe_istek = await self.httpx.get(iframe, headers={"Referer": f"{self.main_url}/"})
92
- mix_point = re.search(r'videoUrl":"(.*)","videoServer', iframe_istek.text)
92
+ mix_point = re.search(r'videoUrl"\s*:\s*"(.*?)"\s*,\s*"videoServer', iframe_istek.text)
93
93
 
94
94
  if mix_point:
95
95
  mix_point = mix_point[1].replace("\\", "")
@@ -111,11 +111,17 @@ class SuperFilmGeldi(PluginBase):
111
111
  "subtitles" : []
112
112
  })
113
113
  else:
114
+ # Extractor'a yönlendir
114
115
  extractor = self.ex_manager.find_extractor(iframe)
115
- results.append({
116
- "name" : extractor.name if extractor else "Player",
117
- "url" : iframe,
118
- "referer" : f"{self.main_url}/"
119
- })
116
+ data = await extractor.extract(iframe, referer=f"{self.main_url}/")
117
+ results.append(data.dict())
120
118
 
121
119
  return results
120
+
121
+ async def play(self, **kwargs):
122
+ extract_result = ExtractResult(**kwargs)
123
+ self.media_handler.title = kwargs.get("name")
124
+ if self.name not in self.media_handler.title:
125
+ self.media_handler.title = f"{self.name} | {self.media_handler.title}"
126
+
127
+ self.media_handler.play_media(extract_result)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 2.0.8
3
+ Version: 2.0.9
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
@@ -21,7 +21,6 @@ KekikStream/Extractors/ContentX.py,sha256=TEXJppAZJLkf0x8jxaKnrCVAcabqdBFBswinpq
21
21
  KekikStream/Extractors/DonilasPlay.py,sha256=Lr60pEht96SMlXICYWo9J5dOwV4ty8fetBCCqJ3ARUY,3221
22
22
  KekikStream/Extractors/DzenRu.py,sha256=X0Rhm1-W4YjQwVrJs8YFqVcCxMaZi8rsKiLhK_ZsYlU,1185
23
23
  KekikStream/Extractors/ExPlay.py,sha256=EJNVKAbaIxlbOsCx7J9aLfNHKOFoqSLZZUw7W4QYeH0,1827
24
- KekikStream/Extractors/FirePlayer.py,sha256=HlJjFgii0fGZK7cgwpoZAIoajabl7IQX6ZrAQT1fBIw,2188
25
24
  KekikStream/Extractors/HDPlayerSystem.py,sha256=EgnFzx5Q4PkuwAtuff5SYU9k59B-CyOdySl7lbCZ9hM,1312
26
25
  KekikStream/Extractors/JetTv.py,sha256=aA3WeOvR-tszac-WSwunZZb1NRy25TQH8vxY3TDscRI,1596
27
26
  KekikStream/Extractors/MailRu.py,sha256=xQVCWwYqNoG5T43VAW1_m0v4e80FbO-1pNPKkwhTccU,1218
@@ -31,7 +30,7 @@ KekikStream/Extractors/MolyStream.py,sha256=IeeBw9tJJrL5QQ-t2Yp-a-6lnDc3Y00UNiaN
31
30
  KekikStream/Extractors/Odnoklassniki.py,sha256=YfFRCL3Ag5N4zDzK9ZLOr3HVQcsETFQpff1px02imJ0,4019
32
31
  KekikStream/Extractors/PeaceMakerst.py,sha256=pEgJb3KDfEPAUjbuvrYbUlxIciKgED-Vd0arrRO3QCk,2317
33
32
  KekikStream/Extractors/PixelDrain.py,sha256=Uk2pPvtBzaKtRXu1iNO8FLHd0EAuIOIzI1H_n02tg-U,964
34
- KekikStream/Extractors/PlayerFilmIzle.py,sha256=vDumIya3gWN8h1to5XCzBWePa6gdNU2DVTK3OrPr04U,2425
33
+ KekikStream/Extractors/PlayerFilmIzle.py,sha256=kH-O_RtQvG4iRLGKi-sFn1ST14DrxxoAa5iRT2PsdXc,2503
35
34
  KekikStream/Extractors/RapidVid.py,sha256=FgAZfgtnKE57KRiRIFw-6_ZES0Trp5QriNbRTfSBGQs,3139
36
35
  KekikStream/Extractors/SetPlay.py,sha256=FjHYtC6xTeeikTkrW6jz0TpWz0kaoJ5qHhr_H7aThEY,2135
37
36
  KekikStream/Extractors/SetPrime.py,sha256=ob09y-Sm91YR7rIRzikhZiMHX6D4Djm5QzFTg6KbO4k,1536
@@ -69,13 +68,13 @@ KekikStream/Plugins/SetFilmIzle.py,sha256=buz8B8MOTPw-TMV8U-k4IG3PUEFFKtOXb0fV7V
69
68
  KekikStream/Plugins/SezonlukDizi.py,sha256=vW-Mvk63Y9sAJmPnY1IdFwBzCMEB2tF03zwHVETZTtI,7262
70
69
  KekikStream/Plugins/SineWix.py,sha256=xdTeg8GHUpyZsY6EQ5I1ZIT4-lB_qwBwvHQVmdMPpEI,7364
71
70
  KekikStream/Plugins/Sinefy.py,sha256=riB2lgSSG5MkgxnVtX1OlApBcHG6vVjfiHyJ6h8_6DM,9965
72
- KekikStream/Plugins/SinemaCX.py,sha256=dIJUOOtWSyMx7vGOE1NjrsCeW1n5DHh40--KSiW0kFA,7200
71
+ KekikStream/Plugins/SinemaCX.py,sha256=-mcZe9Lh93hz5PZdbV2ASlT0O_t4KNMyZxA1q82rbmk,7197
73
72
  KekikStream/Plugins/Sinezy.py,sha256=gdszlee5QpUka0qMzGMbBoXwJCtZbe5hlA5o9FJQI1o,6226
74
- KekikStream/Plugins/SuperFilmGeldi.py,sha256=4kgdWpYCLBSAn2XfL1usFG33LsTtDvo28fmDecwNA_U,5480
73
+ KekikStream/Plugins/SuperFilmGeldi.py,sha256=HmY37Onn8VLggT7NaMnvpYv863zrk8eQnPGpfK2HrEk,5788
75
74
  KekikStream/Plugins/UgurFilm.py,sha256=sQatQ2zb9NER8J52DRLI5K9EnYFv4I1ZgZ22HtauX3Q,4813
76
- kekikstream-2.0.8.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
77
- kekikstream-2.0.8.dist-info/METADATA,sha256=kA_zt_1xAcrCyPp7tonW8fg4Ib5kuZl4-9ssn0wGyLU,10090
78
- kekikstream-2.0.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
79
- kekikstream-2.0.8.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
80
- kekikstream-2.0.8.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
81
- kekikstream-2.0.8.dist-info/RECORD,,
75
+ kekikstream-2.0.9.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
76
+ kekikstream-2.0.9.dist-info/METADATA,sha256=UolpHMnBAebdvrjAnG9Zpn5uYT572fftvtH4qBpPz2Q,10090
77
+ kekikstream-2.0.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
78
+ kekikstream-2.0.9.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
79
+ kekikstream-2.0.9.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
80
+ kekikstream-2.0.9.dist-info/RECORD,,
@@ -1,60 +0,0 @@
1
- # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
-
3
- from KekikStream.Core import ExtractorBase, ExtractResult
4
- from Kekik.Sifreleme import Packer
5
- import re
6
-
7
- class FirePlayer(ExtractorBase):
8
- name = "FirePlayer"
9
- main_url = "https://Player.filmizle.in"
10
-
11
- def can_handle_url(self, url: str) -> bool:
12
- return "filmizle.in" in url or "fireplayer" in url.lower()
13
-
14
- async def extract(self, url: str, referer: str = None) -> ExtractResult:
15
- if not referer:
16
- referer = "https://sinezy.site/"
17
-
18
- headers = {
19
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
20
- "Referer": referer
21
- }
22
-
23
- istek = await self.httpx.get(url, headers=headers)
24
-
25
- # Unpack usage similar to VidMoxy / suggestion
26
- # Find the packed code block
27
- match = re.search(r'(eval\(function\(p,a,c,k,e,d\)[\s\S]+?)\s*</script>', istek.text)
28
- if match:
29
- packed_code = match.group(1)
30
- unpacked = Packer.unpack(packed_code)
31
- else:
32
- unpacked = istek.text
33
-
34
- # Normalize escaped slashes
35
- unpacked = unpacked.replace(r"\/", "/")
36
-
37
- video_url = None
38
-
39
- # Look for .mp4 or .m3u8 urls directly first
40
- url_match = re.search(r'(https?://[^"\'\s]+\.(?:mp4|m3u8))', unpacked)
41
- if url_match:
42
- video_url = url_match.group(1)
43
-
44
- if not video_url:
45
- # Fallback: find all 'file': '...' and pick best
46
- files = re.findall(r'file\s*:\s*["\']([^"\']+)["\']', unpacked)
47
- for f in files:
48
- if f.strip() and not f.endswith(".jpg") and not f.endswith(".png") and not f.endswith(".vtt"):
49
- video_url = f
50
- break
51
-
52
- if not video_url:
53
- raise ValueError("Could not find video URL in unpacked content")
54
-
55
- return ExtractResult(
56
- name = self.name,
57
- url = video_url,
58
- referer = url,
59
- user_agent = headers.get("User-Agent", "")
60
- )