KekikStream 3.4.0__tar.gz → 3.4.2__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 (223) hide show
  1. kekikstream-3.4.2/KekikStream/Plugins/CizgiMax.py +179 -0
  2. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziMom.py +31 -27
  3. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DoramasLatinoX.py +7 -15
  4. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Dramacool.py +1 -1
  5. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SinemaCX.py +16 -16
  6. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SuperFilmIzle.py +12 -12
  7. {kekikstream-3.4.0 → kekikstream-3.4.2}/PKG-INFO +1 -1
  8. {kekikstream-3.4.0 → kekikstream-3.4.2}/pyproject.toml +1 -1
  9. kekikstream-3.4.0/KekikStream/Plugins/CizgiMax.py +0 -131
  10. {kekikstream-3.4.0 → kekikstream-3.4.2}/.github/FUNDING.yml +0 -0
  11. {kekikstream-3.4.0 → kekikstream-3.4.2}/.github/icons/KekikStream.png +0 -0
  12. {kekikstream-3.4.0 → kekikstream-3.4.2}/.github/workflows/Kontrol.yml +0 -0
  13. {kekikstream-3.4.0 → kekikstream-3.4.2}/.github/workflows/pypiYukle.yml +0 -0
  14. {kekikstream-3.4.0 → kekikstream-3.4.2}/.gitignore +0 -0
  15. {kekikstream-3.4.0 → kekikstream-3.4.2}/KONTROL.py +0 -0
  16. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/CLI/__init__.py +0 -0
  17. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/CLI/pypi_kontrol.py +0 -0
  18. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/ExtractorBase.py +0 -0
  19. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/ExtractorLoader.py +0 -0
  20. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/ExtractorManager.py +0 -0
  21. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/ExtractorMixins.py +0 -0
  22. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/ExtractorModels.py +0 -0
  23. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/VideoPlayerExtractor.py +0 -0
  24. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/YTDLPCache.py +0 -0
  25. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/FallbackClients.py +0 -0
  26. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/HTMLHelper.py +0 -0
  27. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/MethodCache.py +0 -0
  28. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/Normalizer.py +0 -0
  29. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/TitleHelper.py +0 -0
  30. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/__init__.py +0 -0
  31. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Media/MediaHandler.py +0 -0
  32. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Media/MediaManager.py +0 -0
  33. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Plugin/FlwBasePlugin.py +0 -0
  34. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Plugin/PluginBase.py +0 -0
  35. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Plugin/PluginLoader.py +0 -0
  36. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Plugin/PluginManager.py +0 -0
  37. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Plugin/PluginModels.py +0 -0
  38. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/UI/UIManager.py +0 -0
  39. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/__init__.py +0 -0
  40. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Abstream.py +0 -0
  41. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Alloha.py +0 -0
  42. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Ashdi.py +0 -0
  43. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/BrightPath.py +0 -0
  44. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/BulguNet.py +0 -0
  45. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/BurstCloud.py +0 -0
  46. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/ByseSX.py +0 -0
  47. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/CizgiPass.py +0 -0
  48. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/CloseLoad.py +0 -0
  49. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/ContentX.py +0 -0
  50. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DarkiBox.py +0 -0
  51. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DonilasPlay.py +0 -0
  52. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DoodStream.py +0 -0
  53. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DosyaLoad.py +0 -0
  54. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DramaCool.py +0 -0
  55. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DzenRu.py +0 -0
  56. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/EmbedLoad.py +0 -0
  57. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/EpikPlayer.py +0 -0
  58. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/ExPlay.py +0 -0
  59. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/FastPlay.py +0 -0
  60. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Fembed.py +0 -0
  61. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Filemoon.py +0 -0
  62. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/HDLoad.py +0 -0
  63. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/HDMomPlayer.py +0 -0
  64. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/HDPlayerSystem.py +0 -0
  65. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/HexLoad.py +0 -0
  66. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/HotStream.py +0 -0
  67. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/JFVid.py +0 -0
  68. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/JetCDN.py +0 -0
  69. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/JetTv.py +0 -0
  70. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/JetV.py +0 -0
  71. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/KentFilm.py +0 -0
  72. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Kodik.py +0 -0
  73. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/LuciferPlays.py +0 -0
  74. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/LuluStream.py +0 -0
  75. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MP4Upload.py +0 -0
  76. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MailRu.py +0 -0
  77. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MegaCloud.py +0 -0
  78. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MegaNZ.py +0 -0
  79. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MixDrop.py +0 -0
  80. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MixPlayHD.py +0 -0
  81. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MixTiger.py +0 -0
  82. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MolyStream.py +0 -0
  83. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Netu.py +0 -0
  84. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/NiceAcik.py +0 -0
  85. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Odnoklassniki.py +0 -0
  86. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/PeaceMakerst.py +0 -0
  87. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/PixelDrain.py +0 -0
  88. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/PlayerFilmIzle.py +0 -0
  89. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/PlayerKorea.py +0 -0
  90. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/PlayerX.py +0 -0
  91. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/RapidVid.py +0 -0
  92. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Rumble.py +0 -0
  93. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/SaveFiles.py +0 -0
  94. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/SendVid.py +0 -0
  95. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/SetPlay.py +0 -0
  96. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/SetPrime.py +0 -0
  97. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/ShortICU.py +0 -0
  98. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/SibNet.py +0 -0
  99. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Sobreatsesuyp.py +0 -0
  100. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Stloadi.py +0 -0
  101. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/StreamBox.py +0 -0
  102. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/StreamTape.py +0 -0
  103. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/StreamWish.py +0 -0
  104. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/TRsTX.py +0 -0
  105. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/TauVideo.py +0 -0
  106. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Tukipasti.py +0 -0
  107. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/TurboImgz.py +0 -0
  108. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/TurkeyPlayer.py +0 -0
  109. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Uqload.py +0 -0
  110. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VCTPlay.py +0 -0
  111. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Variyt.py +0 -0
  112. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Veev.py +0 -0
  113. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidBiz.py +0 -0
  114. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidHide.py +0 -0
  115. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidLoad.py +0 -0
  116. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidMoly.py +0 -0
  117. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidMoxy.py +0 -0
  118. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidPapi.py +0 -0
  119. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidStack.py +0 -0
  120. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VideoParktop.py +0 -0
  121. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VideoSeyred.py +0 -0
  122. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Videostr.py +0 -0
  123. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Vidora.py +0 -0
  124. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Vidoza.py +0 -0
  125. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Voe.py +0 -0
  126. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Vtbe.py +0 -0
  127. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/XtremStream.py +0 -0
  128. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/YTDLP.py +0 -0
  129. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/YildizKisaFilm.py +0 -0
  130. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/YourUpload.py +0 -0
  131. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Zeus.py +0 -0
  132. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/ZillaNetworks.py +0 -0
  133. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/AnimeAV.py +0 -0
  134. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/AnimeYTX.py +0 -0
  135. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/AnimeciX.py +0 -0
  136. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/AsyaAnimeleri.py +0 -0
  137. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/AsyaWatch.py +0 -0
  138. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/BFlix.py +0 -0
  139. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/BelgeselX.py +0 -0
  140. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Broken/FilmKovasi.py +0 -0
  141. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Coflix.py +0 -0
  142. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DDizi.py +0 -0
  143. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DMax.py +0 -0
  144. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziBox.py +0 -0
  145. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziGom.py +0 -0
  146. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziKorea.py +0 -0
  147. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziMag.py +0 -0
  148. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziPal.py +0 -0
  149. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziWatch.py +0 -0
  150. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziYou.py +0 -0
  151. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Dizify.py +0 -0
  152. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Dizilla.py +0 -0
  153. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DocumentaryArea.py +0 -0
  154. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DramaFlix.py +0 -0
  155. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmBip.py +0 -0
  156. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmCennetim.py +0 -0
  157. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmEkseni.py +0 -0
  158. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmFC.py +0 -0
  159. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmIzleIlk.py +0 -0
  160. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmMakinesi.py +0 -0
  161. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmMirasim.py +0 -0
  162. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmModu.py +0 -0
  163. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Filmatek.py +0 -0
  164. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmciBaba.py +0 -0
  165. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FlixHQ.py +0 -0
  166. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FlixLatam.py +0 -0
  167. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FullHDFilm.py +0 -0
  168. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
  169. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/HDFilm.py +0 -0
  170. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/HDFilmCehennemi.py +0 -0
  171. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/HDrezka.py +0 -0
  172. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Henaojara.py +0 -0
  173. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/InatBox.py +0 -0
  174. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/JPFilms.py +0 -0
  175. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/JetFilmizle.py +0 -0
  176. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Kinogo.py +0 -0
  177. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/KoreanTurk.py +0 -0
  178. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/KultFilmler.py +0 -0
  179. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Latanime.py +0 -0
  180. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Movies2Watch.py +0 -0
  181. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/MoviesJoy.py +0 -0
  182. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/MyFlixer.py +0 -0
  183. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/RecTV.py +0 -0
  184. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/RoketDizi.py +0 -0
  185. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SFlix.py +0 -0
  186. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SelcukFlix.py +0 -0
  187. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SetFilmIzle.py +0 -0
  188. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SezonlukDizi.py +0 -0
  189. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/ShowFlix.py +0 -0
  190. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SineWix.py +0 -0
  191. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Sinefy.py +0 -0
  192. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Sinezy.py +0 -0
  193. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/StreamIMDB.py +0 -0
  194. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/TLC.py +0 -0
  195. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/TurkAnime.py +0 -0
  196. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Turkish123.py +0 -0
  197. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/TvDiziler.py +0 -0
  198. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/UAKino.py +0 -0
  199. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/UgurFilm.py +0 -0
  200. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/WFilmIzle.py +0 -0
  201. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Watch2Movies.py +0 -0
  202. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Watch32.py +0 -0
  203. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/WebDramaTurkey.py +0 -0
  204. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/WebteIzle.py +0 -0
  205. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/XPrime.py +0 -0
  206. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/YabanciDizi.py +0 -0
  207. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/YeniWatch.py +0 -0
  208. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/YesilcamTV.py +0 -0
  209. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/YoTurkish.py +0 -0
  210. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Zoechip.py +0 -0
  211. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/__init__.py +0 -0
  212. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/__main__.py +0 -0
  213. {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/requirements.txt +0 -0
  214. {kekikstream-3.4.0 → kekikstream-3.4.2}/LICENSE +0 -0
  215. {kekikstream-3.4.0 → kekikstream-3.4.2}/README.md +0 -0
  216. {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/Multi.py +0 -0
  217. {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/PluginAudit/audit_plugins.py +0 -0
  218. {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/PluginAudit/clean_plugins.py +0 -0
  219. {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/PluginAudit/master_audit.py +0 -0
  220. {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/Single.py +0 -0
  221. {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/Validator.py +0 -0
  222. {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/test_links.py +0 -0
  223. {kekikstream-3.4.0 → kekikstream-3.4.2}/_config.yml +0 -0
@@ -0,0 +1,179 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Core import PluginBase, MainPageResult, SearchResult, SeriesInfo, Episode, ExtractResult, HTMLHelper
4
+ import re
5
+
6
+ class CizgiMax(PluginBase):
7
+ name = "CizgiMax"
8
+ language = "tr"
9
+ main_url = "https://cizgimax.online"
10
+ favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
11
+ description = "ÇizgiMax ile Çizgi Film izlemek artık daha kolay, donmadan full hd ve reklamsız bir sitedir, içerisinde 500 den fazla çizgi film olan, Bu site bu işi profesyonelce yapıyor."
12
+
13
+ main_page = {
14
+ f"{main_url}/diziler?orderby=date&order=DESC" : "Son Eklenenler",
15
+ f"{main_url}/diziler?s_type&tur[0]=aile&orderby=date&order=DESC" : "Aile",
16
+ f"{main_url}/diziler?s_type&tur[0]=aksiyon-macera&orderby=date&order=DESC" : "Aksiyon & Macera",
17
+ f"{main_url}/diziler?s_type&tur[0]=animasyon&orderby=date&order=DESC" : "Animasyon",
18
+ f"{main_url}/diziler?s_type&tur[0]=belgesel&orderby=date&order=DESC" : "Belgesel",
19
+ f"{main_url}/diziler?s_type&tur[0]=bilim-kurgu-fantazi&orderby=date&order=DESC" : "Bilim Kurgu & Fantazi",
20
+ f"{main_url}/diziler?s_type&tur[0]=cocuklar&orderby=date&order=DESC" : "Çocuklar",
21
+ f"{main_url}/diziler?s_type&tur[0]=dram&orderby=date&order=DESC" : "Dram",
22
+ f"{main_url}/diziler?s_type&tur[0]=gizem&orderby=date&order=DESC" : "Gizem",
23
+ f"{main_url}/diziler?s_type&tur[0]=komedi&orderby=date&order=DESC" : "Komedi",
24
+ f"{main_url}/diziler?s_type&tur[0]=pembe-dizi&orderby=date&order=DESC" : "Pembe Dizi",
25
+ f"{main_url}/diziler?s_type&tur[0]=suc&orderby=date&order=DESC" : "Suç",
26
+ f"{main_url}/diziler?s_type&tur[0]=talk&orderby=date&order=DESC" : "Talk",
27
+ f"{main_url}/diziler?s_type&tur[0]=vahsi-bati&orderby=date&order=DESC" : "Vahşi Batı",
28
+ }
29
+
30
+ async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
31
+ page_url = url if page <= 1 else f"{url}/page/{page}"
32
+ # URL'de /diziler varsa ve /page/ ekleniyorsa düzeltme gerekebilir.
33
+ # Sitede /diziler/anime/page/2 gibi bir yapı var.
34
+ if "/diziler" in url and page > 1:
35
+ base = url.split("?")[0].rstrip("/")
36
+ query = f"?{url.split('?')[1]}" if "?" in url else ""
37
+ page_url = f"{base}/page/{page}/{query}"
38
+
39
+ istek = await self.async_cf_get(page_url)
40
+ secici = HTMLHelper(istek.text)
41
+
42
+ results = []
43
+ for veri in secici.select("div.film-item"):
44
+ title = veri.select_text("a.film-name")
45
+ href = veri.select_attr("a.film-name", "href")
46
+ poster = veri.select_attr("a.poster img", "src") or veri.select_attr("a.poster img", "data-src")
47
+
48
+ if title and href:
49
+ results.append(MainPageResult(
50
+ category = category,
51
+ title = title.strip(),
52
+ url = self.fix_url(href),
53
+ poster = self.fix_url(poster),
54
+ ))
55
+
56
+ return results
57
+
58
+ async def search(self, query: str) -> list[SearchResult]:
59
+ # AJAX search yerine HTML search kullanıyoruz
60
+ istek = await self.async_cf_get(f"{self.main_url}/ara/?q={query}")
61
+ secici = HTMLHelper(istek.text)
62
+
63
+ results = []
64
+ for veri in secici.select("div.film-item"):
65
+ title = veri.select_text("a.film-name")
66
+ href = veri.select_attr("a.film-name", "href")
67
+ poster = veri.select_attr("a.poster img", "src") or veri.select_attr("a.poster img", "data-src")
68
+
69
+ if title and href:
70
+ results.append(SearchResult(
71
+ title = title.strip(),
72
+ url = self.fix_url(href),
73
+ poster = self.fix_url(poster),
74
+ ))
75
+
76
+ return results
77
+
78
+ async def load_item(self, url: str) -> SeriesInfo:
79
+ istek = await self.async_cf_get(url)
80
+ secici = HTMLHelper(istek.text)
81
+
82
+ title = secici.select_text("h1.page-title") or secici.select_text("h1") or ""
83
+ poster = secici.select_attr("img.series-profile-thumb", "src") or secici.meta_value("og:image")
84
+ description = secici.select_text("#tv-series-desc") or secici.select_text(".anime-desc") or secici.meta_value("og:description")
85
+ tags = secici.select_texts("div.genre-item a") or secici.select_texts(".anime-meta-grid a")
86
+
87
+ episodes = []
88
+ # Yeni yapı: ep-num-btn linkleri
89
+ for veri in secici.select("a.ep-num-btn"):
90
+ ep_href = veri.attrs.get("href")
91
+ ep_text = veri.text(strip=True) # Genelde "1", "2" gibi sadece sayı veya "1. Bölüm"
92
+
93
+ if not ep_href:
94
+ continue
95
+
96
+ # Sezon ve bölüm bilgisini URL'den veya text'ten çıkar
97
+ # Örn: /devil-may-cry-2-sezon-8-bolum-izle/
98
+ season, episode = secici.extract_season_episode(ep_href)
99
+
100
+ # Eğer URL'den çıkmazsa text'i dene
101
+ if not episode:
102
+ episode = ep_text
103
+
104
+ episodes.append(Episode(
105
+ season = season or 1,
106
+ episode = episode,
107
+ title = f"{episode}. Bölüm",
108
+ url = self.fix_url(ep_href),
109
+ ))
110
+
111
+ return SeriesInfo(
112
+ url = url,
113
+ poster = self.fix_url(poster),
114
+ title = title.strip(),
115
+ description = description,
116
+ tags = tags,
117
+ episodes = episodes,
118
+ )
119
+
120
+ async def load_links(self, url: str) -> list[ExtractResult]:
121
+ import base64, json
122
+ istek = await self.async_cf_get(url)
123
+ text = istek.text
124
+
125
+ response = []
126
+
127
+ # Base64 encoded server listesini bul
128
+ match = re.search(r'servers\s*=\s*JSON\.parse\(atob\("([^"]+)"\)\)', text)
129
+ if not match:
130
+ # Alternatif: serversByLang da olabilir
131
+ match = re.search(r'serversByLang\s*=\s*JSON\.parse\(atob\("([^"]+)"\)\)', text)
132
+
133
+ if not match:
134
+ # En genel haliyle atob bulmaya çalış
135
+ match = re.search(r'atob\("([^"]+)"\)', text)
136
+
137
+ if match:
138
+ try:
139
+ encoded = match.group(1)
140
+ decoded = base64.b64decode(encoded).decode('utf-8')
141
+ servers = json.loads(decoded)
142
+
143
+ # serversByLang ise dict olabilir, listeye çevir
144
+ if isinstance(servers, dict):
145
+ all_servers = []
146
+ for lang_list in servers.values():
147
+ if isinstance(lang_list, list):
148
+ all_servers.extend(lang_list)
149
+ servers = all_servers
150
+
151
+ for s in servers:
152
+ name = s.get("label", "CizgiMax")
153
+
154
+ if s.get("type") == "iframe":
155
+ src = s.get("src")
156
+ if src:
157
+ data = await self.extract(self.fix_url(src), referer=url, prefix=name)
158
+ self.collect_results(response, data)
159
+ elif s.get("streamUrl"):
160
+ # Direkt stream URL (genelde sibnet/vidmoly api endpointi)
161
+ stream_url = self.fix_url(s.get("streamUrl"))
162
+ response.append(ExtractResult(
163
+ name = name,
164
+ url = stream_url,
165
+ referer = url
166
+ ))
167
+ except Exception:
168
+ pass
169
+
170
+ if not response:
171
+ # Klasik yöntem denemesi
172
+ secici = HTMLHelper(text)
173
+ for li in secici.select("ul.linkler li"):
174
+ iframe = li.select_attr("a", "data-frame")
175
+ if iframe:
176
+ data = await self.extract(self.fix_url(iframe.strip()), referer=url)
177
+ self.collect_results(response, data)
178
+
179
+ return self.deduplicate(response)
@@ -6,7 +6,7 @@ import re
6
6
  class DiziMom(PluginBase):
7
7
  name = "DiziMom"
8
8
  language = "tr"
9
- main_url = "https://www.dizimom.org/home"
9
+ main_url = "https://www.dizimom.org"
10
10
  favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
11
11
  description = "Binlerce yerli yabancı dizi arşivi, tüm sezonlar, kesintisiz bölümler. Sadece dizi izle, Dizimom heryerde seninle!"
12
12
 
@@ -24,12 +24,12 @@ class DiziMom(PluginBase):
24
24
  }
25
25
 
26
26
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
27
- istek = await self.httpx.get(f"{url}/{page}/")
27
+ istek = await self.async_cf_get(f"{url}/{page}/")
28
28
  secici = HTMLHelper(istek.text)
29
29
 
30
30
  results = []
31
31
  # Eğer "tum-bolumler" ise Episode kutularını, değilse Dizi kutularını tara
32
- if "/tum-bolumler/" in url:
32
+ if "/bolum" in url or "tum-bolumler" in url:
33
33
  for item in secici.select("div.episode-box"):
34
34
  title = item.select_text("div.episode-name a")
35
35
  href = item.select_attr("div.episode-name a", "href")
@@ -57,26 +57,35 @@ class DiziMom(PluginBase):
57
57
  return results
58
58
 
59
59
  async def search(self, query: str) -> list[SearchResult]:
60
- istek = await self.httpx.get(f"{self.main_url}/?s={query}")
60
+ istek = await self.async_cf_get(f"{self.main_url}/?s={query}")
61
61
  secici = HTMLHelper(istek.text)
62
62
  items = secici.select("div.single-item")
63
63
 
64
- return [
65
- SearchResult(
66
- title = item.select_text("div.categorytitle a").split(" izle")[0],
67
- url = self.fix_url(item.select_attr("div.categorytitle a", "href")),
68
- poster = self.fix_url(item.select_attr("div.cat-img img", "src"))
69
- )
70
- for item in items
71
- ]
64
+ results = []
65
+ for item in items:
66
+ title_node = item.select_first("div.categorytitle a")
67
+ if not title_node:
68
+ continue
69
+
70
+ title = title_node.text(strip=True).split(" izle")[0]
71
+ href = title_node.attrs.get("href")
72
+ img = item.select_poster("div.cat-img img")
73
+
74
+ if title and href:
75
+ results.append(SearchResult(
76
+ title = title,
77
+ url = self.fix_url(href),
78
+ poster = self.fix_url(img)
79
+ ))
80
+ return results
72
81
 
73
82
  async def load_item(self, url: str) -> SeriesInfo:
74
- istek = await self.httpx.get(url)
83
+ istek = await self.async_cf_get(url)
75
84
  secici = HTMLHelper(istek.text)
76
85
 
77
- title = secici.select_text("div.title h1")
78
- poster = secici.select_poster("div.category_image img")
79
- description = secici.select_direct_text("div.category_desc")
86
+ title = secici.select_text("div.title h1") or secici.select_text("h1")
87
+ poster = secici.select_poster("div.category_image img") or secici.meta_value("og:image")
88
+ description = secici.select_direct_text("div.category_desc") or secici.meta_value("og:description")
80
89
  tags = secici.select_texts("div.genres a")
81
90
  rating = secici.regex_first(r"(?s)IMDB\s*:\s*(?:</span>)?\s*([\d\.]+)", secici.html)
82
91
  year = secici.extract_year("div.category_text")
@@ -94,7 +103,7 @@ class DiziMom(PluginBase):
94
103
  episodes.append(Episode(
95
104
  season = s or 1,
96
105
  episode = e or 1,
97
- title = name.replace(title, "").strip(),
106
+ title = name.replace(title or "", "").strip(),
98
107
  url = self.fix_url(href)
99
108
  ))
100
109
 
@@ -111,15 +120,10 @@ class DiziMom(PluginBase):
111
120
  )
112
121
 
113
122
  async def load_links(self, url: str) -> list[ExtractResult]:
114
- await self.httpx.post(
115
- url = f"{self.main_url}/wp-login.php",
116
- headers = {
117
- "User-Agent" : "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36",
118
- "sec-ch-ua" : 'Not/A)Brand";v="8", "Chromium";v="137", "Google Chrome";v="137"',
119
- "sec-ch-ua-mobile" : "?1",
120
- "sec-ch-ua-platform" : "Android"
121
- },
122
- data = {
123
+ # Login işlemi bazen Cloudflare yüzünden async_cf_post gerektirebilir
124
+ await self.async_cf_post(
125
+ url = f"{self.main_url}/wp-login.php",
126
+ data = {
123
127
  "log" : "keyiflerolsun",
124
128
  "pwd" : "12345",
125
129
  "rememberme" : "forever",
@@ -127,7 +131,7 @@ class DiziMom(PluginBase):
127
131
  }
128
132
  )
129
133
 
130
- istek = await self.httpx.get(url)
134
+ istek = await self.async_cf_get(url)
131
135
  secici = HTMLHelper(istek.text)
132
136
 
133
137
  iframe_data = []
@@ -27,7 +27,7 @@ class DoramasLatinoX(PluginBase):
27
27
 
28
28
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
29
29
  full_url = url if page <= 1 else f"{url.rstrip('/')}/page/{page}/"
30
- istek = await self.httpx.get(full_url)
30
+ istek = await self.async_cf_get(full_url)
31
31
  secici = HTMLHelper(istek.text)
32
32
 
33
33
  results = []
@@ -45,12 +45,8 @@ class DoramasLatinoX(PluginBase):
45
45
  async def search(self, query: str) -> list[SearchResult]:
46
46
  # Search URL: Query param 's' kullanılmalı (Follow redirects for search/ query)
47
47
  full_url = f"{self.main_url}/?s={query}"
48
- try:
49
- istek = await self.httpx.get(full_url, follow_redirects=True, timeout=15)
50
- html = istek.text
51
- except Exception:
52
- istek = await self.async_cf_get(full_url, headers=self._headers)
53
- html = istek.text
48
+ istek = await self.async_cf_get(full_url)
49
+ html = istek.text
54
50
 
55
51
  secici = HTMLHelper(html)
56
52
 
@@ -69,7 +65,7 @@ class DoramasLatinoX(PluginBase):
69
65
  return results
70
66
 
71
67
  async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
72
- istek = await self.httpx.get(url)
68
+ istek = await self.async_cf_get(url)
73
69
  secici = HTMLHelper(istek.text)
74
70
 
75
71
  title = secici.select_text("h1")
@@ -133,12 +129,8 @@ class DoramasLatinoX(PluginBase):
133
129
  )
134
130
 
135
131
  async def load_links(self, url: str) -> list[ExtractResult]:
136
- try:
137
- istek = await self.httpx.get(url, timeout=15)
138
- html = istek.text
139
- except Exception:
140
- istek = await self.async_cf_get(url, headers=self._headers)
141
- html = istek.text
132
+ istek = await self.async_cf_get(url)
133
+ html = istek.text
142
134
 
143
135
  secici = HTMLHelper(html)
144
136
 
@@ -148,7 +140,7 @@ class DoramasLatinoX(PluginBase):
148
140
  async def fetch_dooplayer(post, p_type, nume):
149
141
  api_url = f"{self.main_url}/wp-json/dooplayer/v2/{post}/{p_type}/{nume}"
150
142
  try:
151
- r = await self.httpx.get(api_url)
143
+ r = await self.async_cf_get(api_url)
152
144
  data = r.json()
153
145
  embed_url = data.get("embed_url")
154
146
  if embed_url:
@@ -7,7 +7,7 @@ import re, base64
7
7
  class Dramacool(PluginBase):
8
8
  name = "Dramacool"
9
9
  language = "en"
10
- main_url = "https://dramacoolltvx.buzz"
10
+ main_url = "https://dramaccooolx.buzz"
11
11
  favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
12
12
  description = "Asian Drama Lover, Watch drama asian Online for free releases in Korean, Taiwanese, Thailand, Japanese and Chinese with English subtitles on Dramacool."
13
13
 
@@ -38,16 +38,16 @@ class SinemaCX(PluginBase):
38
38
  }
39
39
 
40
40
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
41
- istek = await self.httpx.get(url.replace("SAYFA", str(page)))
41
+ istek = await self.async_cf_get(url.replace("SAYFA", str(page)))
42
42
  secici = HTMLHelper(istek.text)
43
43
 
44
44
  results = []
45
- for veri in secici.select("div.son div.frag-k, div.icerik div.frag-k"):
46
- title = veri.select_text("div.yanac span")
45
+ for veri in secici.select("div.frag-k"):
46
+ title = veri.select_text("div.yanac a span") or veri.select_text("div.yanac span")
47
47
  if not title:
48
48
  continue
49
49
 
50
- href = veri.select_attr("div.yanac a", "href")
50
+ href = veri.select_attr("div.yanac a", "href") or veri.select_attr("a.resim", "href")
51
51
  poster = veri.select_attr("a.resim img", "data-src") or veri.select_attr("a.resim img", "src")
52
52
 
53
53
  results.append(MainPageResult(
@@ -60,16 +60,16 @@ class SinemaCX(PluginBase):
60
60
  return results
61
61
 
62
62
  async def search(self, query: str) -> list[SearchResult]:
63
- istek = await self.httpx.get(f"{self.main_url}/?s={query}")
63
+ istek = await self.async_cf_get(f"{self.main_url}/?s={query}")
64
64
  secici = HTMLHelper(istek.text)
65
65
 
66
66
  results = []
67
- for veri in secici.select("div.icerik div.frag-k"):
68
- title = veri.select_text("div.yanac span")
67
+ for veri in secici.select("div.frag-k"):
68
+ title = veri.select_text("div.yanac a span") or veri.select_text("div.yanac span")
69
69
  if not title:
70
70
  continue
71
71
 
72
- href = veri.select_attr("div.yanac a", "href")
72
+ href = veri.select_attr("div.yanac a", "href") or veri.select_attr("a.resim", "href")
73
73
  poster = veri.select_attr("a.resim img", "data-src") or veri.select_attr("a.resim img", "src")
74
74
 
75
75
  results.append(SearchResult(
@@ -81,16 +81,16 @@ class SinemaCX(PluginBase):
81
81
  return results
82
82
 
83
83
  async def load_item(self, url: str) -> MovieInfo:
84
- istek = await self.httpx.get(url)
84
+ istek = await self.async_cf_get(url)
85
85
  secici = HTMLHelper(istek.text)
86
86
 
87
- title = secici.select_text("div.f-bilgi h1")
88
- poster = secici.select_poster("div.resim img")
89
- description = secici.select_text("div.ackl div.scroll-liste")
90
- rating = secici.select_text("b.puandegistir")
91
- tags = secici.select_texts("div.f-bilgi div.tur a")
92
- year = secici.extract_year("ul.detay a[href*='yapim']")
93
- actors = secici.select_texts("li.oync li.oyuncu-k span.isim")
87
+ title = secici.select_text("div.f-bilgi h1") or secici.select_text("h1")
88
+ poster = secici.select_poster("div.resim img") or secici.meta_value("og:image")
89
+ description = secici.select_text("div.ackl div.scroll-liste") or secici.select_text("div.aciklama")
90
+ rating = secici.select_text("b.puandegistir") or secici.select_text("div.puan")
91
+ tags = secici.select_texts("div.f-bilgi div.tur a") or secici.select_texts("div.kategoriler a")
92
+ year = secici.extract_year("ul.detay a[href*='yapim']") or secici.extract_year("div.bilgi")
93
+ actors = secici.select_texts("li.oync li.oyuncu-k span.isim") or secici.select_texts("div.oyuncular a")
94
94
  _duration = secici.regex_first(r"<span>Süre:\s*</span>\s*(\d+)")
95
95
  duration = int(_duration) if _duration else None
96
96
 
@@ -46,16 +46,16 @@ class SuperFilmIzle(PluginBase):
46
46
  }
47
47
 
48
48
  async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
49
- istek = await self.httpx.get(f"{url}{page}")
49
+ istek = await self.async_cf_get(f"{url}{page}")
50
50
  secici = HTMLHelper(istek.text)
51
51
 
52
52
  results = []
53
53
  for veri in secici.select("div.movie-box"):
54
- title_text = veri.select_text("div.name a")
54
+ title_text = veri.select_text("div.name a") or veri.select_attr("div.name a", "title")
55
55
  if not title_text:
56
56
  continue
57
57
 
58
- href = veri.select_attr("div.name a", "href")
58
+ href = veri.select_attr("div.name a", "href") or veri.select_attr("a", "href")
59
59
  poster = veri.select_poster("img")
60
60
 
61
61
  results.append(MainPageResult(
@@ -68,16 +68,16 @@ class SuperFilmIzle(PluginBase):
68
68
  return results
69
69
 
70
70
  async def search(self, query: str) -> list[SearchResult]:
71
- istek = await self.httpx.get(f"{self.main_url}?s={query}")
71
+ istek = await self.async_cf_get(f"{self.main_url}?s={query}")
72
72
  secici = HTMLHelper(istek.text)
73
73
 
74
74
  results = []
75
75
  for veri in secici.select("div.movie-box"):
76
- title_text = veri.select_text("div.name a")
76
+ title_text = veri.select_text("div.name a") or veri.select_attr("div.name a", "title")
77
77
  if not title_text:
78
78
  continue
79
79
 
80
- href = veri.select_attr("div.name a", "href")
80
+ href = veri.select_attr("div.name a", "href") or veri.select_attr("a", "href")
81
81
  poster = veri.select_poster("img")
82
82
 
83
83
  results.append(SearchResult(
@@ -89,14 +89,14 @@ class SuperFilmIzle(PluginBase):
89
89
  return results
90
90
 
91
91
  async def load_item(self, url: str) -> MovieInfo:
92
- istek = await self.httpx.get(url)
92
+ istek = await self.async_cf_get(url)
93
93
  secici = HTMLHelper(istek.text)
94
94
 
95
- title = secici.select_text("div.film h1")
96
- poster = secici.select_poster("div.poster img")
97
- year = secici.extract_year("div.release a")
98
- description = secici.select_direct_text("div.description")
99
- tags = secici.select_texts("ul.post-categories li a")
95
+ title = secici.select_text("div.film h1") or secici.select_text("h1")
96
+ poster = secici.select_poster("div.poster img") or secici.meta_value("og:image")
97
+ year = secici.extract_year("div.release a") or secici.extract_year("div.bilgi")
98
+ description = secici.select_direct_text("div.description") or secici.select_text("div.aciklama")
99
+ tags = secici.select_texts("ul.post-categories li a") or secici.select_texts("div.kategoriler a")
100
100
  rating = secici.select_text("div.imdb-count")
101
101
  rating = rating.replace("IMDB Puanı", "") if rating else None
102
102
  actors = secici.select_texts("div.actors a") or secici.select_texts("div.cast a")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 3.4.0
3
+ Version: 3.4.2
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 yapı.
5
5
  Project-URL: Homepage, https://github.com/keyiflerolsun/KekikStream
6
6
  Project-URL: Repository, https://github.com/keyiflerolsun/KekikStream.git
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "KekikStream"
3
- version = "3.4.0"
3
+ version = "3.4.2"
4
4
  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 yapı."
5
5
  keywords = ["KekikStream", "KekikAkademi", "keyiflerolsun"]
6
6
  license = { text = "GPLv3+" }
@@ -1,131 +0,0 @@
1
- # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
-
3
- from KekikStream.Core import PluginBase, MainPageResult, SearchResult, SeriesInfo, Episode, ExtractResult, HTMLHelper
4
-
5
- class CizgiMax(PluginBase):
6
- name = "CizgiMax"
7
- language = "tr"
8
- main_url = "https://cizgimax.online"
9
- favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
10
- description = "ÇizgiMax ile Çizgi Film izlemek artık daha kolay, donmadan full hd ve reklamsız bir sitedir, içerisinde 500 den fazla çizgi film olan, Bu site bu işi profesyonelce yapıyor."
11
-
12
- main_page = {
13
- f"{main_url}/diziler?orderby=date&order=DESC" : "Son Eklenenler",
14
- f"{main_url}/diziler?s_type&tur[0]=aile&orderby=date&order=DESC" : "Aile",
15
- f"{main_url}/diziler?s_type&tur[0]=aksiyon-macera&orderby=date&order=DESC" : "Aksiyon & Macera",
16
- f"{main_url}/diziler?s_type&tur[0]=animasyon&orderby=date&order=DESC" : "Animasyon",
17
- f"{main_url}/diziler?s_type&tur[0]=belgesel&orderby=date&order=DESC" : "Belgesel",
18
- f"{main_url}/diziler?s_type&tur[0]=bilim-kurgu-fantazi&orderby=date&order=DESC" : "Bilim Kurgu & Fantazi",
19
- f"{main_url}/diziler?s_type&tur[0]=cocuklar&orderby=date&order=DESC" : "Çocuklar",
20
- f"{main_url}/diziler?s_type&tur[0]=dram&orderby=date&order=DESC" : "Dram",
21
- f"{main_url}/diziler?s_type&tur[0]=gizem&orderby=date&order=DESC" : "Gizem",
22
- f"{main_url}/diziler?s_type&tur[0]=komedi&orderby=date&order=DESC" : "Komedi",
23
- f"{main_url}/diziler?s_type&tur[0]=pembe-dizi&orderby=date&order=DESC" : "Pembe Dizi",
24
- f"{main_url}/diziler?s_type&tur[0]=suc&orderby=date&order=DESC" : "Suç",
25
- f"{main_url}/diziler?s_type&tur[0]=talk&orderby=date&order=DESC" : "Talk",
26
- f"{main_url}/diziler?s_type&tur[0]=vahsi-bati&orderby=date&order=DESC" : "Vahşi Batı",
27
- }
28
-
29
- async def get_main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
30
- sep = "&" if "?" in url else "?"
31
- page_url = f"{self.main_url}/diziler/page/{page}" + url.split("/diziler")[1] if "/diziler" in url else url
32
- istek = await self.httpx.get(page_url)
33
- secici = HTMLHelper(istek.text)
34
-
35
- results = []
36
- for veri in secici.select("ul.filter-results li"):
37
- title = veri.select_text("h2.truncate")
38
- href = veri.select_attr("div.poster-subject a", "href")
39
- poster = veri.select_attr("div.poster-media img", "data-src")
40
-
41
- if title and href:
42
- results.append(MainPageResult(
43
- category = category,
44
- title = title.strip(),
45
- url = self.fix_url(href),
46
- poster = self.fix_url(poster),
47
- ))
48
-
49
- return results
50
-
51
- async def search(self, query: str) -> list[SearchResult]:
52
- resp = await self.httpx.get(f"{self.main_url}/ajaxservice/index.php?qr={query}")
53
-
54
- results = []
55
- try:
56
- data = resp.json()
57
- items = data.get("data", {}).get("result", [])
58
- except Exception:
59
- return results
60
-
61
- for item in items:
62
- s_name = item.get("s_name", "")
63
- s_link = item.get("s_link", "")
64
- s_img = item.get("s_image")
65
-
66
- # Bölüm/Sezon sonuçlarını filtrele
67
- if any(kw in s_name for kw in [".Bölüm", ".Sezon", "-Sezon", "-izle"]):
68
- continue
69
-
70
- if s_name and s_link:
71
- results.append(SearchResult(
72
- title = s_name.strip(),
73
- url = self.fix_url(s_link),
74
- poster = self.fix_url(s_img),
75
- ))
76
-
77
- return results
78
-
79
- async def load_item(self, url: str) -> SeriesInfo:
80
- istek = await self.httpx.get(url)
81
- secici = HTMLHelper(istek.text)
82
-
83
- title = secici.select_text("h1.page-title") or ""
84
- poster = secici.select_attr("img.series-profile-thumb", "src")
85
- description = secici.select_text("#tv-series-desc") or secici.select_attr("meta[property='og:description']", "content")
86
- tags = secici.select_texts("div.genre-item a")
87
-
88
- episodes = []
89
- for veri in secici.select("div.asisotope div.ajax_post"):
90
- ep_name = veri.select_text("span.episode-names")
91
- ep_href = veri.select_attr("a", "href")
92
- szn_name = veri.select_text("span.season-name") or ""
93
-
94
- if not ep_name or not ep_href:
95
- continue
96
-
97
- ep_season, ep_num = secici.extract_season_episode(f"{szn_name} {ep_name}")
98
- ep_season = ep_season or 1
99
-
100
- episodes.append(Episode(
101
- season = ep_season,
102
- episode = ep_num,
103
- title = ep_name.strip(),
104
- url = self.fix_url(ep_href),
105
- ))
106
-
107
- return SeriesInfo(
108
- url = url,
109
- poster = self.fix_url(poster),
110
- title = title.strip(),
111
- description = description,
112
- tags = tags,
113
- episodes = episodes,
114
- )
115
-
116
- async def load_links(self, url: str) -> list[ExtractResult]:
117
- istek = await self.httpx.get(url)
118
- secici = HTMLHelper(istek.text)
119
-
120
- iframes = []
121
- for li in secici.select("ul.linkler li"):
122
- iframe = li.select_attr("a", "data-frame")
123
- if iframe:
124
- iframes.append(self.fix_url(iframe.strip()))
125
-
126
- tasks = [self.extract(url, referer=f"{self.main_url}/") for url in iframes]
127
- response = []
128
- for data in await self.gather_with_limit(tasks):
129
- self.collect_results(response, data)
130
-
131
- return self.deduplicate(response)
File without changes
File without changes