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.
- kekikstream-3.4.2/KekikStream/Plugins/CizgiMax.py +179 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziMom.py +31 -27
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DoramasLatinoX.py +7 -15
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Dramacool.py +1 -1
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SinemaCX.py +16 -16
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SuperFilmIzle.py +12 -12
- {kekikstream-3.4.0 → kekikstream-3.4.2}/PKG-INFO +1 -1
- {kekikstream-3.4.0 → kekikstream-3.4.2}/pyproject.toml +1 -1
- kekikstream-3.4.0/KekikStream/Plugins/CizgiMax.py +0 -131
- {kekikstream-3.4.0 → kekikstream-3.4.2}/.github/FUNDING.yml +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/.github/icons/KekikStream.png +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/.github/workflows/Kontrol.yml +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/.github/workflows/pypiYukle.yml +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/.gitignore +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KONTROL.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/CLI/__init__.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/CLI/pypi_kontrol.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/ExtractorBase.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/ExtractorLoader.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/ExtractorManager.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/ExtractorMixins.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/ExtractorModels.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/VideoPlayerExtractor.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Extractor/YTDLPCache.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/FallbackClients.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/HTMLHelper.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/MethodCache.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/Normalizer.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/TitleHelper.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Helpers/__init__.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Media/MediaHandler.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Media/MediaManager.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Plugin/FlwBasePlugin.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Plugin/PluginBase.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Plugin/PluginLoader.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Plugin/PluginManager.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/Plugin/PluginModels.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/UI/UIManager.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Core/__init__.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Abstream.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Alloha.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Ashdi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/BrightPath.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/BulguNet.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/BurstCloud.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/ByseSX.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/CizgiPass.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/CloseLoad.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/ContentX.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DarkiBox.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DonilasPlay.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DoodStream.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DosyaLoad.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DramaCool.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/DzenRu.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/EmbedLoad.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/EpikPlayer.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/ExPlay.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/FastPlay.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Fembed.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Filemoon.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/HDLoad.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/HDMomPlayer.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/HDPlayerSystem.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/HexLoad.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/HotStream.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/JFVid.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/JetCDN.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/JetTv.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/JetV.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/KentFilm.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Kodik.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/LuciferPlays.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/LuluStream.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MP4Upload.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MailRu.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MegaCloud.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MegaNZ.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MixDrop.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MixPlayHD.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MixTiger.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/MolyStream.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Netu.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/NiceAcik.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Odnoklassniki.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/PeaceMakerst.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/PixelDrain.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/PlayerFilmIzle.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/PlayerKorea.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/PlayerX.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/RapidVid.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Rumble.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/SaveFiles.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/SendVid.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/SetPlay.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/SetPrime.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/ShortICU.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/SibNet.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Sobreatsesuyp.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Stloadi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/StreamBox.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/StreamTape.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/StreamWish.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/TRsTX.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/TauVideo.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Tukipasti.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/TurboImgz.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/TurkeyPlayer.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Uqload.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VCTPlay.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Variyt.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Veev.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidBiz.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidHide.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidLoad.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidMoly.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidMoxy.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidPapi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VidStack.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VideoParktop.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/VideoSeyred.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Videostr.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Vidora.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Vidoza.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Voe.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Vtbe.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/XtremStream.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/YTDLP.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/YildizKisaFilm.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/YourUpload.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/Zeus.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Extractors/ZillaNetworks.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/AnimeAV.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/AnimeYTX.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/AnimeciX.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/AsyaAnimeleri.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/AsyaWatch.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/BFlix.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/BelgeselX.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Broken/FilmKovasi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Coflix.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DDizi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DMax.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziBox.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziGom.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziKorea.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziMag.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziPal.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziWatch.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DiziYou.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Dizify.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Dizilla.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DocumentaryArea.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/DramaFlix.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmBip.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmCennetim.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmEkseni.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmFC.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmIzleIlk.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmMakinesi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmMirasim.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmModu.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Filmatek.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FilmciBaba.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FlixHQ.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FlixLatam.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FullHDFilm.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/FullHDFilmizlesene.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/HDFilm.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/HDFilmCehennemi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/HDrezka.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Henaojara.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/InatBox.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/JPFilms.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/JetFilmizle.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Kinogo.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/KoreanTurk.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/KultFilmler.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Latanime.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Movies2Watch.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/MoviesJoy.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/MyFlixer.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/RecTV.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/RoketDizi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SFlix.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SelcukFlix.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SetFilmIzle.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SezonlukDizi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/ShowFlix.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/SineWix.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Sinefy.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Sinezy.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/StreamIMDB.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/TLC.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/TurkAnime.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Turkish123.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/TvDiziler.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/UAKino.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/UgurFilm.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/WFilmIzle.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Watch2Movies.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Watch32.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/WebDramaTurkey.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/WebteIzle.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/XPrime.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/YabanciDizi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/YeniWatch.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/YesilcamTV.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/YoTurkish.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/Plugins/Zoechip.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/__init__.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/__main__.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/KekikStream/requirements.txt +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/LICENSE +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/README.md +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/Multi.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/PluginAudit/audit_plugins.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/PluginAudit/clean_plugins.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/PluginAudit/master_audit.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/Single.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/Validator.py +0 -0
- {kekikstream-3.4.0 → kekikstream-3.4.2}/Tests/test_links.py +0 -0
- {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
|
|
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.
|
|
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
|
|
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.
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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.
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
49
|
-
|
|
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.
|
|
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
|
-
|
|
137
|
-
|
|
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.
|
|
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://
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|