From ce1c2b6b05c08b669357947e61ae40efce7fc50f Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Mon, 16 Feb 2015 10:46:28 +0100 Subject: module temp --- pyload/plugin/hoster/AlldebridCom.py | 87 -------- pyload/plugin/hoster/BayfilesCom.py | 87 -------- pyload/plugin/hoster/BezvadataCz.py | 94 -------- pyload/plugin/hoster/BillionuploadsCom.py | 24 -- pyload/plugin/hoster/BitshareCom.py | 157 ------------- pyload/plugin/hoster/BoltsharingCom.py | 18 -- pyload/plugin/hoster/CatShareNet.py | 67 ------ pyload/plugin/hoster/CloudzerNet.py | 20 -- pyload/plugin/hoster/CramitIn.py | 24 -- pyload/plugin/hoster/CrockoCom.py | 70 ------ pyload/plugin/hoster/CyberlockerCh.py | 18 -- pyload/plugin/hoster/CzshareCom.py | 152 ------------- pyload/plugin/hoster/DailymotionCom.py | 125 ----------- pyload/plugin/hoster/DataHu.py | 42 ---- pyload/plugin/hoster/DataportCz.py | 55 ----- pyload/plugin/hoster/DateiTo.py | 82 ------- pyload/plugin/hoster/DdlstorageCom.py | 19 -- pyload/plugin/hoster/DebridItaliaCom.py | 53 ----- pyload/plugin/hoster/DepositfilesCom.py | 123 ----------- pyload/plugin/hoster/DevhostSt.py | 48 ---- pyload/plugin/hoster/DlFreeFr.py | 136 ------------ pyload/plugin/hoster/DodanePl.py | 18 -- pyload/plugin/hoster/DuploadOrg.py | 18 -- pyload/plugin/hoster/EasybytezCom.py | 26 --- pyload/plugin/hoster/EdiskCz.py | 56 ----- pyload/plugin/hoster/EgoFilesCom.py | 18 -- pyload/plugin/hoster/EnteruploadCom.py | 18 -- pyload/plugin/hoster/EpicShareNet.py | 18 -- pyload/plugin/hoster/EuroshareEu.py | 67 ------ pyload/plugin/hoster/ExtabitCom.py | 79 ------- pyload/plugin/hoster/FastixRu.py | 76 ------- pyload/plugin/hoster/FastshareCz.py | 77 ------- pyload/plugin/hoster/FileApeCom.py | 18 -- pyload/plugin/hoster/FileParadoxIn.py | 25 --- pyload/plugin/hoster/FileSharkPl.py | 138 ------------ pyload/plugin/hoster/FileStoreTo.py | 37 ---- pyload/plugin/hoster/FilebeerInfo.py | 18 -- pyload/plugin/hoster/FilecloudIo.py | 125 ----------- pyload/plugin/hoster/FilefactoryCom.py | 90 -------- pyload/plugin/hoster/FilejungleCom.py | 29 --- pyload/plugin/hoster/FileomCom.py | 35 --- pyload/plugin/hoster/FilepostCom.py | 130 ----------- pyload/plugin/hoster/FilepupNet.py | 51 ----- pyload/plugin/hoster/FilerNet.py | 80 ------- pyload/plugin/hoster/FilerioCom.py | 25 --- pyload/plugin/hoster/FilesMailRu.py | 106 --------- pyload/plugin/hoster/FileserveCom.py | 217 ------------------ pyload/plugin/hoster/FileshareInUa.py | 18 -- pyload/plugin/hoster/FilesonicCom.py | 19 -- pyload/plugin/hoster/FilezyNet.py | 18 -- pyload/plugin/hoster/FiredriveCom.py | 18 -- pyload/plugin/hoster/FlyFilesNet.py | 45 ---- pyload/plugin/hoster/FourSharedCom.py | 61 ----- pyload/plugin/hoster/FreakshareCom.py | 176 --------------- pyload/plugin/hoster/FreeWayMe.py | 36 --- pyload/plugin/hoster/FreevideoCz.py | 18 -- pyload/plugin/hoster/FshareVn.py | 125 ----------- pyload/plugin/hoster/Ftp.py | 79 ------- pyload/plugin/hoster/GamefrontCom.py | 90 -------- pyload/plugin/hoster/GigapetaCom.py | 64 ------ pyload/plugin/hoster/GooIm.py | 39 ---- pyload/plugin/hoster/HellshareCz.py | 48 ---- pyload/plugin/hoster/HellspyCz.py | 18 -- pyload/plugin/hoster/HotfileCom.py | 21 -- pyload/plugin/hoster/HugefilesNet.py | 27 --- pyload/plugin/hoster/HundredEightyUploadCom.py | 27 --- pyload/plugin/hoster/IFileWs.py | 18 -- pyload/plugin/hoster/IcyFilesCom.py | 18 -- pyload/plugin/hoster/IfileIt.py | 67 ------ pyload/plugin/hoster/IfolderRu.py | 76 ------- pyload/plugin/hoster/JumbofilesCom.py | 38 ---- pyload/plugin/hoster/JunocloudMe.py | 28 --- pyload/plugin/hoster/Keep2ShareCc.py | 132 ----------- pyload/plugin/hoster/KickloadCom.py | 18 -- pyload/plugin/hoster/KingfilesNet.py | 82 ------- pyload/plugin/hoster/LemUploadsCom.py | 18 -- pyload/plugin/hoster/LetitbitNet.py | 142 ------------ pyload/plugin/hoster/LinksnappyCom.py | 76 ------- pyload/plugin/hoster/LoadTo.py | 75 ------- pyload/plugin/hoster/LomafileCom.py | 30 --- pyload/plugin/hoster/LuckyShareNet.py | 73 ------ pyload/plugin/hoster/MediafireCom.py | 124 ----------- pyload/plugin/hoster/MegaCoNz.py | 171 -------------- pyload/plugin/hoster/MegaDebridEu.py | 94 -------- pyload/plugin/hoster/MegaFilesSe.py | 18 -- pyload/plugin/hoster/MegaRapidCz.py | 71 ------ pyload/plugin/hoster/MegacrypterCom.py | 56 ----- pyload/plugin/hoster/MegareleaseOrg.py | 19 -- pyload/plugin/hoster/MegasharesCom.py | 113 ---------- pyload/plugin/hoster/MegauploadCom.py | 18 -- pyload/plugin/hoster/MegavideoCom.py | 19 -- pyload/plugin/hoster/MovReelCom.py | 26 --- pyload/plugin/hoster/MultishareCz.py | 80 ------- pyload/plugin/hoster/MyfastfileCom.py | 47 ---- pyload/plugin/hoster/MyvideoDe.py | 49 ----- pyload/plugin/hoster/NahrajCz.py | 18 -- pyload/plugin/hoster/NarodRu.py | 60 ----- pyload/plugin/hoster/NetloadIn.py | 294 ------------------------- pyload/plugin/hoster/NosuploadCom.py | 43 ---- pyload/plugin/hoster/NovafileCom.py | 31 --- pyload/plugin/hoster/NowDownloadSx.py | 64 ------ pyload/plugin/hoster/NowVideoSx.py | 44 ---- pyload/plugin/hoster/OboomCom.py | 145 ------------ pyload/plugin/hoster/OneFichierCom.py | 71 ------ pyload/plugin/hoster/OronCom.py | 19 -- pyload/plugin/hoster/OverLoadMe.py | 84 ------- pyload/plugin/hoster/PandaplaNet.py | 18 -- pyload/plugin/hoster/PornhostCom.py | 80 ------- pyload/plugin/hoster/PornhubCom.py | 89 -------- pyload/plugin/hoster/PotloadCom.py | 18 -- pyload/plugin/hoster/PremiumTo.py | 81 ------- pyload/plugin/hoster/PremiumizeMe.py | 56 ----- pyload/plugin/hoster/PromptfileCom.py | 45 ---- pyload/plugin/hoster/PrzeklejPl.py | 18 -- pyload/plugin/hoster/QuickshareCz.py | 90 -------- pyload/plugin/hoster/RPNetBiz.py | 85 ------- pyload/plugin/hoster/RapidfileshareNet.py | 31 --- pyload/plugin/hoster/RapidgatorNet.py | 199 ----------------- pyload/plugin/hoster/RapiduNet.py | 82 ------- pyload/plugin/hoster/RarefileNet.py | 28 --- pyload/plugin/hoster/RealdebridCom.py | 94 -------- pyload/plugin/hoster/RedtubeCom.py | 62 ------ pyload/plugin/hoster/RehostTo.py | 44 ---- pyload/plugin/hoster/RemixshareCom.py | 61 ----- pyload/plugin/hoster/RgHostNet.py | 26 --- pyload/plugin/hoster/RyushareCom.py | 81 ------- pyload/plugin/hoster/SafesharingEu.py | 25 --- pyload/plugin/hoster/SecureUploadEu.py | 23 -- pyload/plugin/hoster/SendmywayCom.py | 24 -- pyload/plugin/hoster/SendspaceCom.py | 60 ----- pyload/plugin/hoster/Share4WebCom.py | 22 -- pyload/plugin/hoster/Share76Com.py | 18 -- pyload/plugin/hoster/ShareFilesCo.py | 18 -- pyload/plugin/hoster/SharebeesCom.py | 18 -- pyload/plugin/hoster/ShareonlineBiz.py | 191 ---------------- pyload/plugin/hoster/ShareplaceCom.py | 89 -------- pyload/plugin/hoster/SharingmatrixCom.py | 19 -- pyload/plugin/hoster/ShragleCom.py | 19 -- pyload/plugin/hoster/SimplyPremiumCom.py | 82 ------- pyload/plugin/hoster/SimplydebridCom.py | 64 ------ pyload/plugin/hoster/SockshareCom.py | 20 -- pyload/plugin/hoster/SoundcloudCom.py | 57 ----- pyload/plugin/hoster/SpeedLoadOrg.py | 18 -- pyload/plugin/hoster/SpeedfileCz.py | 18 -- pyload/plugin/hoster/SpeedyshareCom.py | 51 ----- pyload/plugin/hoster/StorageTo.py | 18 -- pyload/plugin/hoster/StreamCz.py | 71 ------ pyload/plugin/hoster/StreamcloudEu.py | 31 --- pyload/plugin/hoster/TurbobitNet.py | 173 --------------- pyload/plugin/hoster/TurbouploadCom.py | 18 -- pyload/plugin/hoster/TusfilesNet.py | 35 --- pyload/plugin/hoster/TwoSharedCom.py | 41 ---- pyload/plugin/hoster/UlozTo.py | 164 -------------- pyload/plugin/hoster/UloziskoSk.py | 72 ------ pyload/plugin/hoster/UnibytesCom.py | 70 ------ pyload/plugin/hoster/UnrestrictLi.py | 91 -------- pyload/plugin/hoster/UpleaCom.py | 60 ----- pyload/plugin/hoster/UploadStationCom.py | 19 -- pyload/plugin/hoster/UploadableCh.py | 90 -------- pyload/plugin/hoster/UploadboxCom.py | 18 -- pyload/plugin/hoster/UploadedTo.py | 245 --------------------- pyload/plugin/hoster/UploadhereCom.py | 18 -- pyload/plugin/hoster/UploadheroCom.py | 81 ------- pyload/plugin/hoster/UploadingCom.py | 104 --------- pyload/plugin/hoster/UploadkingCom.py | 18 -- pyload/plugin/hoster/UpstoreNet.py | 73 ------ pyload/plugin/hoster/UptoboxCom.py | 34 --- pyload/plugin/hoster/VeehdCom.py | 81 ------- pyload/plugin/hoster/VeohCom.py | 53 ----- pyload/plugin/hoster/VidPlayNet.py | 26 --- pyload/plugin/hoster/VimeoCom.py | 75 ------- pyload/plugin/hoster/Vipleech4UCom.py | 18 -- pyload/plugin/hoster/WarserverCz.py | 18 -- pyload/plugin/hoster/WebshareCz.py | 62 ------ pyload/plugin/hoster/WrzucTo.py | 52 ----- pyload/plugin/hoster/WuploadCom.py | 19 -- pyload/plugin/hoster/X7To.py | 18 -- pyload/plugin/hoster/XFileSharingPro.py | 57 ----- pyload/plugin/hoster/XHamsterCom.py | 129 ----------- pyload/plugin/hoster/XVideosCom.py | 28 --- pyload/plugin/hoster/Xdcc.py | 207 ----------------- pyload/plugin/hoster/YibaishiwuCom.py | 55 ----- pyload/plugin/hoster/YoupornCom.py | 60 ----- pyload/plugin/hoster/YourfilesTo.py | 87 -------- pyload/plugin/hoster/YoutubeCom.py | 185 ---------------- pyload/plugin/hoster/ZDF.py | 59 ----- pyload/plugin/hoster/ZShareNet.py | 19 -- pyload/plugin/hoster/ZeveraCom.py | 42 ---- pyload/plugin/hoster/ZippyshareCom.py | 65 ------ pyload/plugin/hoster/__init__.py | 1 - 190 files changed, 11796 deletions(-) delete mode 100644 pyload/plugin/hoster/AlldebridCom.py delete mode 100644 pyload/plugin/hoster/BayfilesCom.py delete mode 100644 pyload/plugin/hoster/BezvadataCz.py delete mode 100644 pyload/plugin/hoster/BillionuploadsCom.py delete mode 100644 pyload/plugin/hoster/BitshareCom.py delete mode 100644 pyload/plugin/hoster/BoltsharingCom.py delete mode 100644 pyload/plugin/hoster/CatShareNet.py delete mode 100644 pyload/plugin/hoster/CloudzerNet.py delete mode 100644 pyload/plugin/hoster/CramitIn.py delete mode 100644 pyload/plugin/hoster/CrockoCom.py delete mode 100644 pyload/plugin/hoster/CyberlockerCh.py delete mode 100644 pyload/plugin/hoster/CzshareCom.py delete mode 100644 pyload/plugin/hoster/DailymotionCom.py delete mode 100644 pyload/plugin/hoster/DataHu.py delete mode 100644 pyload/plugin/hoster/DataportCz.py delete mode 100644 pyload/plugin/hoster/DateiTo.py delete mode 100644 pyload/plugin/hoster/DdlstorageCom.py delete mode 100644 pyload/plugin/hoster/DebridItaliaCom.py delete mode 100644 pyload/plugin/hoster/DepositfilesCom.py delete mode 100644 pyload/plugin/hoster/DevhostSt.py delete mode 100644 pyload/plugin/hoster/DlFreeFr.py delete mode 100644 pyload/plugin/hoster/DodanePl.py delete mode 100644 pyload/plugin/hoster/DuploadOrg.py delete mode 100644 pyload/plugin/hoster/EasybytezCom.py delete mode 100644 pyload/plugin/hoster/EdiskCz.py delete mode 100644 pyload/plugin/hoster/EgoFilesCom.py delete mode 100644 pyload/plugin/hoster/EnteruploadCom.py delete mode 100644 pyload/plugin/hoster/EpicShareNet.py delete mode 100644 pyload/plugin/hoster/EuroshareEu.py delete mode 100644 pyload/plugin/hoster/ExtabitCom.py delete mode 100644 pyload/plugin/hoster/FastixRu.py delete mode 100644 pyload/plugin/hoster/FastshareCz.py delete mode 100644 pyload/plugin/hoster/FileApeCom.py delete mode 100644 pyload/plugin/hoster/FileParadoxIn.py delete mode 100644 pyload/plugin/hoster/FileSharkPl.py delete mode 100644 pyload/plugin/hoster/FileStoreTo.py delete mode 100644 pyload/plugin/hoster/FilebeerInfo.py delete mode 100644 pyload/plugin/hoster/FilecloudIo.py delete mode 100644 pyload/plugin/hoster/FilefactoryCom.py delete mode 100644 pyload/plugin/hoster/FilejungleCom.py delete mode 100644 pyload/plugin/hoster/FileomCom.py delete mode 100644 pyload/plugin/hoster/FilepostCom.py delete mode 100644 pyload/plugin/hoster/FilepupNet.py delete mode 100644 pyload/plugin/hoster/FilerNet.py delete mode 100644 pyload/plugin/hoster/FilerioCom.py delete mode 100644 pyload/plugin/hoster/FilesMailRu.py delete mode 100644 pyload/plugin/hoster/FileserveCom.py delete mode 100644 pyload/plugin/hoster/FileshareInUa.py delete mode 100644 pyload/plugin/hoster/FilesonicCom.py delete mode 100644 pyload/plugin/hoster/FilezyNet.py delete mode 100644 pyload/plugin/hoster/FiredriveCom.py delete mode 100644 pyload/plugin/hoster/FlyFilesNet.py delete mode 100644 pyload/plugin/hoster/FourSharedCom.py delete mode 100644 pyload/plugin/hoster/FreakshareCom.py delete mode 100644 pyload/plugin/hoster/FreeWayMe.py delete mode 100644 pyload/plugin/hoster/FreevideoCz.py delete mode 100644 pyload/plugin/hoster/FshareVn.py delete mode 100644 pyload/plugin/hoster/Ftp.py delete mode 100644 pyload/plugin/hoster/GamefrontCom.py delete mode 100644 pyload/plugin/hoster/GigapetaCom.py delete mode 100644 pyload/plugin/hoster/GooIm.py delete mode 100644 pyload/plugin/hoster/HellshareCz.py delete mode 100644 pyload/plugin/hoster/HellspyCz.py delete mode 100644 pyload/plugin/hoster/HotfileCom.py delete mode 100644 pyload/plugin/hoster/HugefilesNet.py delete mode 100644 pyload/plugin/hoster/HundredEightyUploadCom.py delete mode 100644 pyload/plugin/hoster/IFileWs.py delete mode 100644 pyload/plugin/hoster/IcyFilesCom.py delete mode 100644 pyload/plugin/hoster/IfileIt.py delete mode 100644 pyload/plugin/hoster/IfolderRu.py delete mode 100644 pyload/plugin/hoster/JumbofilesCom.py delete mode 100644 pyload/plugin/hoster/JunocloudMe.py delete mode 100644 pyload/plugin/hoster/Keep2ShareCc.py delete mode 100644 pyload/plugin/hoster/KickloadCom.py delete mode 100644 pyload/plugin/hoster/KingfilesNet.py delete mode 100644 pyload/plugin/hoster/LemUploadsCom.py delete mode 100644 pyload/plugin/hoster/LetitbitNet.py delete mode 100644 pyload/plugin/hoster/LinksnappyCom.py delete mode 100644 pyload/plugin/hoster/LoadTo.py delete mode 100644 pyload/plugin/hoster/LomafileCom.py delete mode 100644 pyload/plugin/hoster/LuckyShareNet.py delete mode 100644 pyload/plugin/hoster/MediafireCom.py delete mode 100644 pyload/plugin/hoster/MegaCoNz.py delete mode 100644 pyload/plugin/hoster/MegaDebridEu.py delete mode 100644 pyload/plugin/hoster/MegaFilesSe.py delete mode 100644 pyload/plugin/hoster/MegaRapidCz.py delete mode 100644 pyload/plugin/hoster/MegacrypterCom.py delete mode 100644 pyload/plugin/hoster/MegareleaseOrg.py delete mode 100644 pyload/plugin/hoster/MegasharesCom.py delete mode 100644 pyload/plugin/hoster/MegauploadCom.py delete mode 100644 pyload/plugin/hoster/MegavideoCom.py delete mode 100644 pyload/plugin/hoster/MovReelCom.py delete mode 100644 pyload/plugin/hoster/MultishareCz.py delete mode 100644 pyload/plugin/hoster/MyfastfileCom.py delete mode 100644 pyload/plugin/hoster/MyvideoDe.py delete mode 100644 pyload/plugin/hoster/NahrajCz.py delete mode 100644 pyload/plugin/hoster/NarodRu.py delete mode 100644 pyload/plugin/hoster/NetloadIn.py delete mode 100644 pyload/plugin/hoster/NosuploadCom.py delete mode 100644 pyload/plugin/hoster/NovafileCom.py delete mode 100644 pyload/plugin/hoster/NowDownloadSx.py delete mode 100644 pyload/plugin/hoster/NowVideoSx.py delete mode 100644 pyload/plugin/hoster/OboomCom.py delete mode 100644 pyload/plugin/hoster/OneFichierCom.py delete mode 100644 pyload/plugin/hoster/OronCom.py delete mode 100644 pyload/plugin/hoster/OverLoadMe.py delete mode 100644 pyload/plugin/hoster/PandaplaNet.py delete mode 100644 pyload/plugin/hoster/PornhostCom.py delete mode 100644 pyload/plugin/hoster/PornhubCom.py delete mode 100644 pyload/plugin/hoster/PotloadCom.py delete mode 100644 pyload/plugin/hoster/PremiumTo.py delete mode 100644 pyload/plugin/hoster/PremiumizeMe.py delete mode 100644 pyload/plugin/hoster/PromptfileCom.py delete mode 100644 pyload/plugin/hoster/PrzeklejPl.py delete mode 100644 pyload/plugin/hoster/QuickshareCz.py delete mode 100644 pyload/plugin/hoster/RPNetBiz.py delete mode 100644 pyload/plugin/hoster/RapidfileshareNet.py delete mode 100644 pyload/plugin/hoster/RapidgatorNet.py delete mode 100644 pyload/plugin/hoster/RapiduNet.py delete mode 100644 pyload/plugin/hoster/RarefileNet.py delete mode 100644 pyload/plugin/hoster/RealdebridCom.py delete mode 100644 pyload/plugin/hoster/RedtubeCom.py delete mode 100644 pyload/plugin/hoster/RehostTo.py delete mode 100644 pyload/plugin/hoster/RemixshareCom.py delete mode 100644 pyload/plugin/hoster/RgHostNet.py delete mode 100644 pyload/plugin/hoster/RyushareCom.py delete mode 100644 pyload/plugin/hoster/SafesharingEu.py delete mode 100644 pyload/plugin/hoster/SecureUploadEu.py delete mode 100644 pyload/plugin/hoster/SendmywayCom.py delete mode 100644 pyload/plugin/hoster/SendspaceCom.py delete mode 100644 pyload/plugin/hoster/Share4WebCom.py delete mode 100644 pyload/plugin/hoster/Share76Com.py delete mode 100644 pyload/plugin/hoster/ShareFilesCo.py delete mode 100644 pyload/plugin/hoster/SharebeesCom.py delete mode 100644 pyload/plugin/hoster/ShareonlineBiz.py delete mode 100644 pyload/plugin/hoster/ShareplaceCom.py delete mode 100644 pyload/plugin/hoster/SharingmatrixCom.py delete mode 100644 pyload/plugin/hoster/ShragleCom.py delete mode 100644 pyload/plugin/hoster/SimplyPremiumCom.py delete mode 100644 pyload/plugin/hoster/SimplydebridCom.py delete mode 100644 pyload/plugin/hoster/SockshareCom.py delete mode 100644 pyload/plugin/hoster/SoundcloudCom.py delete mode 100644 pyload/plugin/hoster/SpeedLoadOrg.py delete mode 100644 pyload/plugin/hoster/SpeedfileCz.py delete mode 100644 pyload/plugin/hoster/SpeedyshareCom.py delete mode 100644 pyload/plugin/hoster/StorageTo.py delete mode 100644 pyload/plugin/hoster/StreamCz.py delete mode 100644 pyload/plugin/hoster/StreamcloudEu.py delete mode 100644 pyload/plugin/hoster/TurbobitNet.py delete mode 100644 pyload/plugin/hoster/TurbouploadCom.py delete mode 100644 pyload/plugin/hoster/TusfilesNet.py delete mode 100644 pyload/plugin/hoster/TwoSharedCom.py delete mode 100644 pyload/plugin/hoster/UlozTo.py delete mode 100644 pyload/plugin/hoster/UloziskoSk.py delete mode 100644 pyload/plugin/hoster/UnibytesCom.py delete mode 100644 pyload/plugin/hoster/UnrestrictLi.py delete mode 100644 pyload/plugin/hoster/UpleaCom.py delete mode 100644 pyload/plugin/hoster/UploadStationCom.py delete mode 100644 pyload/plugin/hoster/UploadableCh.py delete mode 100644 pyload/plugin/hoster/UploadboxCom.py delete mode 100644 pyload/plugin/hoster/UploadedTo.py delete mode 100644 pyload/plugin/hoster/UploadhereCom.py delete mode 100644 pyload/plugin/hoster/UploadheroCom.py delete mode 100644 pyload/plugin/hoster/UploadingCom.py delete mode 100644 pyload/plugin/hoster/UploadkingCom.py delete mode 100644 pyload/plugin/hoster/UpstoreNet.py delete mode 100644 pyload/plugin/hoster/UptoboxCom.py delete mode 100644 pyload/plugin/hoster/VeehdCom.py delete mode 100644 pyload/plugin/hoster/VeohCom.py delete mode 100644 pyload/plugin/hoster/VidPlayNet.py delete mode 100644 pyload/plugin/hoster/VimeoCom.py delete mode 100644 pyload/plugin/hoster/Vipleech4UCom.py delete mode 100644 pyload/plugin/hoster/WarserverCz.py delete mode 100644 pyload/plugin/hoster/WebshareCz.py delete mode 100644 pyload/plugin/hoster/WrzucTo.py delete mode 100644 pyload/plugin/hoster/WuploadCom.py delete mode 100644 pyload/plugin/hoster/X7To.py delete mode 100644 pyload/plugin/hoster/XFileSharingPro.py delete mode 100644 pyload/plugin/hoster/XHamsterCom.py delete mode 100644 pyload/plugin/hoster/XVideosCom.py delete mode 100644 pyload/plugin/hoster/Xdcc.py delete mode 100644 pyload/plugin/hoster/YibaishiwuCom.py delete mode 100644 pyload/plugin/hoster/YoupornCom.py delete mode 100644 pyload/plugin/hoster/YourfilesTo.py delete mode 100644 pyload/plugin/hoster/YoutubeCom.py delete mode 100644 pyload/plugin/hoster/ZDF.py delete mode 100644 pyload/plugin/hoster/ZShareNet.py delete mode 100644 pyload/plugin/hoster/ZeveraCom.py delete mode 100644 pyload/plugin/hoster/ZippyshareCom.py delete mode 100644 pyload/plugin/hoster/__init__.py (limited to 'pyload/plugin/hoster') diff --git a/pyload/plugin/hoster/AlldebridCom.py b/pyload/plugin/hoster/AlldebridCom.py deleted file mode 100644 index 533f7beb6..000000000 --- a/pyload/plugin/hoster/AlldebridCom.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from random import randrange -from urllib import unquote - -from pyload.utils import json_loads -from pyload.plugin.Hoster import Hoster -from pyload.utils import parseFileSize - - -class AlldebridCom(Hoster): - __name__ = "AlldebridCom" - __type__ = "hoster" - __version__ = "0.34" - - __pattern__ = r'https?://(?:[^/]*\.)?alldebrid\..*' - - __description__ = """Alldebrid.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Andy Voigt", "spamsales@online.de")] - - - def getFilename(self, url): - try: - name = unquote(url.rsplit("/", 1)[1]) - except IndexError: - name = "Unknown_Filename..." - if name.endswith("..."): # incomplete filename, append random stuff - name += "%s.tmp" % randrange(100, 999) - return name - - - def setup(self): - self.chunkLimit = 16 - self.resumeDownload = True - - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "AllDebrid") - self.fail(_("No AllDebrid account provided")) - else: - self.logDebug("Old URL: %s" % pyfile.url) - password = self.getPassword().splitlines()[0] or "" - - data = json_loads(self.load("http://www.alldebrid.com/service.php", - get={'link': pyfile.url, 'json': "true", 'pw': password})) - - self.logDebug("Json data", data) - - if data['error']: - if data['error'] == "This link isn't available on the hoster website.": - self.offline() - else: - self.logWarning(data['error']) - self.tempOffline() - else: - if pyfile.name and not pyfile.name.endswith('.tmp'): - pyfile.name = data['filename'] - pyfile.size = parseFileSize(data['filesize']) - new_url = data['link'] - - if self.getConfig("https"): - new_url = new_url.replace("http://", "https://") - else: - new_url = new_url.replace("https://", "http://") - - if new_url != pyfile.url: - self.logDebug("New URL: %s" % new_url) - - if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"): - #only use when name wasnt already set - pyfile.name = self.getFilename(new_url) - - self.download(new_url, disposition=True) - - check = self.checkDownload({'error': "An error occured while processing your request", - 'empty': re.compile(r"^$")}) - - if check == "error": - self.retry(wait_time=60, reason=_("An error occured while generating link")) - elif check == "empty": - self.retry(wait_time=60, reason=_("Downloaded File was empty")) diff --git a/pyload/plugin/hoster/BayfilesCom.py b/pyload/plugin/hoster/BayfilesCom.py deleted file mode 100644 index 4f2469759..000000000 --- a/pyload/plugin/hoster/BayfilesCom.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import time - -from pyload.utils import json_loads -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class BayfilesCom(SimpleHoster): - __name__ = "BayfilesCom" - __type__ = "hoster" - __version__ = "0.08" - - __pattern__ = r'https?://(?:www\.)?bayfiles\.(com|net)/file/(?P\w+/\w+/[^/]+)' - - __description__ = """Bayfiles.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz"), - ("Walter Purcaro", "vuolter@gmail.com")] - - - INFO_PATTERN = r'

[^<]*(?P[\d .,]+)(?P[\w^_]+)

' - OFFLINE_PATTERN = r'(

The requested file could not be found.

|404 Not Found)' - - WAIT_PATTERN = r'>Your IP [\d.]* has recently downloaded a file\. Upgrade to premium or wait (\d+) minutes\.<' - VARS_PATTERN = r'var vfid = (\d+);\s*var delay = (\d+);' - FREE_LINK_PATTERN = r'javascript:window\.location\.href = \'(.+?)\';' - PREMIUM_LINK_PATTERN = r'(?:BayFiles"), - "notfound": re.compile(r"404 Not Found") - }) - if check == "waitforfreeslots": - self.retry(30, 5 * 60, "Wait for free slot") - elif check == "notfound": - self.retry(30, 5 * 60, "404 Not found") - - -getInfo = create_getInfo(BayfilesCom) diff --git a/pyload/plugin/hoster/BezvadataCz.py b/pyload/plugin/hoster/BezvadataCz.py deleted file mode 100644 index 0b65c9e8b..000000000 --- a/pyload/plugin/hoster/BezvadataCz.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class BezvadataCz(SimpleHoster): - __name__ = "BezvadataCz" - __type__ = "hoster" - __version__ = "0.25" - - __pattern__ = r'http://(?:www\.)?bezvadata\.cz/stahnout/.*' - - __description__ = """BezvaData.cz hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'

Soubor: (?P[^<]+)

' - SIZE_PATTERN = r'
  • Velikost: (?P[^<]+)
  • ' - OFFLINE_PATTERN = r'BezvaData \| Soubor nenalezen' - - - def setup(self): - self.resumeDownload = True - self.multiDL = True - - - def handleFree(self): - #download button - m = re.search(r'
    ', self.html) - if m is None: - self.error(_("Page 2 URL not found")) - url = "http://bezvadata.cz%s" % m.group(1) - self.logDebug("DL URL %s" % url) - - #countdown - m = re.search(r'id="countdown">(\d\d):(\d\d)<', self.html) - wait_time = (int(m.group(1)) * 60 + int(m.group(2))) if m else 120 - self.wait(wait_time, False) - - self.download(url) - - - def checkErrors(self): - if 'images/button-download-disable.png' in self.html: - self.longWait(5 * 60, 24) #: parallel dl limit - elif '
    (?P[\d.,]+) (?P[\w^_]+)' - - -getInfo = create_getInfo(BillionuploadsCom) diff --git a/pyload/plugin/hoster/BitshareCom.py b/pyload/plugin/hoster/BitshareCom.py deleted file mode 100644 index 781f31df1..000000000 --- a/pyload/plugin/hoster/BitshareCom.py +++ /dev/null @@ -1,157 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import with_statement - -import re - -from pyload.plugin.internal.captcha import ReCaptcha -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class BitshareCom(SimpleHoster): - __name__ = "BitshareCom" - __type__ = "hoster" - __version__ = "0.51" - - __pattern__ = r'http://(?:www\.)?bitshare\.com/(files/(?P\w+)(/(?P.*?)\.html)?|\?f=(?P\w+))' - - __description__ = """Bitshare.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Paul King", ""), - ("fragonib", "fragonib[AT]yahoo[DOT]es")] - - - INFO_PATTERN = r'Downloading (?P.+) - (?P[\d.,]+) (?P[\w^_]+)' - OFFLINE_PATTERN = r'(>We are sorry, but the requested file was not found in our database|>Error - File not available<|The file was deleted either by the uploader, inactivity or due to copyright claim)' - - COOKIES = [("bitshare.com", "language_selection", "EN")] - - AJAXID_PATTERN = r'var ajaxdl = "(.*?)";' - TRAFFIC_USED_UP = r'Your Traffic is used up for today. Upgrade to premium to continue!' - - - def setup(self): - self.multiDL = self.premium - self.chunkLimit = 1 - - - def process(self, pyfile): - if self.premium: - self.account.relogin(self.user) - - self.pyfile = pyfile - - # File id - m = re.match(self.__pattern__, pyfile.url) - self.file_id = max(m.group('id1'), m.group('id2')) - self.logDebug("File id is [%s]" % self.file_id) - - # Load main page - self.html = self.load(pyfile.url, ref=False, decode=True) - - # Check offline - if re.search(self.OFFLINE_PATTERN, self.html): - self.offline() - - # Check Traffic used up - if re.search(self.TRAFFIC_USED_UP, self.html): - self.logInfo(_("Your Traffic is used up for today")) - self.wait(30 * 60, True) - self.retry() - - # File name - m = re.match(self.__pattern__, pyfile.url) - name1 = m.group('name') if m else None - m = re.search(self.INFO_PATTERN, self.html) - name2 = m.group('N') if m else None - pyfile.name = max(name1, name2) - - # Ajax file id - self.ajaxid = re.search(self.AJAXID_PATTERN, self.html).group(1) - self.logDebug("File ajax id is [%s]" % self.ajaxid) - - # This may either download our file or forward us to an error page - url = self.getDownloadUrl() - self.download(url) - - check = self.checkDownload({"404": ">404 Not Found<", "Error": ">Error occured<"}) - if check == "404": - self.retry(3, 60, 'Error 404') - elif check == "error": - self.retry(5, 5 * 60, "Bitshare host : Error occured") - - - def getDownloadUrl(self): - # Return location if direct download is active - if self.premium: - header = self.load(self.pyfile.url, cookies=True, just_header=True) - if 'location' in header: - return header['location'] - - # Get download info - self.logDebug("Getting download info") - res = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html", - post={"request": "generateID", "ajaxid": self.ajaxid}) - self.handleErrors(res, ':') - parts = res.split(":") - filetype = parts[0] - wait = int(parts[1]) - captcha = int(parts[2]) - self.logDebug("Download info [type: '%s', waiting: %d, captcha: %d]" % (filetype, wait, captcha)) - - # Waiting - if wait > 0: - self.logDebug("Waiting %d seconds." % wait) - if wait < 120: - self.wait(wait, False) - else: - self.wait(wait - 55, True) - self.retry() - - # Resolve captcha - if captcha == 1: - self.logDebug("File is captcha protected") - recaptcha = ReCaptcha(self) - - # Try up to 3 times - for i in xrange(3): - challenge, response = recaptcha.challenge() - res = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html", - post={"request" : "validateCaptcha", - "ajaxid" : self.ajaxid, - "recaptcha_challenge_field": challenge, - "recaptcha_response_field" : response}) - if self.handleCaptchaErrors(res): - break - - # Get download URL - self.logDebug("Getting download url") - res = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html", - post={"request": "getDownloadURL", "ajaxid": self.ajaxid}) - self.handleErrors(res, '#') - url = res.split("#")[-1] - - return url - - - def handleErrors(self, res, separator): - self.logDebug("Checking response [%s]" % res) - if "ERROR:Session timed out" in res: - self.retry() - elif "ERROR" in res: - msg = res.split(separator)[-1] - self.fail(msg) - - - def handleCaptchaErrors(self, res): - self.logDebug("Result of captcha resolving [%s]" % res) - if "SUCCESS" in res: - self.correctCaptcha() - return True - elif "ERROR:SESSION ERROR" in res: - self.retry() - - self.invalidCaptcha() - - -getInfo = create_getInfo(BitshareCom) diff --git a/pyload/plugin/hoster/BoltsharingCom.py b/pyload/plugin/hoster/BoltsharingCom.py deleted file mode 100644 index 93f6d619a..000000000 --- a/pyload/plugin/hoster/BoltsharingCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class BoltsharingCom(DeadHoster): - __name__ = "BoltsharingCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?boltsharing\.com/\w{12}' - - __description__ = """Boltsharing.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - -getInfo = create_getInfo(BoltsharingCom) diff --git a/pyload/plugin/hoster/CatShareNet.py b/pyload/plugin/hoster/CatShareNet.py deleted file mode 100644 index 2a2fb55da..000000000 --- a/pyload/plugin/hoster/CatShareNet.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.captcha import ReCaptcha -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class CatShareNet(SimpleHoster): - __name__ = "CatShareNet" - __type__ = "hoster" - __version__ = "0.08" - - __pattern__ = r'http://(?:www\.)?catshare\.net/\w{16}' - - __description__ = """CatShare.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("z00nx", "z00nx0@gmail.com"), - ("prOq", ""), - ("Walter Purcaro", "vuolter@gmail.com")] - - - TEXT_ENCODING = True - - INFO_PATTERN = r'(?P<N>.+) \((?P<S>[\d.,]+) (?P<U>[\w^_]+)\)<' - OFFLINE_PATTERN = ur'Podany plik został usunięty\s*</div>' - - IP_BLOCKED_PATTERN = ur'>Nasz serwis wykrył że Twój adres IP nie pochodzi z Polski.<' - SECONDS_PATTERN = 'var\scount\s=\s(\d+);' - LINK_PATTERN = r'<form action="(.+?)" method="GET">' - - - def setup(self): - self.multiDL = self.premium - self.resumeDownload = True - - - def getFileInfo(self): - m = re.search(self.IP_BLOCKED_PATTERN, self.html) - if m: - self.fail(_("Only connections from Polish IP address are allowed")) - return super(CatShareNet, self).getFileInfo() - - - def handleFree(self): - m = re.search(self.SECONDS_PATTERN, self.html) - if m: - wait_time = int(m.group(1)) - self.wait(wait_time, True) - - recaptcha = ReCaptcha(self) - - challenge, response = recaptcha.challenge() - self.html = self.load(self.pyfile.url, - post={'recaptcha_challenge_field': challenge, - 'recaptcha_response_field' : response}) - - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.invalidCaptcha() - self.retry(reason=_("Wrong captcha entered")) - - dl_link = m.group(1) - self.download(dl_link, disposition=True) - - -getInfo = create_getInfo(CatShareNet) diff --git a/pyload/plugin/hoster/CloudzerNet.py b/pyload/plugin/hoster/CloudzerNet.py deleted file mode 100644 index cb764e335..000000000 --- a/pyload/plugin/hoster/CloudzerNet.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class CloudzerNet(DeadHoster): - __name__ = "CloudzerNet" - __type__ = "hoster" - __version__ = "0.05" - - __pattern__ = r'https?://(?:www\.)?(cloudzer\.net/file/|clz\.to/(file/)?)\w+' - - __description__ = """Cloudzer.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("gs", "I-_-I-_-I@web.de"), - ("z00nx", "z00nx0@gmail.com"), - ("stickell", "l.stickell@yahoo.it")] - - -getInfo = create_getInfo(CloudzerNet) diff --git a/pyload/plugin/hoster/CramitIn.py b/pyload/plugin/hoster/CramitIn.py deleted file mode 100644 index f39f33a3e..000000000 --- a/pyload/plugin/hoster/CramitIn.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class CramitIn(XFSHoster): - __name__ = "CramitIn" - __type__ = "hoster" - __version__ = "0.07" - - __pattern__ = r'http://(?:www\.)?cramit\.in/\w{12}' - - __description__ = """Cramit.in hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - HOSTER_DOMAIN = "cramit.in" - - INFO_PATTERN = r'<span class=t2>\s*(?P<N>.*?)</span>.*?<small>\s*\((?P<S>.*?)\)' - LINK_PATTERN = r'href="(http://cramit\.in/file_download/.*?)"' - - -getInfo = create_getInfo(CramitIn) diff --git a/pyload/plugin/hoster/CrockoCom.py b/pyload/plugin/hoster/CrockoCom.py deleted file mode 100644 index f12b2e969..000000000 --- a/pyload/plugin/hoster/CrockoCom.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.captcha import ReCaptcha -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class CrockoCom(SimpleHoster): - __name__ = "CrockoCom" - __type__ = "hoster" - __version__ = "0.17" - - __pattern__ = r'http://(?:www\.)?(crocko|easy-share)\.com/\w+' - - __description__ = """Crocko hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'<span class="fz24">Download:\s*<strong>(?P<N>.*)' - SIZE_PATTERN = r'<span class="tip1"><span class="inner">(?P<S>[^<]+)</span></span>' - OFFLINE_PATTERN = r'<h1>Sorry,<br />the page you\'re looking for <br />isn\'t here.</h1>|File not found' - - CAPTCHA_PATTERN = re.compile(r"u='(/file_contents/captcha/\w+)';\s*w='(\d+)';") - - FORM_PATTERN = r'<form method="post" action="([^"]+)">(.*?)</form>' - FORM_INPUT_PATTERN = r'<input[^>]* name="?([^" ]+)"? value="?([^" ]+)"?[^>]*>' - - NAME_REPLACEMENTS = [(r'<[^>]*>', '')] - - - def handleFree(self): - if "You need Premium membership to download this file." in self.html: - self.fail(_("You need Premium membership to download this file")) - - for _i in xrange(5): - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m: - url, wait_time = 'http://crocko.com' + m.group(1), int(m.group(2)) - self.wait(wait_time) - self.html = self.load(url) - else: - break - - m = re.search(self.FORM_PATTERN, self.html, re.S) - if m is None: - self.error(_("FORM_PATTERN not found")) - - action, form = m.groups() - inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form)) - recaptcha = ReCaptcha(self) - - for _i in xrange(5): - inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge() - self.download(action, post=inputs) - - check = self.checkDownload({ - "captcha_err": recaptcha.KEY_AJAX_PATTERN - }) - - if check == "captcha_err": - self.invalidCaptcha() - else: - break - else: - self.fail(_("No valid captcha solution received")) - - -getInfo = create_getInfo(CrockoCom) diff --git a/pyload/plugin/hoster/CyberlockerCh.py b/pyload/plugin/hoster/CyberlockerCh.py deleted file mode 100644 index 1c6a04caf..000000000 --- a/pyload/plugin/hoster/CyberlockerCh.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class CyberlockerCh(DeadHoster): - __name__ = "CyberlockerCh" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?cyberlocker\.ch/\w+' - - __description__ = """Cyberlocker.ch hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] - - -getInfo = create_getInfo(CyberlockerCh) diff --git a/pyload/plugin/hoster/CzshareCom.py b/pyload/plugin/hoster/CzshareCom.py deleted file mode 100644 index ad4e36ce7..000000000 --- a/pyload/plugin/hoster/CzshareCom.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://czshare.com/5278880/random.bin - -import re - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo -from pyload.utils import parseFileSize - - -class CzshareCom(SimpleHoster): - __name__ = "CzshareCom" - __type__ = "hoster" - __version__ = "0.95" - - __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/(\d+/|download\.php\?).*' - - __description__ = """CZshare.com hoster plugin, now Sdilej.cz""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'<div class="tab" id="parameters">\s*<p>\s*Cel. n.zev: <a href=[^>]*>(?P<N>[^<]+)</a>' - SIZE_PATTERN = r'<div class="tab" id="category">(?:\s*<p>[^\n]*</p>)*\s*Velikost:\s*(?P<S>[\d .,]+)(?P<U>[\w^_]+)\s*</div>' - OFFLINE_PATTERN = r'<div class="header clearfix">\s*<h2 class="red">' - - SIZE_REPLACEMENTS = [(' ', '')] - URL_REPLACEMENTS = [(r'http://[^/]*/download.php\?.*?id=(\w+).*', r'http://sdilej.cz/\1/x/')] - - FORCE_CHECK_TRAFFIC = True - - FREE_URL_PATTERN = r'<a href="([^"]+)" class="page-download">[^>]*alt="([^"]+)" /></a>' - FREE_FORM_PATTERN = r'<form action="download\.php" method="post">\s*<img src="captcha\.php" id="captcha" />(.*?)</form>' - PREMIUM_FORM_PATTERN = r'<form action="/profi_down\.php" method="post">(.*?)</form>' - FORM_INPUT_PATTERN = r'<input[^>]* name="([^"]+)" value="([^"]+)"[^>]*/>' - MULTIDL_PATTERN = r'<p><font color=\'red\'>Z[^<]*PROFI.</font></p>' - USER_CREDIT_PATTERN = r'<div class="credit">\s*kredit: <strong>([\d .,]+)(\w+)</strong>\s*</div><!-- .credit -->' - - - def checkTrafficLeft(self): - # check if user logged in - m = re.search(self.USER_CREDIT_PATTERN, self.html) - if m is None: - self.account.relogin(self.user) - self.html = self.load(self.pyfile.url, cookies=True, decode=True) - m = re.search(self.USER_CREDIT_PATTERN, self.html) - if m is None: - return False - - # check user credit - try: - credit = parseFileSize(m.group(1).replace(' ', ''), m.group(2)) - self.logInfo(_("Premium download for %i KiB of Credit") % (self.pyfile.size / 1024)) - self.logInfo(_("User %s has %i KiB left") % (self.user, credit / 1024)) - if credit < self.pyfile.size: - self.logInfo(_("Not enough credit to download file: %s") % self.pyfile.name) - return False - except Exception, e: - # let's continue and see what happens... - self.logError(e) - - return True - - - def handlePremium(self): - # parse download link - try: - form = re.search(self.PREMIUM_FORM_PATTERN, self.html, re.S).group(1) - inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form)) - except Exception, e: - self.logError(e) - self.resetAccount() - - # download the file, destination is determined by pyLoad - self.download("http://sdilej.cz/profi_down.php", post=inputs, disposition=True) - self.checkDownloadedFile() - - - def handleFree(self): - # get free url - m = re.search(self.FREE_URL_PATTERN, self.html) - if m is None: - self.error(_("FREE_URL_PATTERN not found")) - parsed_url = "http://sdilej.cz" + m.group(1) - self.logDebug("PARSED_URL:" + parsed_url) - - # get download ticket and parse html - self.html = self.load(parsed_url, cookies=True, decode=True) - if re.search(self.MULTIDL_PATTERN, self.html): - self.longWait(5 * 60, 12) - - try: - form = re.search(self.FREE_FORM_PATTERN, self.html, re.S).group(1) - inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form)) - self.pyfile.size = int(inputs['size']) - except Exception, e: - self.logError(e) - self.error(_("Form")) - - # get and decrypt captcha - captcha_url = 'http://sdilej.cz/captcha.php' - for _i in xrange(5): - inputs['captchastring2'] = self.decryptCaptcha(captcha_url) - self.html = self.load(parsed_url, cookies=True, post=inputs, decode=True) - if u"<li>Zadaný ověřovací kód nesouhlasí!</li>" in self.html: - self.invalidCaptcha() - elif re.search(self.MULTIDL_PATTERN, self.html): - self.longWait(5 * 60, 12) - else: - self.correctCaptcha() - break - else: - self.fail(_("No valid captcha code entered")) - - m = re.search("countdown_number = (\d+);", self.html) - self.setWait(int(m.group(1)) if m else 50) - - # download the file, destination is determined by pyLoad - self.logDebug("WAIT URL", self.req.lastEffectiveURL) - m = re.search("free_wait.php\?server=(.*?)&(.*)", self.req.lastEffectiveURL) - if m is None: - self.error(_("Download URL not found")) - - url = "http://%s/download.php?%s" % (m.group(1), m.group(2)) - - self.wait() - self.download(url) - self.checkDownloadedFile() - - - def checkDownloadedFile(self): - # check download - check = self.checkDownload({ - "temp_offline": re.compile(r"^Soubor je do.*asn.* nedostupn.*$"), - "credit": re.compile(r"^Nem.*te dostate.*n.* kredit.$"), - "multi_dl": re.compile(self.MULTIDL_PATTERN), - "captcha_err": "<li>Zadaný ověřovací kód nesouhlasí!</li>" - }) - - if check == "temp_offline": - self.fail(_("File not available - try later")) - if check == "credit": - self.resetAccount() - elif check == "multi_dl": - self.longWait(5 * 60, 12) - elif check == "captcha_err": - self.invalidCaptcha() - self.retry() - - -getInfo = create_getInfo(CzshareCom) diff --git a/pyload/plugin/hoster/DailymotionCom.py b/pyload/plugin/hoster/DailymotionCom.py deleted file mode 100644 index 84d002e9c..000000000 --- a/pyload/plugin/hoster/DailymotionCom.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.datatype.File import statusMap -from pyload.utils import json_loads -from pyload.network.RequestFactory import getURL -from pyload.plugin.Hoster import Hoster - - -def getInfo(urls): - result = [] - regex = re.compile(DailymotionCom.__pattern__) - apiurl = "https://api.dailymotion.com/video/%s" - request = {"fields": "access_error,status,title"} - - for url in urls: - id = regex.match(url).group("ID") - page = getURL(apiurl % id, get=request) - info = json_loads(page) - - name = info['title'] + ".mp4" if "title" in info else url - - if "error" in info or info['access_error']: - status = "offline" - else: - status = info['status'] - if status in ("ready", "published"): - status = "online" - elif status in ("waiting", "processing"): - status = "temp. offline" - else: - status = "offline" - - result.append((name, 0, statusMap[status], url)) - - return result - - -class DailymotionCom(Hoster): - __name__ = "DailymotionCom" - __type__ = "hoster" - __version__ = "0.20" - - __pattern__ = r'https?://(?:www\.)?dailymotion\.com/.*video/(?P<ID>[\w^_]+)' - __config__ = [("quality", "Lowest;LD 144p;LD 240p;SD 384p;HQ 480p;HD 720p;HD 1080p;Highest", "Quality", "Highest")] - - __description__ = """Dailymotion.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] - - - def setup(self): - self.resumeDownload = True - self.multiDL = True - - - def getStreams(self): - streams = [] - - for result in re.finditer(r"\"(?P<URL>http:\\/\\/www.dailymotion.com\\/cdn\\/H264-(?P<QF>.*?)\\.*?)\"", - self.html): - url = result.group("URL") - qf = result.group("QF") - - link = url.replace("\\", "") - quality = tuple(int(x) for x in qf.split("x")) - - streams.append((quality, link)) - - return sorted(streams, key=lambda x: x[0][::-1]) - - - def getQuality(self): - q = self.getConfig("quality") - - if q == "Lowest": - quality = 0 - elif q == "Highest": - quality = -1 - else: - quality = int(q.rsplit(" ")[1][:-1]) - - return quality - - - def getLink(self, streams, quality): - if quality > 0: - for x, s in reversed([item for item in enumerate(streams)]): - qf = s[0][1] - if qf <= quality: - idx = x - break - else: - idx = 0 - else: - idx = quality - - s = streams[idx] - - self.logInfo(_("Download video quality %sx%s") % s[0]) - - return s[1] - - - def checkInfo(self, pyfile): - pyfile.name, pyfile.size, pyfile.status, pyfile.url = getInfo([pyfile.url])[0] - - if pyfile.status == 1: - self.offline() - - elif pyfile.status == 6: - self.tempOffline() - - - def process(self, pyfile): - self.checkInfo(pyfile) - - id = re.match(self.__pattern__, pyfile.url).group("ID") - self.html = self.load("http://www.dailymotion.com/embed/video/" + id, decode=True) - - streams = self.getStreams() - quality = self.getQuality() - - self.download(self.getLink(streams, quality)) diff --git a/pyload/plugin/hoster/DataHu.py b/pyload/plugin/hoster/DataHu.py deleted file mode 100644 index 49e6e1aa2..000000000 --- a/pyload/plugin/hoster/DataHu.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://data.hu/get/6381232/random.bin - -import re - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class DataHu(SimpleHoster): - __name__ = "DataHu" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?data\.hu/get/\w+' - - __description__ = """Data.hu hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("crash", ""), - ("stickell", "l.stickell@yahoo.it")] - - - INFO_PATTERN = ur'<title>(?P<N>.*) \((?P<S>[^)]+)\) let\xf6lt\xe9se' - OFFLINE_PATTERN = ur'Az adott f\xe1jl nem l\xe9tezik' - LINK_PATTERN = r'
    ' - - - def setup(self): - self.resumeDownload = True - self.multiDL = self.premium - - - def handleFree(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.error(_("LINK_PATTERN not found")) - - self.download(m.group(1), disposition=True) - - -getInfo = create_getInfo(DataHu) diff --git a/pyload/plugin/hoster/DataportCz.py b/pyload/plugin/hoster/DataportCz.py deleted file mode 100644 index d06207257..000000000 --- a/pyload/plugin/hoster/DataportCz.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class DataportCz(SimpleHoster): - __name__ = "DataportCz" - __type__ = "hoster" - __version__ = "0.40" - - __pattern__ = r'http://(?:www\.)?dataport\.cz/file/(.*)' - - __description__ = """Dataport.cz hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'(?P[^<]+)' - SIZE_PATTERN = r'Velikost\s*(?P[^<]+)' - OFFLINE_PATTERN = r'

    Soubor nebyl nalezen

    ' - - CAPTCHA_PATTERN = r'
    \s*(\d+)
    ' - - - def handleFree(self): - captchas = {"1": "jkeG", "2": "hMJQ", "3": "vmEK", "4": "ePQM", "5": "blBd"} - - for _i in xrange(60): - action, inputs = self.parseHtmlForm('free_download_form') - self.logDebug(action, inputs) - if not action or not inputs: - self.error(_("free_download_form")) - - if "captchaId" in inputs and inputs['captchaId'] in captchas: - inputs['captchaCode'] = captchas[inputs['captchaId']] - else: - self.error(_("captcha")) - - self.html = self.download("http://www.dataport.cz%s" % action, post=inputs) - - check = self.checkDownload({"captcha": 'alert("\u0160patn\u011b opsan\u00fd k\u00f3d z obr\u00e1zu");', - "slot": 'alert("Je n\u00e1m l\u00edto, ale moment\u00e1ln\u011b nejsou'}) - if check == "captcha": - self.error(_("invalid captcha")) - elif check == "slot": - self.logDebug("No free slots - wait 60s and retry") - self.wait(60, False) - self.html = self.load(self.pyfile.url, decode=True) - continue - else: - break - - -getInfo = create_getInfo(DataportCz) diff --git a/pyload/plugin/hoster/DateiTo.py b/pyload/plugin/hoster/DateiTo.py deleted file mode 100644 index 1d5110784..000000000 --- a/pyload/plugin/hoster/DateiTo.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.captcha import ReCaptcha -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class DateiTo(SimpleHoster): - __name__ = "DateiTo" - __type__ = "hoster" - __version__ = "0.05" - - __pattern__ = r'http://(?:www\.)?datei\.to/datei/(?P\w+)\.html' - - __description__ = """Datei.to hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'Dateiname:\s*(?P.*?)\s*(?P.*?)Datei wurde nicht gefunden<|>Bitte wähle deine Datei aus... <' - - WAIT_PATTERN = r'countdown\({seconds: (\d+)' - MULTIDL_PATTERN = r'>Du lädst bereits eine Datei herunter<' - - DATA_PATTERN = r'url: "(.*?)", data: "(.*?)",' - - - def handleFree(self): - url = 'http://datei.to/ajax/download.php' - data = {'P': 'I', 'ID': self.info['pattern']['ID']} - recaptcha = ReCaptcha(self) - - for _i in xrange(10): - self.logDebug("URL", url, "POST", data) - self.html = self.load(url, post=data) - self.checkErrors() - - if url.endswith('download.php') and 'P' in data: - if data['P'] == 'I': - self.doWait() - - elif data['P'] == 'IV': - break - - m = re.search(self.DATA_PATTERN, self.html) - if m is None: - self.error(_("data")) - url = 'http://datei.to/' + m.group(1) - data = dict(x.split('=') for x in m.group(2).split('&')) - - if url.endswith('recaptcha.php'): - data['recaptcha_challenge_field'], data['recaptcha_response_field'] = recaptcha.challenge() - else: - self.fail(_("Too bad...")) - - self.download(self.html) - - - def checkErrors(self): - m = re.search(self.MULTIDL_PATTERN, self.html) - if m: - m = re.search(self.WAIT_PATTERN, self.html) - wait_time = int(m.group(1)) if m else 30 - - errmsg = self.info['error'] = _("Parallel downloads") - self.retry(wait_time=wait_time, reason=errmsg) - - self.info.pop('error', None) - - - def doWait(self): - m = re.search(self.WAIT_PATTERN, self.html) - wait_time = int(m.group(1)) if m else 30 - - self.load('http://datei.to/ajax/download.php', post={'P': 'Ads'}) - self.wait(wait_time, False) - - -getInfo = create_getInfo(DateiTo) diff --git a/pyload/plugin/hoster/DdlstorageCom.py b/pyload/plugin/hoster/DdlstorageCom.py deleted file mode 100644 index 32a5a8bb7..000000000 --- a/pyload/plugin/hoster/DdlstorageCom.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class DdlstorageCom(DeadHoster): - __name__ = "DdlstorageCom" - __type__ = "hoster" - __version__ = "1.02" - - __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/\w+' - - __description__ = """DDLStorage.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz"), - ("stickell", "l.stickell@yahoo.it")] - - -getInfo = create_getInfo(DdlstorageCom) diff --git a/pyload/plugin/hoster/DebridItaliaCom.py b/pyload/plugin/hoster/DebridItaliaCom.py deleted file mode 100644 index c28cdd89a..000000000 --- a/pyload/plugin/hoster/DebridItaliaCom.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.Hoster import Hoster -from pyload.plugin.internal.SimpleHoster import replace_patterns - - -class DebridItaliaCom(Hoster): - __name__ = "DebridItaliaCom" - __type__ = "hoster" - __version__ = "0.07" - - __pattern__ = r'http://s\d+\.debriditalia\.com/dl/\d+' - - __description__ = """Debriditalia.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it"), - ("Walter Purcaro", "vuolter@gmail.com")] - - - URL_REPLACEMENTS = [(r'(/dl/\d+)$', '\1/')] - - - def setup(self): - self.chunkLimit = -1 - self.resumeDownload = True - - - def process(self, pyfile): - pyfile.url = replace_patterns(pyfile.url, cls.URL_REPLACEMENTS) - - if re.match(self.__pattern__, pyfile.url): - link = pyfile.url - - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "DebridItalia") - self.fail(_("No DebridItalia account provided")) - - else: - html = self.load("http://www.debriditalia.com/api.php", get={'generate': "", 'link': pyfile.url}) - - if "ERROR" in html: - self.fail(re.search(r'ERROR:(.*)', html).strip()) - - link = html.strip() - - self.download(link, disposition=True) - - check = self.checkDownload({'empty': re.compile(r'^$')}) - - if check == "empty": - self.retry(5, 2 * 60, "Empty file downloaded") diff --git a/pyload/plugin/hoster/DepositfilesCom.py b/pyload/plugin/hoster/DepositfilesCom.py deleted file mode 100644 index a401e4c90..000000000 --- a/pyload/plugin/hoster/DepositfilesCom.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from pyload.plugin.internal.captcha import ReCaptcha -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class DepositfilesCom(SimpleHoster): - __name__ = "DepositfilesCom" - __type__ = "hoster" - __version__ = "0.51" - - __pattern__ = r'https?://(?:www\.)?(depositfiles\.com|dfiles\.(eu|ru))(/\w{1,3})?/files/(?P\w+)' - - __description__ = """Depositfiles.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("spoob", "spoob@pyload.org"), - ("zoidberg", "zoidberg@mujmail.cz"), - ("Walter Purcaro", "vuolter@gmail.com")] - - - NAME_PATTERN = r'' - - - def process(self, pyfile): - self.html = self.load(pyfile.url, decode=True) - self.getFileInfo() - - # parse js variables - self.jsvars = dict((x, y.strip("'")) for x, y in re.findall(r"var (\w+) = ([\d.]+|'[^']*')", self.html)) - self.logDebug(self.jsvars) - pyfile.name = self.jsvars['ID3'] - - # determine download type - free or premium - if self.premium: - if 'UU_prihlasen' in self.jsvars: - if self.jsvars['UU_prihlasen'] == '0': - self.logWarning(_("User not logged in")) - self.relogin(self.user) - self.retry() - elif float(self.jsvars['UU_kredit']) < float(self.jsvars['kredit_odecet']): - self.logWarning(_("Not enough credit left")) - self.premium = False - - if self.premium: - self.handlePremium() - else: - self.handleFree() - - check = self.checkDownload({"err": re.compile(r"\AChyba!")}, max_size=100) - if check == "err": - self.fail(_("File not m or plugin defect")) - - - def handleFree(self): - # get download url - download_url = '%s/download.php' % self.jsvars['server'] - data = dict((x, self.jsvars[x]) for x in self.jsvars if x in ("ID1", "ID2", "ID3", "ID4")) - self.logDebug("FREE URL1:" + download_url, data) - - self.load(download_url, post=data, follow_location=False) - self.header = self.req.http.header - - m = re.search(r'Location\s*:\s*(.+)', self.header, re.I) - if m is None: - self.fail(_("File not found")) - download_url = m.group(1) - self.logDebug("FREE URL2:" + download_url) - - # check errors - m = re.search(r'/chyba/(\d+)', download_url) - if m: - if m.group(1) == '1': - self.retry(60, 2 * 60, "This IP is already downloading") - elif m.group(1) == '2': - self.retry(60, 60, "No free slots available") - else: - self.fail(_("Error %d") % m.group(1)) - - # download file - self.download(download_url) - - - def handlePremium(self): - download_url = '%s/download_premium.php' % self.jsvars['server'] - data = dict((x, self.jsvars[x]) for x in self.jsvars if x in ("ID1", "ID2", "ID4", "ID5")) - self.download(download_url, get=data) - - -getInfo = create_getInfo(QuickshareCz) diff --git a/pyload/plugin/hoster/RPNetBiz.py b/pyload/plugin/hoster/RPNetBiz.py deleted file mode 100644 index c6dfae9a6..000000000 --- a/pyload/plugin/hoster/RPNetBiz.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.Hoster import Hoster -from pyload.utils import json_loads - - -class RPNetBiz(Hoster): - __name__ = "RPNetBiz" - __type__ = "hoster" - __version__ = "0.10" - - __description__ = """RPNet.biz hoster plugin""" - __license__ = "GPLv3" - - __pattern__ = r'https?://.*rpnet\.biz' - __authors__ = [("Dman", "dmanugm@gmail.com")] - - - def setup(self): - self.chunkLimit = -1 - self.resumeDownload = True - - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - link_status = {'generated': pyfile.url} - elif not self.account: - # Check account - self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet") - self.fail(_("No rpnet account provided")) - else: - (user, data) = self.account.selectAccount() - - self.logDebug("Original URL: %s" % pyfile.url) - # Get the download link - res = self.load("https://premium.rpnet.biz/client_api.php", - get={"username": user, - "password": data['password'], - "action": "generate", - "links": pyfile.url}) - - self.logDebug("JSON data: %s" % res) - link_status = json_loads(res)['links'][0] # get the first link... since we only queried one - - # Check if we only have an id as a HDD link - if 'id' in link_status: - self.logDebug("Need to wait at least 30 seconds before requery") - self.setWait(30) # wait for 30 seconds - self.wait() - # Lets query the server again asking for the status on the link, - # we need to keep doing this until we reach 100 - max_tries = 30 - my_try = 0 - while (my_try <= max_tries): - self.logDebug("Try: %d ; Max Tries: %d" % (my_try, max_tries)) - res = self.load("https://premium.rpnet.biz/client_api.php", - get={"username": user, - "password": data['password'], - "action": "downloadInformation", - "id": link_status['id']}) - self.logDebug("JSON data hdd query: %s" % res) - download_status = json_loads(res)['download'] - - if download_status['status'] == '100': - link_status['generated'] = download_status['rpnet_link'] - self.logDebug("Successfully downloaded to rpnet HDD: %s" % link_status['generated']) - break - else: - self.logDebug("At %s%% for the file download" % download_status['status']) - - self.setWait(30) - self.wait() - my_try += 1 - - if my_try > max_tries: # We went over the limit! - self.fail(_("Waited for about 15 minutes for download to finish but failed")) - - if 'generated' in link_status: - self.download(link_status['generated'], disposition=True) - elif 'error' in link_status: - self.fail(link_status['error']) - else: - self.fail(_("Something went wrong, not supposed to enter here")) diff --git a/pyload/plugin/hoster/RapidfileshareNet.py b/pyload/plugin/hoster/RapidfileshareNet.py deleted file mode 100644 index e5c75a7bd..000000000 --- a/pyload/plugin/hoster/RapidfileshareNet.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class RapidfileshareNet(XFSHoster): - __name__ = "RapidfileshareNet" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?rapidfileshare\.net/\w{12}' - - __description__ = """Rapidfileshare.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("guidobelix", "guidobelix@hotmail.it")] - - - HOSTER_DOMAIN = "rapidfileshare.net" - - NAME_PATTERN = r'' - SIZE_PATTERN = r'>http://www.rapidfileshare.net/\w+? \((?P[\d.,]+) (?P[\w^_]+)\)' - - OFFLINE_PATTERN = r'>No such file with this filename' - TEMP_OFFLINE_PATTERN = r'The page may have been renamed, removed or be temporarily unavailable.<' - - - def handlePremium(self): - self.fail(_("Premium download not implemented")) - - -getInfo = create_getInfo(RapidfileshareNet) diff --git a/pyload/plugin/hoster/RapidgatorNet.py b/pyload/plugin/hoster/RapidgatorNet.py deleted file mode 100644 index 153b0314e..000000000 --- a/pyload/plugin/hoster/RapidgatorNet.py +++ /dev/null @@ -1,199 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import HTTPHEADER - -from pyload.utils import json_loads -from pyload.network.HTTPRequest import BadHeader -from pyload.plugin.hoster.UnrestrictLi import secondsToMidnight -from pyload.plugin.internal.captcha import AdsCaptcha, ReCaptcha, SolveMedia -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class RapidgatorNet(SimpleHoster): - __name__ = "RapidgatorNet" - __type__ = "hoster" - __version__ = "0.26" - - __pattern__ = r'http://(?:www\.)?(rapidgator\.net|rg\.to)/file/\w+' - - __description__ = """Rapidgator.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz"), - ("chrox", ""), - ("stickell", "l.stickell@yahoo.it"), - ("Walter Purcaro", "vuolter@gmail.com")] - - - API_URL = "http://rapidgator.net/api/file" - - COOKIES = [("rapidgator.net", "lang", "en")] - - NAME_PATTERN = r'Download file (?P<N>.*)' - SIZE_PATTERN = r'File size:\s*(?P[\d.,]+) (?P[\w^_]+)' - OFFLINE_PATTERN = r'>(File not found|Error 404)' - - JSVARS_PATTERN = r'\s+var\s*(startTimerUrl|getDownloadUrl|captchaUrl|fid|secs)\s*=\s*\'?(.*?)\'?;' - PREMIUM_ONLY_ERROR_PATTERN = r'You can download files up to|This file can be downloaded by premium only<' - DOWNLOAD_LIMIT_ERROR_PATTERN = r'You have reached your (daily|hourly) downloads limit' - WAIT_PATTERN = r'(?:Delay between downloads must be not less than|Try again in)\s*(\d+)\s*(hour|min)' - LINK_PATTERN = r'return \'(http://\w+.rapidgator.net/.*)\';' - - RECAPTCHA_PATTERN = r'"http://api\.recaptcha\.net/challenge\?k=(.*?)"' - ADSCAPTCHA_PATTERN = r'(http://api\.adscaptcha\.com/Get\.aspx[^"\']*)' - SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.script\?k=(.*?)"' - - - def setup(self): - if self.account: - self.sid = self.account.getAccountData(self.user).get('SID', None) - else: - self.sid = None - - if self.sid: - self.premium = True - - self.resumeDownload = self.multiDL = self.premium - self.chunkLimit = 1 - - - def api_response(self, cmd): - try: - json = self.load('%s/%s' % (self.API_URL, cmd), - get={'sid': self.sid, - 'url': self.pyfile.url}, decode=True) - self.logDebug("API:%s" % cmd, json, "SID: %s" % self.sid) - json = json_loads(json) - status = json['response_status'] - msg = json['response_details'] - - except BadHeader, e: - self.logError("API: %s" % cmd, e, "SID: %s" % self.sid) - status = e.code - msg = e - - if status == 200: - return json['response'] - - elif status == 423: - self.account.empty(self.user) - self.retry() - - else: - self.account.relogin(self.user) - self.retry(wait_time=60) - - - def handlePremium(self): - #self.logDebug("ACCOUNT_DATA", self.account.getAccountData(self.user)) - self.api_data = self.api_response('info') - self.api_data['md5'] = self.api_data['hash'] - self.pyfile.name = self.api_data['filename'] - self.pyfile.size = self.api_data['size'] - url = self.api_response('download')['url'] - self.download(url) - - - def handleFree(self): - self.checkFree() - - jsvars = dict(re.findall(self.JSVARS_PATTERN, self.html)) - self.logDebug(jsvars) - - self.req.http.lastURL = self.pyfile.url - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) - - url = "http://rapidgator.net%s?fid=%s" % ( - jsvars.get('startTimerUrl', '/download/AjaxStartTimer'), jsvars['fid']) - jsvars.update(self.getJsonResponse(url)) - - self.wait(int(jsvars.get('secs', 45)), False) - - url = "http://rapidgator.net%s?sid=%s" % ( - jsvars.get('getDownloadUrl', '/download/AjaxGetDownload'), jsvars['sid']) - jsvars.update(self.getJsonResponse(url)) - - self.req.http.lastURL = self.pyfile.url - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"]) - - url = "http://rapidgator.net%s" % jsvars.get('captchaUrl', '/download/captcha') - self.html = self.load(url) - - for _i in xrange(5): - m = re.search(self.LINK_PATTERN, self.html) - if m: - link = m.group(1) - self.logDebug(link) - self.download(link, disposition=True) - break - else: - captcha, captcha_key = self.getCaptcha() - challenge, response = captcha.challenge(captcha_key) - - self.html = self.load(url, post={'DownloadCaptchaForm[captcha]': "", - 'adcopy_challenge' : challenge, - 'adcopy_response' : response}) - - if "The verification code is incorrect" in self.html: - self.invalidCaptcha() - else: - self.correctCaptcha() - else: - self.error(_("Download link")) - - - def getCaptcha(self): - m = re.search(self.ADSCAPTCHA_PATTERN, self.html) - if m: - captcha_key = m.group(1) - captcha = AdsCaptcha(self) - else: - m = re.search(self.RECAPTCHA_PATTERN, self.html) - if m: - captcha_key = m.group(1) - captcha = ReCaptcha(self) - else: - m = re.search(self.SOLVEMEDIA_PATTERN, self.html) - if m: - captcha_key = m.group(1) - captcha = SolveMedia(self) - else: - self.error(_("Captcha")) - - return captcha, captcha_key - - - def checkFree(self): - m = re.search(self.PREMIUM_ONLY_ERROR_PATTERN, self.html) - if m: - self.fail(_("Premium account needed for download")) - else: - m = re.search(self.WAIT_PATTERN, self.html) - - if m: - wait_time = int(m.group(1)) * {"hour": 60, "min": 1}[m.group(2)] - else: - m = re.search(self.DOWNLOAD_LIMIT_ERROR_PATTERN, self.html) - if m is None: - return - elif m.group(1) == "daily": - self.logWarning(_("You have reached your daily downloads limit for today")) - wait_time = secondsToMidnight(gmt=2) - else: - wait_time = 1 * 60 * 60 - - self.logDebug("Waiting %d minutes" % wait_time / 60) - self.wait(wait_time, True) - self.retry() - - - def getJsonResponse(self, url): - res = self.load(url, decode=True) - if not res.startswith('{'): - self.retry() - self.logDebug(url, res) - return json_loads(res) - - -getInfo = create_getInfo(RapidgatorNet) diff --git a/pyload/plugin/hoster/RapiduNet.py b/pyload/plugin/hoster/RapiduNet.py deleted file mode 100644 index 4b6ef55bb..000000000 --- a/pyload/plugin/hoster/RapiduNet.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import HTTPHEADER -from time import time, altzone - -from pyload.utils import json_loads -from pyload.plugin.captcha import ReCaptcha -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class RapiduNet(SimpleHoster): - __name__ = "RapiduNet" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'https?://(?:www\.)?rapidu\.net/(?P\d{10})' - - __description__ = """Rapidu.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("prOq", "")] - - - COOKIES = [("rapidu.net", "rapidu_lang", "en")] - - FILE_INFO_PATTERN = r'

    .*

    \s*(?P\d+(\.\d+)?)\s(?P\w+)' - OFFLINE_PATTERN = r'404 - File not found' - - ERROR_PATTERN = r'
    ' - - RECAPTCHA_KEY = r'6Ld12ewSAAAAAHoE6WVP_pSfCdJcBQScVweQh8Io' - - - def setup(self): - self.resumeDownload = True - self.multiDL = True - self.limitDL = 0 if self.premium else 2 - - - def handleFree(self): - self.req.http.lastURL = self.pyfile.url - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) - - jsvars = self.getJsonResponse("https://rapidu.net/ajax.php?a=getLoadTimeToDownload", {'_go': None}) - - if str(jsvars['timeToDownload']) is "stop": - t = (24 * 60 * 60) - (int(time()) % (24 *60 * 60)) + altzone - - self.logInfo("You've reach your daily download transfer") - - self.retry(10, 10 if t < 1 else None, "Try tomorrow again") #@NOTE: check t in case of not synchronised clock - - else: - self.wait(int(jsvars['timeToDownload']) - int(time())) - - recaptcha = ReCaptcha(self) - - for _i in xrange(10): - challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) - - jsvars = self.getJsonResponse("https://rapidu.net/ajax.php?a=getCheckCaptcha", - {'_go' : None, - 'captcha1': challenge, - 'captcha2': response, - 'fileId' : self.info['ID']}) - if jsvars['message'] == 'success': - self.download(jsvars['url']) - break - - - def getJsonResponse(self, url, post_data): - res = self.load(url, post=post_data, decode=True) - if not res.startswith('{'): - self.retry() - - self.logDebug(url, res) - - return json_loads(res) - - -getInfo = create_getInfo(RapiduNet) diff --git a/pyload/plugin/hoster/RarefileNet.py b/pyload/plugin/hoster/RarefileNet.py deleted file mode 100644 index 6ea06720d..000000000 --- a/pyload/plugin/hoster/RarefileNet.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class RarefileNet(XFSHoster): - __name__ = "RarefileNet" - __type__ = "hoster" - __version__ = "0.08" - - __pattern__ = r'http://(?:www\.)?rarefile\.net/\w{12}' - - __description__ = """Rarefile.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - HOSTER_DOMAIN = "rarefile.net" - - NAME_PATTERN = r'(?P.+?)<' - SIZE_PATTERN = r'>Size : (?P[\d.,]+) (?P[\w^_]+)' - - LINK_PATTERN = r'(?P=link)' - - -getInfo = create_getInfo(RarefileNet) diff --git a/pyload/plugin/hoster/RealdebridCom.py b/pyload/plugin/hoster/RealdebridCom.py deleted file mode 100644 index c78fc8b55..000000000 --- a/pyload/plugin/hoster/RealdebridCom.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from random import randrange -from urllib import quote, unquote -from time import time - -from pyload.utils import json_loads -from pyload.plugin.Hoster import Hoster -from pyload.utils import parseFileSize - - -class RealdebridCom(Hoster): - __name__ = "RealdebridCom" - __type__ = "hoster" - __version__ = "0.53" - - __pattern__ = r'https?://(?:[^/]*\.)?real-debrid\..*' - - __description__ = """Real-Debrid.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Devirex Hazzard", "naibaf_11@yahoo.de")] - - - def getFilename(self, url): - try: - name = unquote(url.rsplit("/", 1)[1]) - except IndexError: - name = "Unknown_Filename..." - if not name or name.endswith(".."): #: incomplete filename, append random stuff - name += "%s.tmp" % randrange(100, 999) - return name - - - def setup(self): - self.chunkLimit = 3 - self.resumeDownload = True - - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "Real-debrid") - self.fail(_("No Real-debrid account provided")) - else: - self.logDebug("Old URL: %s" % pyfile.url) - password = self.getPassword().splitlines() - if not password: - password = "" - else: - password = password[0] - - data = json_loads(self.load("https://real-debrid.com/ajax/unrestrict.php", - get={'lang' : "en", - 'link' : quote(pyfile.url, ""), - 'password': password, - 'time' : int(time() * 1000)})) - - self.logDebug("Returned Data: %s" % data) - - if data['error'] != 0: - if data['message'] == "Your file is unavailable on the hoster.": - self.offline() - else: - self.logWarning(data['message']) - self.tempOffline() - else: - if pyfile.name is not None and pyfile.name.endswith('.tmp') and data['file_name']: - pyfile.name = data['file_name'] - pyfile.size = parseFileSize(data['file_size']) - new_url = data['generated_links'][0][-1] - - if self.getConfig("https"): - new_url = new_url.replace("http://", "https://") - else: - new_url = new_url.replace("https://", "http://") - - if new_url != pyfile.url: - self.logDebug("New URL: %s" % new_url) - - if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown") or pyfile.name.endswith('..'): - #only use when name wasnt already set - pyfile.name = self.getFilename(new_url) - - self.download(new_url, disposition=True) - - check = self.checkDownload( - {"error": "An error occured while processing your request"}) - - if check == "error": - #usual this download can safely be retried - self.retry(wait_time=60, reason=_("An error occured while generating link")) diff --git a/pyload/plugin/hoster/RedtubeCom.py b/pyload/plugin/hoster/RedtubeCom.py deleted file mode 100644 index 1f18d09c7..000000000 --- a/pyload/plugin/hoster/RedtubeCom.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.Hoster import Hoster -from pyload.utils import html_unescape - - -class RedtubeCom(Hoster): - __name__ = "RedtubeCom" - __type__ = "hoster" - __version__ = "0.20" - - __pattern__ = r'http://(?:www\.)?redtube\.com/\d+' - - __description__ = """Redtube.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("jeix", "jeix@hasnomail.de")] - - - def process(self, pyfile): - self.download_html() - if not self.file_exists(): - self.offline() - - pyfile.name = self.get_file_name() - self.download(self.get_file_url()) - - - def download_html(self): - url = self.pyfile.url - self.html = self.load(url) - - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - - file_url = html_unescape(re.search(r'hashlink=(http.*?)"', self.html).group(1)) - - return file_url - - - def get_file_name(self): - if not self.html: - self.download_html() - - return re.search('(.*?)- RedTube - Free Porn Videos', self.html).group(1).strip() + ".flv" - - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - - if re.search(r'This video has been removed.', self.html) is not None: - return False - else: - return True diff --git a/pyload/plugin/hoster/RehostTo.py b/pyload/plugin/hoster/RehostTo.py deleted file mode 100644 index 7aa220187..000000000 --- a/pyload/plugin/hoster/RehostTo.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- - -from urllib import quote, unquote - -from pyload.plugin.Hoster import Hoster - - -class RehostTo(Hoster): - __name__ = "RehostTo" - __type__ = "hoster" - __version__ = "0.13" - - __pattern__ = r'https?://.*rehost\.to\..*' - - __description__ = """Rehost.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("RaNaN", "RaNaN@pyload.org")] - - - def getFilename(self, url): - return unquote(url.rsplit("/", 1)[1]) - - - def setup(self): - self.chunkLimit = 1 - self.resumeDownload = True - - - def process(self, pyfile): - if not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "rehost.to") - self.fail(_("No rehost.to account provided")) - - data = self.account.getAccountInfo(self.user) - long_ses = data['long_ses'] - - self.logDebug("Rehost.to: Old URL: %s" % pyfile.url) - - #raise timeout to 2min - self.req.setOption("timeout", 120) - - self.download("http://rehost.to/process_download.php", - get={'user': "cookie", 'pass': long_ses, 'dl': quote(pyfile.url, "")}, - disposition=True) diff --git a/pyload/plugin/hoster/RemixshareCom.py b/pyload/plugin/hoster/RemixshareCom.py deleted file mode 100644 index 96467c1e7..000000000 --- a/pyload/plugin/hoster/RemixshareCom.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://remixshare.com/download/p946u -# -# Note: -# The remixshare.com website is very very slow, so -# if your download not starts because of pycurl timeouts: -# Adjust timeouts in /usr/share/pyload/pyload/network/HTTPRequest.py - -import re - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class RemixshareCom(SimpleHoster): - __name__ = "RemixshareCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'https?://remixshare\.com/(download|dl)/\w+' - - __description__ = """Remixshare.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zapp-brannigan", "fuerst.reinje@web.de"), - ("Walter Purcaro", "vuolter@gmail.com")] - - - INFO_PATTERN = r'title=\'.+?\'>(?P.+?) \((?P\d+) (?P[\w^_]+)\)<' - OFFLINE_PATTERN = r'

    Ooops!<' - - LINK_PATTERN = r'(http://remixshare\.com/downloadfinal/.+?)"' - TOKEN_PATTERN = r'var acc = (\d+)' - WAIT_PATTERN = r'var XYZ = r"(\d+)"' - - - def setup(self): - self.multiDL = True - self.chunkLimit = 1 - - - def handleFree(self): - b = re.search(self.LINK_PATTERN, self.html) - if not b: - self.error(_("Cannot parse download url")) - c = re.search(self.TOKEN_PATTERN, self.html) - if not c: - self.error(_("Cannot parse file token")) - dl_url = b.group(1) + c.group(1) - - #Check if we have to wait - seconds = re.search(self.WAIT_PATTERN, self.html) - if seconds: - self.logDebug("Wait " + seconds.group(1)) - self.wait(int(seconds.group(1))) - - # Finally start downloading... - self.download(dl_url, disposition=True) - - -getInfo = create_getInfo(RemixshareCom) diff --git a/pyload/plugin/hoster/RgHostNet.py b/pyload/plugin/hoster/RgHostNet.py deleted file mode 100644 index 7a16598b2..000000000 --- a/pyload/plugin/hoster/RgHostNet.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class RgHostNet(SimpleHoster): - __name__ = "RgHostNet" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?rghost\.net/\d+(?:r=\d+)?' - - __description__ = """RgHost.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("z00nx", "z00nx0@gmail.com")] - - - INFO_PATTERN = r'

    \s+(]+>)?(?P[^<]+)()?\s+]+>\s+\((?P[^)]+)\)\s+\s+

    ' - OFFLINE_PATTERN = r'File is deleted|this page is not found' - - LINK_FREE_PATTERN = r']+>Download' - - -getInfo = create_getInfo(RgHostNet) diff --git a/pyload/plugin/hoster/RyushareCom.py b/pyload/plugin/hoster/RyushareCom.py deleted file mode 100644 index e5b00db7f..000000000 --- a/pyload/plugin/hoster/RyushareCom.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://ryushare.com/cl0jy8ric2js/random.bin - -import re - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo -from pyload.plugin.internal.captcha import SolveMedia - - -class RyushareCom(XFSHoster): - __name__ = "RyushareCom" - __type__ = "hoster" - __version__ = "0.20" - - __pattern__ = r'http://(?:www\.)?ryushare\.com/\w+' - - __description__ = """Ryushare.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz"), - ("stickell", "l.stickell@yahoo.it"), - ("quareevo", "quareevo@arcor.de")] - - - HOSTER_DOMAIN = "ryushare.com" - - SIZE_PATTERN = r'You have requested [^<]+ \((?P[\d.,]+) (?P[\w^_]+)' - - WAIT_PATTERN = r'You have to wait ((?P\d+) hour[s]?, )?((?P\d+) minute[s], )?(?P\d+) second[s]' - LINK_PATTERN = r'Click here to download<' - - - def getDownloadLink(self): - retry = False - self.html = self.load(self.pyfile.url) - action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")}) - if "method_premium" in inputs: - del inputs['method_premium'] - - self.html = self.load(self.pyfile.url, post=inputs) - action, inputs = self.parseHtmlForm('F1') - - self.setWait(65) - # Wait 1 hour - if "You have reached the download-limit" in self.html: - self.setWait(1 * 60 * 60, True) - retry = True - - m = re.search(self.WAIT_PATTERN, self.html) - if m: - wait = m.groupdict(0) - waittime = int(wait['hour']) * 60 * 60 + int(wait['min']) * 60 + int(wait['sec']) - self.setWait(waittime, True) - retry = True - - self.wait() - if retry: - self.retry() - - for _i in xrange(5): - solvemedia = SolveMedia(self) - challenge, response = solvemedia.challenge() - - inputs['adcopy_challenge'] = challenge - inputs['adcopy_response'] = response - - self.html = self.load(self.pyfile.url, post=inputs) - if "WRONG CAPTCHA" in self.html: - self.invalidCaptcha() - else: - self.correctCaptcha() - break - else: - self.fail(_("You have entered 5 invalid captcha codes")) - - if "Click here to download" in self.html: - return re.search(r'Click here to download', self.html).group(1) - - -getInfo = create_getInfo(RyushareCom) diff --git a/pyload/plugin/hoster/SafesharingEu.py b/pyload/plugin/hoster/SafesharingEu.py deleted file mode 100644 index 3d7140c6e..000000000 --- a/pyload/plugin/hoster/SafesharingEu.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class SafesharingEu(XFSHoster): - __name__ = "SafesharingEu" - __type__ = "hoster" - __version__ = "0.05" - - __pattern__ = r'https?://(?:www\.)?safesharing\.eu/\w{12}' - - __description__ = """Safesharing.eu hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zapp-brannigan", "fuerst.reinje@web.de")] - - - HOSTER_DOMAIN = "safesharing.eu" - - WAIT_PATTERN = r'You have to wait (\d+) minutes' - - ERROR_PATTERN = r'(?:
    )(.+?)(?:
    )' - - -getInfo = create_getInfo(SafesharingEu) diff --git a/pyload/plugin/hoster/SecureUploadEu.py b/pyload/plugin/hoster/SecureUploadEu.py deleted file mode 100644 index ec8bbfc57..000000000 --- a/pyload/plugin/hoster/SecureUploadEu.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class SecureUploadEu(XFSHoster): - __name__ = "SecureUploadEu" - __type__ = "hoster" - __version__ = "0.05" - - __pattern__ = r'https?://(?:www\.)?secureupload\.eu/\w{12}' - - __description__ = """SecureUpload.eu hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("z00nx", "z00nx0@gmail.com")] - - - HOSTER_DOMAIN = "secureupload.eu" - - INFO_PATTERN = r'

    Downloading (?P[^<]+) \((?P[^<]+)\)

    ' - - -getInfo = create_getInfo(SecureUploadEu) diff --git a/pyload/plugin/hoster/SendmywayCom.py b/pyload/plugin/hoster/SendmywayCom.py deleted file mode 100644 index 86c505d2d..000000000 --- a/pyload/plugin/hoster/SendmywayCom.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class SendmywayCom(XFSHoster): - __name__ = "SendmywayCom" - __type__ = "hoster" - __version__ = "0.04" - - __pattern__ = r'http://(?:www\.)?sendmyway\.com/\w{12}' - - __description__ = """SendMyWay hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - HOSTER_DOMAIN = "sendmyway.com" - - NAME_PATTERN = r'

    <.*?>\s*(?P.+)' - SIZE_PATTERN = r'\((?P\d+) bytes\)' - - -getInfo = create_getInfo(SendmywayCom) diff --git a/pyload/plugin/hoster/SendspaceCom.py b/pyload/plugin/hoster/SendspaceCom.py deleted file mode 100644 index abdf52fa6..000000000 --- a/pyload/plugin/hoster/SendspaceCom.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class SendspaceCom(SimpleHoster): - __name__ = "SendspaceCom" - __type__ = "hoster" - __version__ = "0.14" - - __pattern__ = r'http://(?:www\.)?sendspace\.com/file/.*' - - __description__ = """Sendspace.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'

    \s*<(?:b|strong)>(?P[^<]+)\s*File Size:\s*(?P[\d.,]+)(?P[\w^_]+)\s*

    ' - OFFLINE_PATTERN = r'
    Sorry, the file you requested is not available.
    ' - - LINK_PATTERN = r'' - USER_CAPTCHA_PATTERN = r'' - - - def handleFree(self): - params = {} - for _i in xrange(3): - m = re.search(self.LINK_PATTERN, self.html) - if m: - if 'captcha_hash' in params: - self.correctCaptcha() - download_url = m.group(1) - break - - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m: - if 'captcha_hash' in params: - self.invalidCaptcha() - captcha_url1 = "http://www.sendspace.com/" + m.group(1) - m = re.search(self.USER_CAPTCHA_PATTERN, self.html) - captcha_url2 = "http://www.sendspace.com/" + m.group(1) - params = {'captcha_hash': m.group(2), - 'captcha_submit': 'Verify', - 'captcha_answer': self.decryptCaptcha(captcha_url1) + " " + self.decryptCaptcha(captcha_url2)} - else: - params = {'download': "Regular Download"} - - self.logDebug(params) - self.html = self.load(self.pyfile.url, post=params) - else: - self.fail(_("Download link not found")) - - self.download(download_url) - - -getInfo = create_getInfo(SendspaceCom) diff --git a/pyload/plugin/hoster/Share4WebCom.py b/pyload/plugin/hoster/Share4WebCom.py deleted file mode 100644 index 4748c6e2a..000000000 --- a/pyload/plugin/hoster/Share4WebCom.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.hoster.UnibytesCom import UnibytesCom -from pyload.plugin.internal.SimpleHoster import create_getInfo - - -class Share4webCom(UnibytesCom): - __name__ = "Share4webCom" - __type__ = "hoster" - __version__ = "0.11" - - __pattern__ = r'https?://(?:www\.)?share4web\.com/get/\w+' - - __description__ = """Share4web.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - HOSTER_DOMAIN = "share4web.com" - - -getInfo = create_getInfo(UnibytesCom) diff --git a/pyload/plugin/hoster/Share76Com.py b/pyload/plugin/hoster/Share76Com.py deleted file mode 100644 index 7f2cea757..000000000 --- a/pyload/plugin/hoster/Share76Com.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class Share76Com(DeadHoster): - __name__ = "Share76Com" - __type__ = "hoster" - __version__ = "0.04" - - __pattern__ = r'http://(?:www\.)?share76\.com/\w{12}' - - __description__ = """Share76.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [] - - -getInfo = create_getInfo(Share76Com) diff --git a/pyload/plugin/hoster/ShareFilesCo.py b/pyload/plugin/hoster/ShareFilesCo.py deleted file mode 100644 index dd5c9b85d..000000000 --- a/pyload/plugin/hoster/ShareFilesCo.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class ShareFilesCo(DeadHoster): - __name__ = "ShareFilesCo" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?sharefiles\.co/\w{12}' - - __description__ = """Sharefiles.co hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] - - -getInfo = create_getInfo(ShareFilesCo) diff --git a/pyload/plugin/hoster/SharebeesCom.py b/pyload/plugin/hoster/SharebeesCom.py deleted file mode 100644 index 3843a352b..000000000 --- a/pyload/plugin/hoster/SharebeesCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class SharebeesCom(DeadHoster): - __name__ = "SharebeesCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?sharebees\.com/\w{12}' - - __description__ = """ShareBees hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - -getInfo = create_getInfo(SharebeesCom) diff --git a/pyload/plugin/hoster/ShareonlineBiz.py b/pyload/plugin/hoster/ShareonlineBiz.py deleted file mode 100644 index 55efe0019..000000000 --- a/pyload/plugin/hoster/ShareonlineBiz.py +++ /dev/null @@ -1,191 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import time -from urllib import unquote -from urlparse import urlparse - -from pyload.network.RequestFactory import getURL -from pyload.plugin.captcha import ReCaptcha -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class ShareonlineBiz(SimpleHoster): - __name__ = "ShareonlineBiz" - __type__ = "hoster" - __version__ = "0.44" - - __pattern__ = r'https?://(?:www\.)?(share-online\.biz|egoshare\.com)/(download\.php\?id=|dl/)(?P\w+)' - - __description__ = """Shareonline.biz hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("spoob", "spoob@pyload.org"), - ("mkaay", "mkaay@mkaay.de"), - ("zoidberg", "zoidberg@mujmail.cz"), - ("Walter Purcaro", "vuolter@gmail.com")] - - - URL_REPLACEMENTS = [(__pattern__ + ".*", "http://www.share-online.biz/dl/\g")] - - RECAPTCHA_KEY = "6LdatrsSAAAAAHZrB70txiV5p-8Iv8BtVxlTtjKX" - - ERROR_INFO_PATTERN = r'

    Information:

    \s*
    \s*(.*?)' - - - @classmethod - def getInfo(cls, url="", html=""): - info = {'name': urlparse(unquote(url)).path.split('/')[-1] or _("Unknown"), 'size': 0, 'status': 3 if url else 1, 'url': url} - - if url: - info['pattern'] = re.match(cls.__pattern__, url).groupdict() - - field = getURL("http://api.share-online.biz/linkcheck.php", - get={'md5': "1"}, - post={'links': info['pattern']['ID']}, - decode=True).split(";") - - if field[1] == "OK": - info['fileid'] = field[0] - info['status'] = 2 - info['name'] = field[2] - info['size'] = field[3] #: in bytes - info['md5'] = field[4].strip().lower().replace("\n\n", "") #: md5 - - elif field[1] in ("DELETED", "NOT FOUND"): - info['status'] = 1 - - return info - - - def setup(self): - self.resumeDownload = self.premium - self.multiDL = False - - - def handleCaptcha(self): - recaptcha = ReCaptcha(self) - - for _i in xrange(5): - challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) - - m = re.search(r'var wait=(\d+);', self.html) - self.setWait(int(m.group(1)) if m else 30) - - res = self.load("%s/free/captcha/%d" % (self.pyfile.url, int(time() * 1000)), - post={'dl_free' : "1", - 'recaptcha_challenge_field': challenge, - 'recaptcha_response_field' : response}) - if not res == '0': - self.correctCaptcha() - return res - else: - self.invalidCaptcha() - else: - self.invalidCaptcha() - self.fail(_("No valid captcha solution received")) - - - def handleFree(self): - self.html = self.load(self.pyfile.url, cookies=True) #: refer, stuff - - self.wait(3) - - self.html = self.load("%s/free/" % self.pyfile.url, post={"dl_free": "1", "choice": "free"}, decode=True) - - self.checkErrors() - - res = self.handleCaptcha() - - download_url = res.decode("base64") - - if not download_url.startswith("http://"): - self.error(_("Wrong download url")) - - self.wait() - - self.download(download_url) - - - def checkFile(self): - # check download - check = self.checkDownload({ - 'empty' : re.compile(r"^$"), - 'cookie': re.compile(r'
    Share-Online") - }) - - if check == "empty": - self.fail(_("Empty file")) - - elif check == "cookie": - self.invalidCaptcha() - self.retry(5, 60, _("Cookie failure")) - - elif check == "fail": - self.invalidCaptcha() - self.retry(5, 5 * 60, _("Download failed")) - - - def handlePremium(self): #: should be working better loading (account) api internally - self.account.getAccountInfo(self.user, True) - - html = self.load("http://api.share-online.biz/account.php", - {"username": self.user, "password": self.account.accounts[self.user]['password'], - "act": "download", "lid": self.info['fileid']}) - - self.api_data = dlinfo = {} - - for line in html.splitlines(): - key, value = line.split(": ") - dlinfo[key.lower()] = value - - self.logDebug(dlinfo) - - if not dlinfo['status'] == "online": - self.offline() - else: - self.pyfile.name = dlinfo['name'] - self.pyfile.size = int(dlinfo['size']) - - dlLink = dlinfo['url'] - - if dlLink == "server_under_maintenance": - self.tempOffline() - else: - self.multiDL = True - self.download(dlLink) - - - def checkErrors(self): - m = re.search(r"/failure/(.*?)/1", self.req.lastEffectiveURL) - if m is None: - self.info.pop('error', None) - return - - errmsg = m.group(1).lower() - - try: - self.logError(errmsg, re.search(self.ERROR_INFO_PATTERN, self.html).group(1)) - except Exception: - self.logError("Unknown error occurred", errmsg) - - if errmsg is "invalid": - self.fail(_("File not available")) - - elif errmsg in ("freelimit", "size", "proxy"): - self.fail(_("Premium account needed")) - - elif errmsg in ("expired", "server"): - self.retry(wait_time=600, reason=errmsg) - - elif 'slot' in errmsg: - self.wantReconnect = True - self.retry(24, 3600, errmsg) - - else: - self.wantReconnect = True - self.retry(wait_time=60, reason=errmsg) - - -getInfo = create_getInfo(ShareonlineBiz) diff --git a/pyload/plugin/hoster/ShareplaceCom.py b/pyload/plugin/hoster/ShareplaceCom.py deleted file mode 100644 index 139426421..000000000 --- a/pyload/plugin/hoster/ShareplaceCom.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from pyload.plugin.Hoster import Hoster - - -class ShareplaceCom(Hoster): - __name__ = "ShareplaceCom" - __type__ = "hoster" - __version__ = "0.11" - - __pattern__ = r'(http://)?(?:www\.)?shareplace\.(com|org)/\?\w+' - - __description__ = """Shareplace.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("ACCakut", "")] - - - def process(self, pyfile): - self.pyfile = pyfile - self.prepare() - self.download(self.get_file_url()) - - - def prepare(self): - if not self.file_exists(): - self.offline() - - self.pyfile.name = self.get_file_name() - - wait_time = self.get_waiting_time() - self.setWait(wait_time) - self.wait() - - - def get_waiting_time(self): - if not self.html: - self.download_html() - - #var zzipitime = 15; - m = re.search(r'var zzipitime = (\d+);', self.html) - if m: - sec = int(m.group(1)) - else: - sec = 0 - - return sec - - - def download_html(self): - url = re.sub("shareplace.com\/\?", "shareplace.com//index1.php/?a=", self.pyfile.url) - self.html = self.load(url, decode=True) - - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - url = re.search(r"var beer = '(.*?)';", self.html) - if url: - url = url.group(1) - url = unquote( - url.replace("http://http:/", "").replace("vvvvvvvvv", "").replace("lllllllll", "").replace( - "teletubbies", "")) - self.logDebug("URL: %s" % url) - return url - else: - self.error(_("Absolute filepath not found")) - - - def get_file_name(self): - if not self.html: - self.download_html() - - return re.search("\s*(.*?)\s*", self.html).group(1) - - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - - if re.search(r"HTTP Status 404", self.html) is not None: - return False - else: - return True diff --git a/pyload/plugin/hoster/SharingmatrixCom.py b/pyload/plugin/hoster/SharingmatrixCom.py deleted file mode 100644 index a20a36543..000000000 --- a/pyload/plugin/hoster/SharingmatrixCom.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class SharingmatrixCom(DeadHoster): - __name__ = "SharingmatrixCom" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?sharingmatrix\.com/file/\w+' - - __description__ = """Sharingmatrix.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("jeix", "jeix@hasnomail.de"), - ("paulking", "")] - - -getInfo = create_getInfo(SharingmatrixCom) diff --git a/pyload/plugin/hoster/ShragleCom.py b/pyload/plugin/hoster/ShragleCom.py deleted file mode 100644 index f606726fe..000000000 --- a/pyload/plugin/hoster/ShragleCom.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class ShragleCom(DeadHoster): - __name__ = "ShragleCom" - __type__ = "hoster" - __version__ = "0.22" - - __pattern__ = r'http://(?:www\.)?(cloudnator|shragle)\.com/files/(?P.*?)/' - - __description__ = """Cloudnator.com (Shragle.com) hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("RaNaN", "RaNaN@pyload.org"), - ("zoidberg", "zoidberg@mujmail.cz")] - - -getInfo = create_getInfo(ShragleCom) diff --git a/pyload/plugin/hoster/SimplyPremiumCom.py b/pyload/plugin/hoster/SimplyPremiumCom.py deleted file mode 100644 index f2e00cbf1..000000000 --- a/pyload/plugin/hoster/SimplyPremiumCom.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from datetime import datetime, timedelta - -from pyload.plugin.Hoster import Hoster -from pyload.plugin.hoster.UnrestrictLi import secondsToMidnight - - -class SimplyPremiumCom(Hoster): - __name__ = "SimplyPremiumCom" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'https?://.*(simply-premium)\.com' - - __description__ = """Simply-Premium.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("EvolutionClip", "evolutionclip@live.de")] - - - def setup(self): - self.chunkLimit = 16 - self.resumeDownload = False - - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "Simply-Premium.com") - self.fail(_("No Simply-Premium.com account provided")) - else: - self.logDebug("Old URL: %s" % pyfile.url) - for i in xrange(5): - page = self.load("http://www.simply-premium.com/premium.php", get={'info': "", 'link': pyfile.url}) - self.logDebug("JSON data: " + page) - if page != '': - break - else: - self.logInfo(_("Unable to get API data, waiting 1 minute and retry")) - self.retry(5, 60, "Unable to get API data") - - if '0' in page or ( - "You are not allowed to download from this host" in page and self.premium): - self.account.relogin(self.user) - self.retry() - elif "NOTFOUND" in page: - self.offline() - elif "downloadlimit" in page: - self.logWarning(_("Reached maximum connctions")) - self.retry(5, 60, "Reached maximum connctions") - elif "trafficlimit" in page: - self.logWarning(_("Reached daily limit for this host")) - self.retry(wait_time=secondsToMidnight(gmt=2), "Daily limit for this host reached") - elif "hostererror" in page: - self.logWarning(_("Hoster temporarily unavailable, waiting 1 minute and retry")) - self.retry(5, 60, "Hoster is temporarily unavailable") - #page = json_loads(page) - #new_url = page.keys()[0] - #self.api_data = page[new_url] - - try: - self.pyfile.name = re.search(r'([^<]+)', page).group(1) - except AttributeError: - self.pyfile.name = "" - - try: - self.pyfile.size = re.search(r'(\d+)', page).group(1) - except AttributeError: - self.pyfile.size = 0 - - try: - new_url = re.search(r'([^<]+)', page).group(1) - except AttributeError: - new_url = 'http://www.simply-premium.com/premium.php?link=' + pyfile.url - - if new_url != pyfile.url: - self.logDebug("New URL: " + new_url) - - self.download(new_url, disposition=True) diff --git a/pyload/plugin/hoster/SimplydebridCom.py b/pyload/plugin/hoster/SimplydebridCom.py deleted file mode 100644 index f93e2bc12..000000000 --- a/pyload/plugin/hoster/SimplydebridCom.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.Hoster import Hoster - - -class SimplydebridCom(Hoster): - __name__ = "SimplydebridCom" - __type__ = "hoster" - __version__ = "0.10" - - __pattern__ = r'http://(?:www\.)?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/sd\.php/*' - - __description__ = """Simply-debrid.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Kagenoshin", "kagenoshin@gmx.ch")] - - - def setup(self): - self.resumeDownload = True - self.multiDL = True - self.chunkLimit = 1 - - - def process(self, pyfile): - if not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "simply-debrid.com") - self.fail(_("No simply-debrid.com account provided")) - - self.logDebug("Old URL: %s" % pyfile.url) - - #fix the links for simply-debrid.com! - new_url = pyfile.url - new_url = new_url.replace("clz.to", "cloudzer.net/file") - new_url = new_url.replace("http://share-online", "http://www.share-online") - new_url = new_url.replace("ul.to", "uploaded.net/file") - new_url = new_url.replace("uploaded.com", "uploaded.net") - new_url = new_url.replace("filerio.com", "filerio.in") - new_url = new_url.replace("lumfile.com", "lumfile.se") - if('fileparadox' in new_url): - new_url = new_url.replace("http://", "https://") - - if re.match(self.__pattern__, new_url): - new_url = new_url - - self.logDebug("New URL: %s" % new_url) - - if not re.match(self.__pattern__, new_url): - page = self.load("http://simply-debrid.com/api.php", get={'dl': new_url}) # +'&u='+self.user+'&p='+self.account.getAccountData(self.user)['password']) - if 'tiger Link' in page or 'Invalid Link' in page or ('API' in page and 'ERROR' in page): - self.fail(_("Unable to unrestrict link")) - new_url = page - - self.setWait(5) - self.wait() - self.logDebug("Unrestricted URL: " + new_url) - - self.download(new_url, disposition=True) - - check = self.checkDownload({"bad1": "No address associated with hostname", "bad2": "\w+)' - - __description__ = """Sockshare.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("jeix", "jeix@hasnomail.de"), - ("stickell", "l.stickell@yahoo.it"), - ("Walter Purcaro", "vuolter@gmail.com")] - - -getInfo = create_getInfo(SockshareCom) diff --git a/pyload/plugin/hoster/SoundcloudCom.py b/pyload/plugin/hoster/SoundcloudCom.py deleted file mode 100644 index cfb07b35d..000000000 --- a/pyload/plugin/hoster/SoundcloudCom.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- - -import pycurl -import re - -from pyload.plugin.Hoster import Hoster - - -class SoundcloudCom(Hoster): - __name__ = "SoundcloudCom" - __type__ = "hoster" - __version__ = "0.10" - - __pattern__ = r'https?://(?:www\.)?soundcloud\.com/(?P.*?)/(?P.*)' - - __description__ = """SoundCloud.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Peekayy", "peekayy.dev@gmail.com")] - - - def process(self, pyfile): - # default UserAgent of HTTPRequest fails for this hoster so we use this one - self.req.http.c.setopt(pycurl.USERAGENT, 'Mozilla/5.0') - page = self.load(pyfile.url) - m = re.search(r'
    .*?)"', page) - if m: - clientId = m.group("CID") - - if len(clientId) <= 0: - clientId = "b45b1aa10f1ac2941910a7f0d10f8e28" - - m = re.search(r'\s(?P.*?)\s</em>', page) - if m: - pyfile.name = m.group("TITLE") + ".mp3" - else: - pyfile.name = re.match(self.__pattern__, pyfile.url).group("SID") + ".mp3" - - # url to retrieve the actual song url - page = self.load("https://api.sndcdn.com/i1/tracks/%s/streams" % songId, get={"client_id": clientId}) - # getting streams - # for now we choose the first stream found in all cases - # it could be improved if relevant for this hoster - streams = [ - (result.group("QUALITY"), result.group("URL")) - for result in re.finditer(r'"(?P<QUALITY>.*?)":"(?P<URL>.*?)"', page) - ] - self.logDebug("Found Streams", streams) - self.logDebug("Downloading", streams[0][0], streams[0][1]) - self.download(streams[0][1]) diff --git a/pyload/plugin/hoster/SpeedLoadOrg.py b/pyload/plugin/hoster/SpeedLoadOrg.py deleted file mode 100644 index 588eb26a3..000000000 --- a/pyload/plugin/hoster/SpeedLoadOrg.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class SpeedLoadOrg(DeadHoster): - __name__ = "SpeedLoadOrg" - __type__ = "hoster" - __version__ = "1.02" - - __pattern__ = r'http://(?:www\.)?speedload\.org/(?P<ID>\w+)' - - __description__ = """Speedload.org hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] - - -getInfo = create_getInfo(SpeedLoadOrg) diff --git a/pyload/plugin/hoster/SpeedfileCz.py b/pyload/plugin/hoster/SpeedfileCz.py deleted file mode 100644 index f17aa6a59..000000000 --- a/pyload/plugin/hoster/SpeedfileCz.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class SpeedfileCz(DeadHoster): - __name__ = "SpeedFileCz" - __type__ = "hoster" - __version__ = "0.32" - - __pattern__ = r'http://(?:www\.)?speedfile\.cz/.*' - - __description__ = """Speedfile.cz hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - -getInfo = create_getInfo(SpeedfileCz) diff --git a/pyload/plugin/hoster/SpeedyshareCom.py b/pyload/plugin/hoster/SpeedyshareCom.py deleted file mode 100644 index 41c23f438..000000000 --- a/pyload/plugin/hoster/SpeedyshareCom.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://speedy.sh/ep2qY/Zapp-Brannigan.jpg - -import re - -from urlparse import urljoin - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class SpeedyshareCom(SimpleHoster): - __name__ = "SpeedyshareCom" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'https?://(?:www\.)?(speedyshare\.com|speedy\.sh)/\w+' - - __description__ = """Speedyshare.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zapp-brannigan", "fuerst.reinje@web.de")] - - - NAME_PATTERN = r'class=downloadfilename>(?P<N>.*)</span></td>' - SIZE_PATTERN = r'class=sizetagtext>(?P<S>.*) (?P<U>[kKmM]?[iI]?[bB]?)</div>' - - OFFLINE_PATTERN = r'class=downloadfilenamenotfound>.*</span>' - - LINK_PATTERN = r'<a href=\'(.*)\'><img src=/gf/slowdownload\.png alt=\'Slow Download\' border=0' - - - def setup(self): - self.multiDL = False - self.chunkLimit = 1 - - - def handleFree(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.error(_("Download link not found")) - - dl_link = urljoin("http://www.speedyshare.com", m.group(1)) - self.download(dl_link, disposition=True) - - check = self.checkDownload({'html': re.compile("html")}) - if check == "html": - self.error(_("Downloaded file is an html page")) - - -getInfo = create_getInfo(SpeedyshareCom) diff --git a/pyload/plugin/hoster/StorageTo.py b/pyload/plugin/hoster/StorageTo.py deleted file mode 100644 index 4b18c69da..000000000 --- a/pyload/plugin/hoster/StorageTo.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class StorageTo(DeadHoster): - __name__ = "StorageTo" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?storage\.to/get/.+' - - __description__ = """Storage.to hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("mkaay", "mkaay@mkaay.de")] - - -getInfo = create_getInfo(StorageTo) diff --git a/pyload/plugin/hoster/StreamCz.py b/pyload/plugin/hoster/StreamCz.py deleted file mode 100644 index e5e389e20..000000000 --- a/pyload/plugin/hoster/StreamCz.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.network.RequestFactory import getURL -from pyload.plugin.Hoster import Hoster - - -def getInfo(urls): - result = [] - - for url in urls: - - html = getURL(url) - if re.search(StreamCz.OFFLINE_PATTERN, html): - # File offline - result.append((url, 0, 1, url)) - else: - result.append((url, 0, 2, url)) - yield result - - -class StreamCz(Hoster): - __name__ = "StreamCz" - __type__ = "hoster" - __version__ = "0.20" - - __pattern__ = r'https?://(?:www\.)?stream\.cz/[^/]+/\d+.*' - - __description__ = """Stream.cz hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'<link rel="video_src" href="http://www\.stream\.cz/\w+/(\d+)-([^"]+)" />' - OFFLINE_PATTERN = r'<h1 class="commonTitle">Str.nku nebylo mo.n. nal.zt \(404\)</h1>' - - CDN_PATTERN = r'<param name="flashvars" value="[^"]*&id=(?P<ID>\d+)(?:&cdnLQ=(?P<cdnLQ>\d*))?(?:&cdnHQ=(?P<cdnHQ>\d*))?(?:&cdnHD=(?P<cdnHD>\d*))?&' - - - def setup(self): - self.resumeDownload = True - self.multiDL = True - - - def process(self, pyfile): - self.html = self.load(pyfile.url, decode=True) - - if re.search(self.OFFLINE_PATTERN, self.html): - self.offline() - - m = re.search(self.CDN_PATTERN, self.html) - if m is None: - self.error(_("CDN_PATTERN not found")) - cdn = m.groupdict() - self.logDebug(cdn) - for cdnkey in ("cdnHD", "cdnHQ", "cdnLQ"): - if cdnkey in cdn and cdn[cdnkey] > '': - cdnid = cdn[cdnkey] - break - else: - self.fail(_("Stream URL not found")) - - m = re.search(self.NAME_PATTERN, self.html) - if m is None: - self.error(_("NAME_PATTERN not found")) - pyfile.name = "%s-%s.%s.mp4" % (m.group(2), m.group(1), cdnkey[-2:]) - - download_url = "http://cdn-dispatcher.stream.cz/?id=" + cdnid - self.logInfo(_("STREAM: %s") % cdnkey[-2:], download_url) - self.download(download_url) diff --git a/pyload/plugin/hoster/StreamcloudEu.py b/pyload/plugin/hoster/StreamcloudEu.py deleted file mode 100644 index 62e2504c4..000000000 --- a/pyload/plugin/hoster/StreamcloudEu.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class StreamcloudEu(XFSHoster): - __name__ = "StreamcloudEu" - __type__ = "hoster" - __version__ = "0.09" - - __pattern__ = r'http://(?:www\.)?streamcloud\.eu/\w{12}' - - __description__ = """Streamcloud.eu hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("seoester", "seoester@googlemail.com")] - - - HOSTER_DOMAIN = "streamcloud.eu" - - LINK_PATTERN = r'file: "(http://(stor|cdn)\d+\.streamcloud\.eu:?\d*/.*/video\.(mp4|flv))",' - - - def setup(self): - self.multiDL = True - self.chunkLimit = 1 - self.resumeDownload = self.premium - - -getInfo = create_getInfo(StreamcloudEu) diff --git a/pyload/plugin/hoster/TurbobitNet.py b/pyload/plugin/hoster/TurbobitNet.py deleted file mode 100644 index 1aaa555a9..000000000 --- a/pyload/plugin/hoster/TurbobitNet.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- - -import random -import re -import time - -from Crypto.Cipher import ARC4 -from binascii import hexlify, unhexlify -from pycurl import HTTPHEADER -from urllib import quote - -from pyload.network.RequestFactory import getURL -from pyload.plugin.internal.captcha import ReCaptcha -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp - - -class TurbobitNet(SimpleHoster): - __name__ = "TurbobitNet" - __type__ = "hoster" - __version__ = "0.16" - - __pattern__ = r'http://(?:www\.)?turbobit\.net/(?:download/free/)?(?P<ID>\w+)' - - __description__ = """Turbobit.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz"), - ("prOq", "")] - - - URL_REPLACEMENTS = [(__pattern__ + ".*", "http://turbobit.net/\g<ID>.html")] - - COOKIES = [("turbobit.net", "user_lang", "en")] - - NAME_PATTERN = r'id="file-title">(?P<N>.+?)<' - SIZE_PATTERN = r'class="file-size">(?P<S>[\d.,]+) (?P<U>[\w^_]+)' - OFFLINE_PATTERN = r'<h2>File Not Found</h2>|html\(\'File (?:was )?not found' - - LINK_PATTERN = r'(?P<url>/download/redirect/[^"\']+)' - LIMIT_WAIT_PATTERN = r'<div id=\'timeout\'>(\d+)<' - - CAPTCHA_PATTERN = r'<img alt="Captcha" src="(.+?)"' - - - def handleFree(self): - self.url = "http://turbobit.net/download/free/%s" % self.info['pattern']['ID'] - self.html = self.load(self.url, ref=True, decode=True) - - rtUpdate = self.getRtUpdate() - - self.solveCaptcha() - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) - self.url = self.getDownloadUrl(rtUpdate) - - self.wait() - self.html = self.load(self.url) - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"]) - self.downloadFile() - - - def solveCaptcha(self): - for _i in xrange(5): - m = re.search(self.LIMIT_WAIT_PATTERN, self.html) - if m: - wait_time = int(m.group(1)) - self.wait(wait_time, wait_time > 60) - self.retry() - - action, inputs = self.parseHtmlForm("action='#'") - if not inputs: - self.error(_("Captcha form not found")) - self.logDebug(inputs) - - if inputs['captcha_type'] == 'recaptcha': - recaptcha = ReCaptcha(self) - inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge() - else: - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m is None: - self.error(_("captcha")) - captcha_url = m.group(1) - inputs['captcha_response'] = self.decryptCaptcha(captcha_url) - - self.logDebug(inputs) - self.html = self.load(self.url, post=inputs) - - if '<div class="captcha-error">Incorrect, try again!<' in self.html: - self.invalidCaptcha() - else: - self.correctCaptcha() - break - else: - self.fail(_("Invalid captcha")) - - - def getRtUpdate(self): - rtUpdate = self.getStorage("rtUpdate") - if not rtUpdate: - if self.getStorage("version") != self.__version__ \ - or int(self.getStorage("timestamp", 0)) + 86400000 < timestamp(): - # that's right, we are even using jdownloader updates - rtUpdate = getURL("http://update0.jdownloader.org/pluginstuff/tbupdate.js") - rtUpdate = self.decrypt(rtUpdate.splitlines()[1]) - # but we still need to fix the syntax to work with other engines than rhino - rtUpdate = re.sub(r'for each\(var (\w+) in(\[[^\]]+\])\)\{', - r'zza=\2;for(var zzi=0;zzi<zza.length;zzi++){\1=zza[zzi];', rtUpdate) - rtUpdate = re.sub(r"for\((\w+)=", r"for(var \1=", rtUpdate) - - self.setStorage("rtUpdate", rtUpdate) - self.setStorage("timestamp", timestamp()) - self.setStorage("version", self.__version__) - else: - self.logError(_("Unable to download, wait for update...")) - self.tempOffline() - - return rtUpdate - - - def getDownloadUrl(self, rtUpdate): - self.req.http.lastURL = self.url - - m = re.search("(/\w+/timeout\.js\?\w+=)([^\"\'<>]+)", self.html) - if m: - url = "http://turbobit.net%s%s" % m.groups() - else: - url = "http://turbobit.net/files/timeout.js?ver=%s" % "".join(random.choice('0123456789ABCDEF') for _i in xrange(32)) - - fun = self.load(url) - - self.setWait(65, False) - - for b in [1, 3]: - self.jscode = "var id = \'%s\';var b = %d;var inn = \'%s\';%sout" % ( - self.info['pattern']['ID'], b, quote(fun), rtUpdate) - - try: - out = self.js.eval(self.jscode) - self.logDebug("URL", self.js.engine, out) - if out.startswith('/download/'): - return "http://turbobit.net%s" % out.strip() - except Exception, e: - self.logError(e) - else: - if self.retries >= 2: - # retry with updated js - self.delStorage("rtUpdate") - self.retry() - - - def decrypt(self, data): - cipher = ARC4.new(hexlify('E\x15\xa1\x9e\xa3M\xa0\xc6\xa0\x84\xb6H\x83\xa8o\xa0')) - return unhexlify(cipher.encrypt(unhexlify(data))) - - - def getLocalTimeString(self): - lt = time.localtime() - tz = time.altzone if lt.tm_isdst else time.timezone - return "%s GMT%+03d%02d" % (time.strftime("%a %b %d %Y %H:%M:%S", lt), -tz // 3600, tz % 3600) - - - def handlePremium(self): - self.logDebug("Premium download as user %s" % self.user) - self.downloadFile() - - - def downloadFile(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.error(_("Download link not found")) - self.url = "http://turbobit.net" + m.group('url') - self.download(self.url) - - -getInfo = create_getInfo(TurbobitNet) diff --git a/pyload/plugin/hoster/TurbouploadCom.py b/pyload/plugin/hoster/TurbouploadCom.py deleted file mode 100644 index 6be6280fb..000000000 --- a/pyload/plugin/hoster/TurbouploadCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class TurbouploadCom(DeadHoster): - __name__ = "TurbouploadCom" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?turboupload\.com/(\w+).*' - - __description__ = """Turboupload.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - -getInfo = create_getInfo(TurbouploadCom) diff --git a/pyload/plugin/hoster/TusfilesNet.py b/pyload/plugin/hoster/TusfilesNet.py deleted file mode 100644 index 303d001df..000000000 --- a/pyload/plugin/hoster/TusfilesNet.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class TusfilesNet(XFSHoster): - __name__ = "TusfilesNet" - __type__ = "hoster" - __version__ = "0.07" - - __pattern__ = r'https?://(?:www\.)?tusfiles\.net/\w{12}' - - __description__ = """Tusfiles.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com"), - ("guidobelix", "guidobelix@hotmail.it")] - - - HOSTER_DOMAIN = "tusfiles.net" - - INFO_PATTERN = r'\](?P<N>.+) - (?P<S>[\d.,]+) (?P<U>[\w^_]+)\[' - OFFLINE_PATTERN = r'>File Not Found|<Title>TusFiles - Fast Sharing Files!' - - - def setup(self): - self.multiDL = False - self.chunkLimit = -1 - self.resumeDownload = True - - - def handlePremium(self): - return self.handleFree() - - -getInfo = create_getInfo(TusfilesNet) diff --git a/pyload/plugin/hoster/TwoSharedCom.py b/pyload/plugin/hoster/TwoSharedCom.py deleted file mode 100644 index 637f9058c..000000000 --- a/pyload/plugin/hoster/TwoSharedCom.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class TwoSharedCom(SimpleHoster): - __name__ = "TwoSharedCom" - __type__ = "hoster" - __version__ = "0.12" - - __pattern__ = r'http://(?:www\.)?2shared\.com/(account/)?(download|get|file|document|photo|video|audio)/.*' - - __description__ = """2Shared.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'<h1>(?P<N>.*)</h1>' - SIZE_PATTERN = r'<span class="dtitle">File size:</span>\s*(?P<S>[\d.,]+) (?P<U>[\w^_]+)' - OFFLINE_PATTERN = r'The file link that you requested is not valid\.|This file was deleted\.' - - LINK_PATTERN = r'window.location =\'(.+?)\';' - - - def setup(self): - self.resumeDownload = True - self.multiDL = True - - - def handleFree(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.error(_("Download link")) - - link = m.group(1) - self.download(link) - - -getInfo = create_getInfo(TwoSharedCom) diff --git a/pyload/plugin/hoster/UlozTo.py b/pyload/plugin/hoster/UlozTo.py deleted file mode 100644 index d988b2ba5..000000000 --- a/pyload/plugin/hoster/UlozTo.py +++ /dev/null @@ -1,164 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import time - -from pyload.utils import json_loads -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -def convertDecimalPrefix(m): - # decimal prefixes used in filesize and traffic - return ("%%.%df" % {'k': 3, 'M': 6, 'G': 9}[m.group(2)] % float(m.group(1))).replace('.', '') - - -class UlozTo(SimpleHoster): - __name__ = "UlozTo" - __type__ = "hoster" - __version__ = "1.00" - - __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj\.cz|zachowajto\.pl)/(?:live/)?(?P<id>\w+/[^/?]*)' - - __description__ = """Uloz.to hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - INFO_PATTERN = r'<p>File <strong>(?P<N>[^<]+)</strong> is password protected</p>' - NAME_PATTERN = r'<title>(?P<N>[^<]+) \| Uloz\.to' - SIZE_PATTERN = r'.*?(?P[\d.,]+\s[kMG]?B)' - OFFLINE_PATTERN = r'404 - Page not found|

    File (has been deleted|was banned)

    ' - - SIZE_REPLACEMENTS = [('([\d.]+)\s([kMG])B', convertDecimalPrefix)] - URL_REPLACEMENTS = [(r"(?<=http://)([^/]+)", "www.ulozto.net")] - - ADULT_PATTERN = r'
    ' - PASSWD_PATTERN = r'
    ' - VIPLINK_PATTERN = r'' - FREE_URL_PATTERN = r'
    \s*
  • Error rewriting the text.
  • '), - "offline": re.compile(self.OFFLINE_PATTERN), - "passwd": self.PASSWD_PATTERN, - "server_error": 'src="http://img.ulozto.cz/error403/vykricnik.jpg"', # paralell dl, server overload etc. - "not_found": "Ulož.to" - }) - - if check == "wrong_captcha": - #self.delStorage("captcha_id") - #self.delStorage("captcha_text") - self.invalidCaptcha() - self.retry(reason=_("Wrong captcha code")) - elif check == "offline": - self.offline() - elif check == "passwd": - self.fail(_("Wrong password")) - elif check == "server_error": - self.logError(_("Server error, try downloading later")) - self.multiDL = False - self.wait(1 * 60 * 60, True) - self.retry() - elif check == "not_found": - self.fail(_("Server error - file not downloadable")) - - -getInfo = create_getInfo(UlozTo) diff --git a/pyload/plugin/hoster/UloziskoSk.py b/pyload/plugin/hoster/UloziskoSk.py deleted file mode 100644 index 41bafdac6..000000000 --- a/pyload/plugin/hoster/UloziskoSk.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class UloziskoSk(SimpleHoster): - __name__ = "UloziskoSk" - __type__ = "hoster" - __version__ = "0.24" - - __pattern__ = r'http://(?:www\.)?ulozisko\.sk/.*' - - __description__ = """Ulozisko.sk hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'
    (?P[^<]+)
    ' - SIZE_PATTERN = ur'Veľkosť súboru: (?P[\d.,]+) (?P[\w^_]+)
    ' - OFFLINE_PATTERN = ur'Zadaný súbor neexistuje z jedného z nasledujúcich dôvodov:' - - LINK_PATTERN = r'' - ID_PATTERN = r'' - CAPTCHA_PATTERN = r'' - IMG_PATTERN = ur'PRE ZVÄČŠENIE KLIKNITE NA OBRÁZOK
    ' - - - def process(self, pyfile): - self.html = self.load(pyfile.url, decode=True) - self.getFileInfo() - - m = re.search(self.IMG_PATTERN, self.html) - if m: - url = "http://ulozisko.sk" + m.group(1) - self.download(url) - else: - self.handleFree() - - - def handleFree(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.error(_("LINK_PATTERN not found")) - parsed_url = 'http://www.ulozisko.sk' + m.group(1) - - m = re.search(self.ID_PATTERN, self.html) - if m is None: - self.error(_("ID_PATTERN not found")) - id = m.group(1) - - self.logDebug("URL:" + parsed_url + ' ID:' + id) - - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m is None: - self.error(_("CAPTCHA_PATTERN not found")) - captcha_url = 'http://www.ulozisko.sk' + m.group(1) - - captcha = self.decryptCaptcha(captcha_url, cookies=True) - - self.logDebug("CAPTCHA_URL:" + captcha_url + ' CAPTCHA:' + captcha) - - self.download(parsed_url, post={ - "antispam": captcha, - "id": id, - "name": self.pyfile.name, - "but": "++++STIAHNI+S%DABOR++++" - }) - - -getInfo = create_getInfo(UloziskoSk) diff --git a/pyload/plugin/hoster/UnibytesCom.py b/pyload/plugin/hoster/UnibytesCom.py deleted file mode 100644 index 1ce1f5c47..000000000 --- a/pyload/plugin/hoster/UnibytesCom.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urlparse import urljoin - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class UnibytesCom(SimpleHoster): - __name__ = "UnibytesCom" - __type__ = "hoster" - __version__ = "0.11" - - __pattern__ = r'https?://(?:www\.)?unibytes\.com/[\w .-]{11}B' - - __description__ = """UniBytes.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - HOSTER_DOMAIN = "unibytes.com" - - INFO_PATTERN = r']*?id="fileName"[^>]*>(?P[^>]+)\s*\((?P\d.*?)\)' - - WAIT_PATTERN = r'Wait for (\d+) sec' - LINK_PATTERN = r'Download' - - - def handleFree(self): - domain = "http://www.%s/" % self.HOSTER_DOMAIN - action, post_data = self.parseHtmlForm('id="startForm"') - - for _i in xrange(8): - self.logDebug(action, post_data) - self.html = self.load(urljoin(domain, action), post=post_data, follow_location=False) - - m = re.search(r'location:\s*(\S+)', self.req.http.header, re.I) - if m: - url = m.group(1) - break - - if '>Somebody else is already downloading using your IP-address<' in self.html: - self.wait(10 * 60, True) - self.retry() - - if post_data['step'] == 'last': - m = re.search(self.LINK_PATTERN, self.html) - if m: - url = m.group(1) - self.correctCaptcha() - break - else: - self.invalidCaptcha() - - last_step = post_data['step'] - action, post_data = self.parseHtmlForm('id="stepForm"') - - if last_step == 'timer': - m = re.search(self.WAIT_PATTERN, self.html) - self.wait(int(m.group(1)) if m else 60, False) - elif last_step in ("captcha", "last"): - post_data['captcha'] = self.decryptCaptcha(urljoin(domain, "/captcha.jpg")) - else: - self.fail(_("No valid captcha code entered")) - - self.download(url) - - -getInfo = create_getInfo(UnibytesCom) diff --git a/pyload/plugin/hoster/UnrestrictLi.py b/pyload/plugin/hoster/UnrestrictLi.py deleted file mode 100644 index 116d98e47..000000000 --- a/pyload/plugin/hoster/UnrestrictLi.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from datetime import datetime, timedelta - -from pyload.utils import json_loads -from pyload.plugin.Hoster import Hoster - - -def secondsToMidnight(gmt=0): - now = datetime.utcnow() + timedelta(hours=gmt) - if now.hour is 0 and now.minute < 10: - midnight = now - else: - midnight = now + timedelta(days=1) - midnight = midnight.replace(hour=0, minute=10, second=0, microsecond=0) - return int((midnight - now).total_seconds()) - - -class UnrestrictLi(Hoster): - __name__ = "UnrestrictLi" - __type__ = "hoster" - __version__ = "0.12" - - __pattern__ = r'https?://(?:[^/]*\.)?(unrestrict|unr)\.li' - - __description__ = """Unrestrict.li hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] - - - def setup(self): - self.chunkLimit = 16 - self.resumeDownload = True - - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "Unrestrict.li") - self.fail(_("No Unrestrict.li account provided")) - else: - self.logDebug("Old URL: %s" % pyfile.url) - for _i in xrange(5): - page = self.load('https://unrestrict.li/unrestrict.php', - post={'link': pyfile.url, 'domain': 'long'}) - self.logDebug("JSON data: " + page) - if page != '': - break - else: - self.logInfo(_("Unable to get API data, waiting 1 minute and retry")) - self.retry(5, 60, "Unable to get API data") - - if 'Expired session' in page or ("You are not allowed to " - "download from this host" in page and self.premium): - self.account.relogin(self.user) - self.retry() - elif "File offline" in page: - self.offline() - elif "You are not allowed to download from this host" in page: - self.fail(_("You are not allowed to download from this host")) - elif "You have reached your daily limit for this host" in page: - self.logWarning(_("Reached daily limit for this host")) - self.retry(5, secondsToMidnight(gmt=2), "Daily limit for this host reached") - elif "ERROR_HOSTER_TEMPORARILY_UNAVAILABLE" in page: - self.logInfo(_("Hoster temporarily unavailable, waiting 1 minute and retry")) - self.retry(5, 60, "Hoster is temporarily unavailable") - page = json_loads(page) - new_url = page.keys()[0] - self.api_data = page[new_url] - - if new_url != pyfile.url: - self.logDebug("New URL: " + new_url) - - if hasattr(self, 'api_data'): - self.setNameSize() - - self.download(new_url, disposition=True) - - if self.getConfig("history"): - self.load("https://unrestrict.li/history/", get={'delete': "all"}) - self.logInfo(_("Download history deleted")) - - - def setNameSize(self): - if 'name' in self.api_data: - self.pyfile.name = self.api_data['name'] - if 'size' in self.api_data: - self.pyfile.size = self.api_data['size'] diff --git a/pyload/plugin/hoster/UpleaCom.py b/pyload/plugin/hoster/UpleaCom.py deleted file mode 100644 index 3fed6c8cf..000000000 --- a/pyload/plugin/hoster/UpleaCom.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urlparse import urljoin - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class UpleaCom(XFSHoster): - __name__ = "UpleaCom" - __type__ = "hoster" - __version__ = "0.05" - - __pattern__ = r'https?://(?:www\.)?uplea\.com/dl/\w{15}' - - __description__ = """Uplea.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Redleon", "")] - - - HOSTER_DOMAIN = "uplea.com" - - NAME_PATTERN = r'class="agmd size18">(?P.+?)<' - SIZE_PATTERN = r'size14">(?P[\d.,]+) (?P[\w^_])' - - OFFLINE_PATTERN = r'>You followed an invalid or expired link' - - LINK_PATTERN = r'"(http?://\w+\.uplea\.com/anonym/.*?)"' - WAIT_PATTERN = r'timeText:([\d.]+),' - STEP_PATTERN = r'' - - - def setup(self): - self.multiDL = False - self.chunkLimit = 1 - self.resumeDownload = True - - - def handleFree(self): - m = re.search(self.STEP_PATTERN, self.html) - if m is None: - self.error("STEP_PATTERN not found") - - self.html = self.load(urljoin("http://uplea.com/", m.group(1))) - - m = re.search(self.WAIT_PATTERN, self.html) - if m: - self.wait(int(m.group(1)), True) - self.retry() - - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.error("LINK_PATTERN not found") - - self.wait(15) - self.download(m.group(1), disposition=True) - - -getInfo = create_getInfo(UpleaCom) diff --git a/pyload/plugin/hoster/UploadStationCom.py b/pyload/plugin/hoster/UploadStationCom.py deleted file mode 100644 index 9ece25cdb..000000000 --- a/pyload/plugin/hoster/UploadStationCom.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class UploadStationCom(DeadHoster): - __name__ = "UploadStationCom" - __type__ = "hoster" - __version__ = "0.52" - - __pattern__ = r'http://(?:www\.)?uploadstation\.com/file/(?P\w+)' - - __description__ = """UploadStation.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es"), - ("zoidberg", "zoidberg@mujmail.cz")] - - -getInfo = create_getInfo(UploadStationCom) diff --git a/pyload/plugin/hoster/UploadableCh.py b/pyload/plugin/hoster/UploadableCh.py deleted file mode 100644 index 07ab51601..000000000 --- a/pyload/plugin/hoster/UploadableCh.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import sleep - -from pyload.plugin.captcha import ReCaptcha -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class UploadableCh(SimpleHoster): - __name__ = "UploadableCh" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?uploadable\.ch/file/(?P\w+)' - - __description__ = """Uploadable.ch hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zapp-brannigan", "fuerst.reinje@web.de"), - ("Walter Purcaro", "vuolter@gmail.com")] - - - FILE_INFO_PATTERN = r'div id=\"file_name\" title=.*>(?P.+)\((?P[\d.]+) (?P\w+)\)<' - - OFFLINE_PATTERN = r'>(File not available|This file is no longer available)' - TEMP_OFFLINE_PATTERN = r'
    ' - - WAIT_PATTERN = r'data-time="(\d+)" data-format' - - FILE_URL_REPLACEMENTS = [(__pattern__ + ".*", r'http://www.uploadable.ch/file/\g')] - - - def setup(self): - self.multiDL = False - self.chunkLimit = 1 - - - def handleFree(self): - # Click the "free user" button and wait - a = self.load(self.pyfile.url, cookies=True, post={'downloadLink': "wait"}, decode=True) - self.logDebug(a) - - m = re.search(self.WAIT_PATTERN, a) - if m is not None: - self.wait(int(m.group(1))) #: Expected output: {"waitTime":30} - else: - self.error("WAIT_PATTERN") - - # Make the recaptcha appear and show it the pyload interface - b = self.load(self.pyfile.url, cookies=True, post={'checkDownload': "check"}, decode=True) - self.logDebug(b) #: Expected output: {"success":"showCaptcha"} - - recaptcha = ReCaptcha(self) - - challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) - - # Submit the captcha solution - self.load("http://www.uploadable.ch/checkReCaptcha.php", - cookies=True, - post={'recaptcha_challenge_field' : challenge, - 'recaptcha_response_field' : response, - 'recaptcha_shortencode_field': self.info['ID']}, - decode=True) - - self.wait(3) - - # Get ready for downloading - self.load(self.pyfile.url, cookies=True, post={'downloadLink': "show"}, decode=True) - - self.wait(3) - - # Download the file - self.download(self.pyfile.url, cookies=True, post={'download': "normal"}, disposition=True) - - - def checkFile(self): - check = self.checkDownload({'wait_or_reconnect': re.compile("Please wait for"), - 'is_html' : re.compile("")}) - - if check == "wait_or_reconnect": - self.logInfo("Downloadlimit reached, please wait or reconnect") - self.wait(60 * 60, True) - self.retry() - - elif check == "is_html": - self.error("Downloaded file is an html file") - - -getInfo = create_getInfo(UploadableCh) diff --git a/pyload/plugin/hoster/UploadboxCom.py b/pyload/plugin/hoster/UploadboxCom.py deleted file mode 100644 index 6285b56c5..000000000 --- a/pyload/plugin/hoster/UploadboxCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class UploadboxCom(DeadHoster): - __name__ = "Uploadbox" - __type__ = "hoster" - __version__ = "0.05" - - __pattern__ = r'http://(?:www\.)?uploadbox\.com/files/.+' - - __description__ = """UploadBox.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - -getInfo = create_getInfo(UploadboxCom) diff --git a/pyload/plugin/hoster/UploadedTo.py b/pyload/plugin/hoster/UploadedTo.py deleted file mode 100644 index eb52f9721..000000000 --- a/pyload/plugin/hoster/UploadedTo.py +++ /dev/null @@ -1,245 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://ul.to/044yug9o -# http://ul.to/gzfhd0xs - -import re - -from time import sleep - -from pyload.network.RequestFactory import getURL -from pyload.plugin.Hoster import Hoster -from pyload.plugin.Plugin import chunks -from pyload.plugin.internal.captcha import ReCaptcha -from pyload.utils import html_unescape, parseFileSize - - -key = "bGhGMkllZXByd2VEZnU5Y2NXbHhYVlZ5cEE1bkEzRUw=".decode('base64') - - -def getID(url): - """ returns id from file url""" - m = re.match(UploadedTo.__pattern__, url) - return m.group('ID') - - -def getAPIData(urls): - post = {"apikey": key} - - idMap = {} - - for i, url in enumerate(urls): - id = getID(url) - post['id_%s' % i] = id - idMap[id] = url - - for _i in xrange(5): - api = unicode(getURL("http://uploaded.net/api/filemultiple", post=post, decode=False), 'iso-8859-1') - if api != "can't find request": - break - else: - sleep(3) - - result = {} - - if api: - for line in api.splitlines(): - data = line.split(",", 4) - if data[1] in idMap: - result[data[1]] = (data[0], data[2], data[4], data[3], idMap[data[1]]) - - return result - - -def parseFileInfo(self, url='', html=''): - if not html and hasattr(self, "html"): - html = self.html - - name = url - size = 0 - fileid = None - - if re.search(self.OFFLINE_PATTERN, html): - # File offline - status = 1 - else: - m = re.search(self.INFO_PATTERN, html) - if m: - name, fileid = html_unescape(m.group('N')), m.group('ID') - size = parseFileSize(m.group('S')) - status = 2 - else: - status = 3 - - return name, size, status, fileid - - -def getInfo(urls): - for chunk in chunks(urls, 80): - result = [] - - api = getAPIData(chunk) - - for data in api.itervalues(): - if data[0] == "online": - result.append((html_unescape(data[2]), data[1], 2, data[4])) - - elif data[0] == "offline": - result.append((data[4], 0, 1, data[4])) - - yield result - - -class UploadedTo(Hoster): - __name__ = "UploadedTo" - __type__ = "hoster" - __version__ = "0.75" - - __pattern__ = r'https?://(?:www\.)?(uploaded\.(to|net)|ul\.to)(/file/|/?\?id=|.*?&id=|/)(?P\w+)' - - __description__ = """Uploaded.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("spoob", "spoob@pyload.org"), - ("mkaay", "mkaay@mkaay.de"), - ("zoidberg", "zoidberg@mujmail.cz"), - ("netpok", "netpok@gmail.com"), - ("stickell", "l.stickell@yahoo.it")] - - - INFO_PATTERN = r'(?P[^<]+)  \s*]*>(?P[^<]+)' - OFFLINE_PATTERN = r'Error: 404' - DL_LIMIT_PATTERN = r'You have reached the max. number of possible free downloads for this hour' - - - def setup(self): - self.multiDL = self.resumeDownload = self.premium - self.chunkLimit = 1 # critical problems with more chunks - - self.fileID = getID(self.pyfile.url) - self.pyfile.url = "http://uploaded.net/file/%s" % self.fileID - - - def process(self, pyfile): - self.load("http://uploaded.net/language/en", just_header=True) - - api = getAPIData([pyfile.url]) - - # TODO: fallback to parse from site, because api sometimes delivers wrong status codes - - if not api: - self.logWarning(_("No response for API call")) - - self.html = unicode(self.load(pyfile.url, decode=False), 'iso-8859-1') - name, size, status, self.fileID = parseFileInfo(self) - self.logDebug(name, size, status, self.fileID) - if status == 1: - self.offline() - elif status == 2: - pyfile.name, pyfile.size = name, size - else: - self.error(_("file info")) - - elif api == 'Access denied': - self.fail(_("API key invalid")) - - else: - if self.fileID not in api: - self.offline() - - self.data = api[self.fileID] - if self.data[0] != "online": - self.offline() - - pyfile.name = html_unescape(self.data[2]) - - # pyfile.name = self.get_file_name() - - if self.premium: - self.handlePremium() - else: - self.handleFree() - - - def handlePremium(self): - info = self.account.getAccountInfo(self.user, True) - self.logDebug("%(name)s: Use Premium Account (%(left)sGB left)" % {"name": self.__name__, - "left": info['trafficleft'] / 1024 / 1024}) - if int(self.data[1]) / 1024 > info['trafficleft']: - self.logInfo(_("Not enough traffic left")) - self.account.empty(self.user) - self.resetAccount() - self.fail(_("Traffic exceeded")) - - header = self.load("http://uploaded.net/file/%s" % self.fileID, just_header=True) - if 'location' in header: - #Direct download - self.logDebug("Direct download link detected") - self.download(header['location']) - else: - #Indirect download - self.html = self.load("http://uploaded.net/file/%s" % self.fileID) - m = re.search(r'
    (\d+) seconds", self.html) - if m is None: - self.fail(_("File not downloadable for free users")) - self.setWait(int(m.group(1))) - - self.html = self.load("http://uploaded.net/js/download.js", decode=True) - - url = "http://uploaded.net/io/ticket/captcha/%s" % self.fileID - downloadURL = "" - - recaptcha = ReCaptcha(self) - - for _i in xrange(5): - challenge, response = recaptcha.challenge() - options = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": response} - self.wait() - - result = self.load(url, post=options) - self.logDebug("Result: %s" % result) - - if "limit-size" in result: - self.fail(_("File too big for free download")) - elif "limit-slot" in result: # Temporary restriction so just wait a bit - self.setWait(30 * 60, True) - self.wait() - self.retry() - elif "limit-parallel" in result: - self.fail(_("Cannot download in parallel")) - elif "limit-dl" in result or self.DL_LIMIT_PATTERN in result: # limit-dl - self.setWait(3 * 60 * 60, True) - self.wait() - self.retry() - elif '"err":"captcha"' in result: - self.invalidCaptcha() - elif "type:'download'" in result: - self.correctCaptcha() - downloadURL = re.search("url:'([^']+)", result).group(1) - break - else: - self.error(_("Unknown error: %s") % result) - - if not downloadURL: - self.fail(_("No Download url retrieved/all captcha attempts failed")) - - self.download(downloadURL, disposition=True) - check = self.checkDownload({"limit-dl": self.DL_LIMIT_PATTERN}) - if check == "limit-dl": - self.setWait(3 * 60 * 60, True) - self.wait() - self.retry() diff --git a/pyload/plugin/hoster/UploadhereCom.py b/pyload/plugin/hoster/UploadhereCom.py deleted file mode 100644 index 64b235eda..000000000 --- a/pyload/plugin/hoster/UploadhereCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class UploadhereCom(DeadHoster): - __name__ = "UploadhereCom" - __type__ = "hoster" - __version__ = "0.12" - - __pattern__ = r'http://(?:www\.)?uploadhere\.com/\w{10}' - - __description__ = """Uploadhere.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - -getInfo = create_getInfo(UploadhereCom) diff --git a/pyload/plugin/hoster/UploadheroCom.py b/pyload/plugin/hoster/UploadheroCom.py deleted file mode 100644 index f29832af2..000000000 --- a/pyload/plugin/hoster/UploadheroCom.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://uploadhero.co/dl/wQBRAVSM - -import re - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class UploadheroCom(SimpleHoster): - __name__ = "UploadheroCom" - __type__ = "hoster" - __version__ = "0.16" - - __pattern__ = r'http://(?:www\.)?uploadhero\.com?/dl/\w+' - - __description__ = """UploadHero.co plugin""" - __license__ = "GPLv3" - __authors__ = [("mcmyst", "mcmyst@hotmail.fr"), - ("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'
    (?P.*?)
    ' - SIZE_PATTERN = r'Taille du fichier : (?P.*?)' - OFFLINE_PATTERN = r'

    |

    Le lien du fichier ci-dessus n\'existe plus.' - - COOKIES = [("uploadhero.co", "lang", "en")] - - IP_BLOCKED_PATTERN = r'href="(/lightbox_block_download\.php\?min=.*?)"' - IP_WAIT_PATTERN = r'(\d+).*\s*(\d+)' - - CAPTCHA_PATTERN = r'"(/captchadl\.php\?\w+)"' - FREE_URL_PATTERN = r'var magicomfg = \'"/]+)"' - PREMIUM_URL_PATTERN = r'\w+)' - - __description__ = """Uploading.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("jeix", "jeix@hasnomail.de"), - ("mkaay", "mkaay@mkaay.de"), - ("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'id="file_title">(?P.+)(?P[\d.,]+) (?P[\w^_]+)<' - OFFLINE_PATTERN = r'(Page|file) not found' - - COOKIES = [("uploading.com", "lang", "1"), - (".uploading.com", "language", "1"), - (".uploading.com", "setlang", "en"), - (".uploading.com", "_lang", "en")] - - - def process(self, pyfile): - if not "/get/" in pyfile.url: - pyfile.url = pyfile.url.replace("/files", "/files/get") - - self.html = self.load(pyfile.url, decode=True) - self.getFileInfo() - - if self.premium: - self.handlePremium() - else: - self.handleFree() - - - def handlePremium(self): - postData = {'action': 'get_link', - 'code': self.info['pattern']['ID'], - 'pass': 'undefined'} - - self.html = self.load('http://uploading.com/files/get/?JsHttpRequest=%d-xml' % timestamp(), post=postData) - url = re.search(r'"link"\s*:\s*"(.*?)"', self.html) - if url: - url = url.group(1).replace("\\/", "/") - self.download(url) - - raise Exception("Plugin defect") - - - def handleFree(self): - m = re.search('

    ((Daily )?Download Limit)

    ', self.html) - if m: - self.pyfile.error = m.group(1) - self.logWarning(self.pyfile.error) - self.retry(6, (6 * 60 if m.group(2) else 15) * 60, self.pyfile.error) - - ajax_url = "http://uploading.com/files/get/?ajax" - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) - self.req.http.lastURL = self.pyfile.url - - res = json_loads(self.load(ajax_url, post={'action': 'second_page', 'code': self.info['pattern']['ID']})) - - if 'answer' in res and 'wait_time' in res['answer']: - wait_time = int(res['answer']['wait_time']) - self.logInfo(_("Waiting %d seconds") % wait_time) - self.wait(wait_time) - else: - self.error(_("No AJAX/WAIT")) - - res = json_loads(self.load(ajax_url, post={'action': 'get_link', 'code': self.info['pattern']['ID'], 'pass': 'false'})) - - if 'answer' in res and 'link' in res['answer']: - url = res['answer']['link'] - else: - self.error(_("No AJAX/URL")) - - self.html = self.load(url) - m = re.search(r'.*?
    \s*\n

    (?P.*?)

    \s*\n
    \s*\n\s*(?P[\d.,]+) (?P[\w^_]+)' - OFFLINE_PATTERN = r'File not found' - - WAIT_PATTERN = r'var sec = (\d+)' - CHASH_PATTERN = r'' - LINK_PATTERN = r'' - - - def handleFree(self): - # STAGE 1: get link to continue - m = re.search(self.CHASH_PATTERN, self.html) - if m is None: - self.error(_("CHASH_PATTERN not found")) - chash = m.group(1) - self.logDebug("Read hash " + chash) - # continue to stage2 - post_data = {'hash': chash, 'free': 'Slow download'} - self.html = self.load(self.pyfile.url, post=post_data, decode=True) - - # STAGE 2: solv captcha and wait - # first get the infos we need: recaptcha key and wait time - recaptcha = ReCaptcha(self) - - # try the captcha 5 times - for i in xrange(5): - m = re.search(self.WAIT_PATTERN, self.html) - if m is None: - self.error(_("Wait pattern not found")) - wait_time = int(m.group(1)) - - # then, do the waiting - self.wait(wait_time) - - # then, handle the captcha - challenge, response = recaptcha.challenge() - post_data.update({'recaptcha_challenge_field': challenge, - 'recaptcha_response_field' : response}) - - self.html = self.load(self.pyfile.url, post=post_data, decode=True) - - # STAGE 3: get direct link - m = re.search(self.LINK_PATTERN, self.html, re.S) - if m: - break - - if m is None: - self.error(_("Download link not found")) - - direct = m.group(1) - self.download(direct, disposition=True) - - -getInfo = create_getInfo(UpstoreNet) diff --git a/pyload/plugin/hoster/UptoboxCom.py b/pyload/plugin/hoster/UptoboxCom.py deleted file mode 100644 index a7cc49f2a..000000000 --- a/pyload/plugin/hoster/UptoboxCom.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class UptoboxCom(XFSHoster): - __name__ = "UptoboxCom" - __type__ = "hoster" - __version__ = "0.16" - - __pattern__ = r'https?://(?:www\.)?uptobox\.com/\w{12}' - - __description__ = """Uptobox.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] - - - HOSTER_DOMAIN = "uptobox.com" - - INFO_PATTERN = r'"para_title">(?P.+) \((?P[\d.,]+) (?P[\w^_]+)\)' - OFFLINE_PATTERN = r'>(File not found|Access Denied|404 Not Found)' - - LINK_PATTERN = r'"(https?://\w+\.uptobox\.com/d/.*?)"' - - ERROR_PATTERN = r'>(You have to wait.+till next download.)<' #@TODO: Check XFSHoster ERROR_PATTERN - - - def setup(self): - self.multiDL = True - self.chunkLimit = 1 - self.resumeDownload = True - - -getInfo = create_getInfo(UptoboxCom) diff --git a/pyload/plugin/hoster/VeehdCom.py b/pyload/plugin/hoster/VeehdCom.py deleted file mode 100644 index 91d7cc443..000000000 --- a/pyload/plugin/hoster/VeehdCom.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.Hoster import Hoster - - -class VeehdCom(Hoster): - __name__ = "VeehdCom" - __type__ = "hoster" - __version__ = "0.23" - - __pattern__ = r'http://veehd\.com/video/\d+_\S+' - __config__ = [("filename_spaces", "bool", "Allow spaces in filename", False), - ("replacement_char", "str", "Filename replacement character", "_")] - - __description__ = """Veehd.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("cat", "cat@pyload")] - - - def setup(self): - self.multiDL = True - self.req.canContinue = True - - - def process(self, pyfile): - self.download_html() - if not self.file_exists(): - self.offline() - - pyfile.name = self.get_file_name() - self.download(self.get_file_url()) - - - def download_html(self): - url = self.pyfile.url - self.logDebug("Requesting page: %s" % url) - self.html = self.load(url) - - - def file_exists(self): - if not self.html: - self.download_html() - - if 'Veehd' in self.html: - return False - return True - - - def get_file_name(self): - if not self.html: - self.download_html() - - m = re.search(r']*>([^<]+) on Veehd', self.html) - if m is None: - self.error(_("Video title not found")) - - name = m.group(1) - - # replace unwanted characters in filename - if self.getConfig('filename_spaces'): - pattern = '[^\w ]+' - else: - pattern = '[^\w.]+' - - return re.sub(pattern, self.getConfig('replacement_char'), name) + '.avi' - - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - - m = re.search(r'v\w+)' - __config__ = [("quality", "Low;High;Auto", "Quality", "Auto")] - - __description__ = """Veoh.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] - - - NAME_PATTERN = r'Sorry, we couldn\'t find the video you were looking for' - - URL_REPLACEMENTS = [(__pattern__ + ".*", r'http://www.veoh.com/watch/\g')] - - COOKIES = [("veoh.com", "lassieLocale", "en")] - - - def setup(self): - self.resumeDownload = True - self.multiDL = True - self.chunkLimit = -1 - - - def handleFree(self): - quality = self.getConfig("quality") - if quality == "Auto": - quality = ("High", "Low") - for q in quality: - pattern = r'"fullPreviewHash%sPath":"(.+?)"' % q - m = re.search(pattern, self.html) - if m: - self.pyfile.name += ".mp4" - link = m.group(1).replace("\\", "") - self.download(link) - return - else: - self.logInfo(_("No %s quality video found") % q.upper()) - else: - self.fail(_("No video found!")) - - -getInfo = create_getInfo(VeohCom) diff --git a/pyload/plugin/hoster/VidPlayNet.py b/pyload/plugin/hoster/VidPlayNet.py deleted file mode 100644 index 657213c3a..000000000 --- a/pyload/plugin/hoster/VidPlayNet.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://vidplay.net/38lkev0h3jv0 - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class VidPlayNet(XFSHoster): - __name__ = "VidPlayNet" - __type__ = "hoster" - __version__ = "0.04" - - __pattern__ = r'https?://(?:www\.)?vidplay\.net/\w{12}' - - __description__ = """VidPlay.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("t4skforce", "t4skforce1337[AT]gmail[DOT]com")] - - - HOSTER_DOMAIN = "vidplay.net" - - NAME_PATTERN = r'Password:
    \s*(?P[^<]+)' - - -getInfo = create_getInfo(VidPlayNet) diff --git a/pyload/plugin/hoster/VimeoCom.py b/pyload/plugin/hoster/VimeoCom.py deleted file mode 100644 index 07abf31e3..000000000 --- a/pyload/plugin/hoster/VimeoCom.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class VimeoCom(SimpleHoster): - __name__ = "VimeoCom" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'https?://(?:www\.)?(player\.)?vimeo\.com/(video/)?(?P\d+)' - __config__ = [("quality", "Lowest;Mobile;SD;HD;Highest", "Quality", "Highest"), - ("original", "bool", "Try to download the original file first", True)] - - __description__ = """Vimeo.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] - - - NAME_PATTERN = r'(?P<N>.+) on Vimeo<' - OFFLINE_PATTERN = r'class="exception_header"' - TEMP_OFFLINE_PATTERN = r'Please try again in a few minutes.<' - - URL_REPLACEMENTS = [(__pattern__ + ".*", r'https://www.vimeo.com/\g<ID>')] - - COOKIES = [("vimeo.com", "language", "en")] - - - def setup(self): - self.resumeDownload = True - self.multiDL = True - self.chunkLimit = -1 - - - def handleFree(self): - password = self.getPassword() - - if self.js and 'class="btn iconify_down_b"' in self.html: - html = self.js.eval(self.load(self.pyfile.url, get={'action': "download", 'password': password}, decode=True)) - pattern = r'href="(?P<URL>http://vimeo\.com.+?)".*?\>(?P<QL>.+?) ' - else: - id = re.match(self.__pattern__, self.pyfile.url).group("ID") - html = self.load("https://player.vimeo.com/video/" + id, get={'password': password}) - pattern = r'"(?P<QL>\w+)":{"profile".*?"(?P<URL>http://pdl\.vimeocdn\.com.+?)"' - - link = dict((l.group('QL').lower(), l.group('URL')) for l in re.finditer(pattern, html)) - - if self.getConfig("original"): - if "original" in link: - self.download(link[q]) - return - else: - self.logInfo(_("Original file not downloadable")) - - quality = self.getConfig("quality") - if quality == "Highest": - qlevel = ("hd", "sd", "mobile") - elif quality == "Lowest": - qlevel = ("mobile", "sd", "hd") - else: - qlevel = quality.lower() - - for q in qlevel: - if q in link: - self.download(link[q]) - return - else: - self.logInfo(_("No %s quality video found") % q.upper()) - else: - self.fail(_("No video found!")) - - -getInfo = create_getInfo(VimeoCom) diff --git a/pyload/plugin/hoster/Vipleech4UCom.py b/pyload/plugin/hoster/Vipleech4UCom.py deleted file mode 100644 index b56096d46..000000000 --- a/pyload/plugin/hoster/Vipleech4UCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class Vipleech4uCom(DeadHoster): - __name__ = "Vipleech4uCom" - __type__ = "hoster" - __version__ = "0.20" - - __pattern__ = r'http://(?:www\.)?vipleech4u\.com/manager\.php' - - __description__ = """Vipleech4u.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Kagenoshin", "kagenoshin@gmx.ch")] - - -getInfo = create_getInfo(Vipleech4uCom) diff --git a/pyload/plugin/hoster/WarserverCz.py b/pyload/plugin/hoster/WarserverCz.py deleted file mode 100644 index 1631a021d..000000000 --- a/pyload/plugin/hoster/WarserverCz.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class WarserverCz(DeadHoster): - __name__ = "WarserverCz" - __type__ = "hoster" - __version__ = "0.13" - - __pattern__ = r'http://(?:www\.)?warserver\.cz/stahnout/\d+' - - __description__ = """Warserver.cz hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] - - -getInfo = create_getInfo(WarserverCz) diff --git a/pyload/plugin/hoster/WebshareCz.py b/pyload/plugin/hoster/WebshareCz.py deleted file mode 100644 index 946200b58..000000000 --- a/pyload/plugin/hoster/WebshareCz.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.network.RequestFactory import getURL -from pyload.plugin.internal.SimpleHoster import SimpleHoster - - -def getInfo(urls): - for url in urls: - fid = re.search(WebshareCz.__pattern__, url).group('ID') - api_data = getURL("https://webshare.cz/api/file_info/", post={'ident': fid}) - - if 'File not found' in api_data: - file_info = (url, 0, 1, url) - else: - name = re.search('<name>(.+)</name>', api_data).group(1) - size = re.search('<size>(.+)</size>', api_data).group(1) - file_info = (name, size, 2, url) - - yield file_info - - -class WebshareCz(SimpleHoster): - __name__ = "WebshareCz" - __type__ = "hoster" - __version__ = "0.14" - - __pattern__ = r'https?://(?:www\.)?webshare\.cz/(?:#/)?file/(?P<ID>\w+)' - - __description__ = """WebShare.cz hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] - - - def handleFree(self): - api_data = self.load('https://webshare.cz/api/file_link/', post={'ident': self.fid}) - - self.logDebug("API data: " + api_data) - - m = re.search('<link>(.+)</link>', api_data) - if m is None: - self.error(_("Unable to detect direct link")) - - self.download(m.group(1), disposition=True) - - - def getFileInfo(self): - self.logDebug("URL: %s" % self.pyfile.url) - - self.fid = re.match(self.__pattern__, self.pyfile.url).group('ID') - - self.load(self.pyfile.url) - api_data = self.load('https://webshare.cz/api/file_info/', post={'ident': self.fid}) - - if 'File not found' in api_data: - self.offline() - else: - self.pyfile.name = re.search('<name>(.+)</name>', api_data).group(1) - self.pyfile.size = re.search('<size>(.+)</size>', api_data).group(1) - - self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size)) diff --git a/pyload/plugin/hoster/WrzucTo.py b/pyload/plugin/hoster/WrzucTo.py deleted file mode 100644 index 76ed73be6..000000000 --- a/pyload/plugin/hoster/WrzucTo.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import HTTPHEADER - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class WrzucTo(SimpleHoster): - __name__ = "WrzucTo" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?wrzuc\.to/(\w+(\.wt|\.html)|(\w+/?linki/\w+))' - - __description__ = """Wrzuc.to hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'id="file_info">\s*<strong>(?P<N>.*?)</strong>' - SIZE_PATTERN = r'class="info">\s*<tr>\s*<td>(?P<S>.*?)</td>' - - COOKIES = [("wrzuc.to", "language", "en")] - - - def setup(self): - self.multiDL = True - - - def handleFree(self): - data = dict(re.findall(r'(md5|file): "(.*?)"', self.html)) - if len(data) != 2: - self.error(_("No file ID")) - - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) - self.req.http.lastURL = self.pyfile.url - self.load("http://www.wrzuc.to/ajax/server/prepair", post={"md5": data['md5']}) - - self.req.http.lastURL = self.pyfile.url - self.html = self.load("http://www.wrzuc.to/ajax/server/download_link", post={"file": data['file']}) - - data.update(re.findall(r'"(download_link|server_id)":"(.*?)"', self.html)) - if len(data) != 4: - self.error(_("No download URL")) - - download_url = "http://%s.wrzuc.to/pobierz/%s" % (data['server_id'], data['download_link']) - self.download(download_url) - - -getInfo = create_getInfo(WrzucTo) diff --git a/pyload/plugin/hoster/WuploadCom.py b/pyload/plugin/hoster/WuploadCom.py deleted file mode 100644 index 8ad846ad8..000000000 --- a/pyload/plugin/hoster/WuploadCom.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class WuploadCom(DeadHoster): - __name__ = "WuploadCom" - __type__ = "hoster" - __version__ = "0.23" - - __pattern__ = r'http://(?:www\.)?wupload\..*?/file/((\w+/)?\d+)(/.*)?' - - __description__ = """Wupload.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("jeix", "jeix@hasnomail.de"), - ("Paul King", "")] - - -getInfo = create_getInfo(WuploadCom) diff --git a/pyload/plugin/hoster/X7To.py b/pyload/plugin/hoster/X7To.py deleted file mode 100644 index 6ccc6d637..000000000 --- a/pyload/plugin/hoster/X7To.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class X7To(DeadHoster): - __name__ = "X7To" - __type__ = "hoster" - __version__ = "0.41" - - __pattern__ = r'http://(?:www\.)?x7\.to/' - - __description__ = """X7.to hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("ernieb", "ernieb")] - - -getInfo = create_getInfo(X7To) diff --git a/pyload/plugin/hoster/XFileSharingPro.py b/pyload/plugin/hoster/XFileSharingPro.py deleted file mode 100644 index 54631baba..000000000 --- a/pyload/plugin/hoster/XFileSharingPro.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.internal.XFSHoster import XFSHoster, create_getInfo - - -class XFileSharingPro(XFSHoster): - __name__ = "XFileSharingPro" - __type__ = "hoster" - __version__ = "0.43" - - __pattern__ = r'^unmatchable$' - - __description__ = """XFileSharingPro dummy hoster plugin for hook""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] - - - URL_REPLACEMENTS = [("/embed-", "/")] - - - def _log(self, type, args): - msg = " | ".join([str(a).strip() for a in args if a]) - logger = getattr(self.log, type) - logger("%s: %s: %s" % (self.__name__, self.HOSTER_NAME, msg or _("%s MARK" % type.upper()))) - - - def init(self): - super(XFileSharingPro, self).init() - - self.__pattern__ = self.core.pluginManager.hosterPlugins[self.__name__]['pattern'] - - self.HOSTER_DOMAIN = re.match(self.__pattern__, self.pyfile.url).group(1).lower() - self.HOSTER_NAME = "".join([str.capitalize() for str in self.HOSTER_DOMAIN.split('.')]) - - account = self.core.accountManager.getAccountPlugin(self.HOSTER_NAME) - - if account and account.canUse(): - self.account = account - elif self.account: - self.account.HOSTER_DOMAIN = self.HOSTER_DOMAIN - else: - return - - self.user, data = self.account.selectAccount() - self.req = self.account.getAccountRequest(self.user) - self.premium = self.account.isPremium(self.user) - - - def setup(self): - self.chunkLimit = 1 - self.resumeDownload = self.premium - self.multiDL = True - - -getInfo = create_getInfo(XFileSharingPro) diff --git a/pyload/plugin/hoster/XHamsterCom.py b/pyload/plugin/hoster/XHamsterCom.py deleted file mode 100644 index 92340152f..000000000 --- a/pyload/plugin/hoster/XHamsterCom.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from pyload.utils import json_loads -from pyload.plugin.Hoster import Hoster - - -def clean_json(json_expr): - json_expr = re.sub('[\n\r]', '', json_expr) - json_expr = re.sub(' +', '', json_expr) - json_expr = re.sub('\'', '"', json_expr) - - return json_expr - - -class XHamsterCom(Hoster): - __name__ = "XHamsterCom" - __type__ = "hoster" - __version__ = "0.12" - - __pattern__ = r'http://(?:www\.)?xhamster\.com/movies/.+' - __config__ = [("type", ".mp4;.flv", "Preferred type", ".mp4")] - - __description__ = """XHamster.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [] - - - def process(self, pyfile): - self.pyfile = pyfile - - if not self.file_exists(): - self.offline() - - if self.getConfig("type"): - self.desired_fmt = self.getConfig("type") - - pyfile.name = self.get_file_name() + self.desired_fmt - self.download(self.get_file_url()) - - - def download_html(self): - url = self.pyfile.url - self.html = self.load(url) - - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - - flashvar_pattern = re.compile('flashvars = ({.*?});', re.S) - json_flashvar = flashvar_pattern.search(self.html) - - if not json_flashvar: - self.error(_("flashvar not found")) - - j = clean_json(json_flashvar.group(1)) - flashvars = json_loads(j) - - if flashvars['srv']: - srv_url = flashvars['srv'] + '/' - else: - self.error(_("srv_url not found")) - - if flashvars['url_mode']: - url_mode = flashvars['url_mode'] - - - else: - self.error(_("url_mode not found")) - - if self.desired_fmt == ".mp4": - file_url = re.search(r"<a href=\"" + srv_url + "(.+?)\"", self.html) - if file_url is None: - self.error(_("file_url not found")) - file_url = file_url.group(1) - long_url = srv_url + file_url - self.logDebug("long_url = " + long_url) - else: - if flashvars['file']: - file_url = unquote(flashvars['file']) - else: - self.error(_("file_url not found")) - - if url_mode == '3': - long_url = file_url - self.logDebug("long_url = " + long_url) - else: - long_url = srv_url + "key=" + file_url - self.logDebug("long_url = " + long_url) - - return long_url - - - def get_file_name(self): - if not self.html: - self.download_html() - - pattern = r'<title>(.*?) - xHamster\.com' - name = re.search(pattern, self.html) - if name is None: - pattern = r'

    (.*)

    ' - name = re.search(pattern, self.html) - if name is None: - pattern = r'http://[www.]+xhamster\.com/movies/.*/(.*?)\.html?' - name = re.match(file_name_pattern, self.pyfile.url) - if name is None: - pattern = r'' - name = re.search(pattern, self.html) - if name is None: - return "Unknown" - - return name.group(1) - - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - if re.search(r"(.*Video not found.*)", self.html) is not None: - return False - else: - return True diff --git a/pyload/plugin/hoster/XVideosCom.py b/pyload/plugin/hoster/XVideosCom.py deleted file mode 100644 index abc5c0f13..000000000 --- a/pyload/plugin/hoster/XVideosCom.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from pyload.plugin.Hoster import Hoster - - -class XVideosCom(Hoster): - __name__ = "XVideos.com" - __type__ = "hoster" - __version__ = "0.10" - - __pattern__ = r'http://(?:www\.)?xvideos\.com/video(\d+)/.*' - - __description__ = """XVideos.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [] - - - def process(self, pyfile): - site = self.load(pyfile.url) - pyfile.name = "%s (%s).flv" % ( - re.search(r"

    ([^<]+) retry: - retry = None - dl_time = time.time() - sock.send("PRIVMSG %s :xdcc send #%s\r\n" % (bot, pack)) - - else: - if (dl_time + self.timeout) < time.time(): # todo: add in config - sock.send("QUIT :byebye\r\n") - sock.close() - self.fail(_("XDCC Bot did not answer")) - - fdset = select([sock], [], [], 0) - if sock not in fdset[0]: - continue - - readbuffer += sock.recv(1024) - temp = readbuffer.split("\n") - readbuffer = temp.pop() - - for line in temp: - if self.debug is 2: - print "*> " + unicode(line, errors='ignore') - line = line.rstrip() - first = line.split() - - if first[0] == "PING": - sock.send("PONG %s\r\n" % first[1]) - - if first[0] == "ERROR": - self.fail(_("IRC-Error: %s") % line) - - msg = line.split(None, 3) - if len(msg) != 4: - continue - - msg = { - "origin": msg[0][1:], - "action": msg[1], - "target": msg[2], - "text": msg[3][1:] - } - - if nick == msg['target'][0:len(nick)] and "PRIVMSG" == msg['action']: - if msg['text'] == "\x01VERSION\x01": - self.logDebug("Sending CTCP VERSION") - sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface")) - elif msg['text'] == "\x01TIME\x01": - self.logDebug("Sending CTCP TIME") - sock.send("NOTICE %s :%d\r\n" % (msg['origin'], time.time())) - elif msg['text'] == "\x01LAG\x01": - pass # don't know how to answer - - if not (bot == msg['origin'][0:len(bot)] - and nick == msg['target'][0:len(nick)] - and msg['action'] in ("PRIVMSG", "NOTICE")): - continue - - if self.debug is 1: - print "%s: %s" % (msg['origin'], msg['text']) - - if "You already requested that pack" in msg['text']: - retry = time.time() + 300 - - if "you must be on a known channel to request a pack" in msg['text']: - self.fail(_("Wrong channel")) - - m = re.match('\x01DCC SEND (.*?) (\d+) (\d+)(?: (\d+))?\x01', msg['text']) - if m: - done = True - - # get connection data - ip = socket.inet_ntoa(struct.pack('L', socket.ntohl(int(m.group(2))))) - port = int(m.group(3)) - packname = m.group(1) - - if len(m.groups()) > 3: - self.req.filesize = int(m.group(4)) - - self.pyfile.name = packname - - download_folder = self.config['general']['download_folder'] - filename = safe_join(download_folder, packname) - - self.logInfo(_("Downloading %s from %s:%d") % (packname, ip, port)) - - self.pyfile.setStatus("downloading") - newname = self.req.download(ip, port, filename, sock, self.pyfile.setProgress) - if newname and newname != filename: - self.logInfo(_("%(name)s saved as %(newname)s") % {"name": self.pyfile.name, "newname": newname}) - filename = newname - - # kill IRC socket - # sock.send("QUIT :byebye\r\n") - sock.close() - - self.lastDownload = filename - return self.lastDownload diff --git a/pyload/plugin/hoster/YibaishiwuCom.py b/pyload/plugin/hoster/YibaishiwuCom.py deleted file mode 100644 index f7640390f..000000000 --- a/pyload/plugin/hoster/YibaishiwuCom.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.utils import json_loads -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class YibaishiwuCom(SimpleHoster): - __name__ = "YibaishiwuCom" - __type__ = "hoster" - __version__ = "0.13" - - __pattern__ = r'http://(?:www\.)?(?:u\.)?115\.com/file/(?P\w+)' - - __description__ = """115.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - NAME_PATTERN = r'file_name: \'(?P.+?)\'' - SIZE_PATTERN = r'file_size: \'(?P.+?)\'' - OFFLINE_PATTERN = ur'

    哎呀!提取码不存在!不妨搜搜看吧!

    ' - - LINK_PATTERN = r'(/\?ct=(pickcode|download)[^"\']+)' - - - def handleFree(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.error(_("LINK_PATTERN not found")) - url = m.group(1) - self.logDebug(('FREEUSER' if m.group(2) == 'download' else 'GUEST') + ' URL', url) - - res = json_loads(self.load("http://115.com" + url, decode=False)) - if "urls" in res: - mirrors = res['urls'] - elif "data" in res: - mirrors = res['data'] - else: - mirrors = None - - for mr in mirrors: - try: - url = mr['url'].replace("\\", "") - self.logDebug("Trying URL: " + url) - self.download(url) - break - except Exception: - continue - else: - self.fail(_("No working link found")) - - -getInfo = create_getInfo(YibaishiwuCom) diff --git a/pyload/plugin/hoster/YoupornCom.py b/pyload/plugin/hoster/YoupornCom.py deleted file mode 100644 index 75606935d..000000000 --- a/pyload/plugin/hoster/YoupornCom.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugin.Hoster import Hoster - - -class YoupornCom(Hoster): - __name__ = "YoupornCom" - __type__ = "hoster" - __version__ = "0.20" - - __pattern__ = r'http://(?:www\.)?youporn\.com/watch/.+' - - __description__ = """Youporn.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("willnix", "willnix@pyload.org")] - - - def process(self, pyfile): - self.pyfile = pyfile - - if not self.file_exists(): - self.offline() - - pyfile.name = self.get_file_name() - self.download(self.get_file_url()) - - - def download_html(self): - url = self.pyfile.url - self.html = self.load(url, post={"user_choice": "Enter"}, cookies=False) - - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - - return re.search(r'(http://download\.youporn\.com/download/\d+\?save=1)">', self.html).group(1) - - - def get_file_name(self): - if not self.html: - self.download_html() - - file_name_pattern = r'(.+) - ' - return re.search(file_name_pattern, self.html).group(1).replace("&", "&").replace("/", "") + '.flv' - - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - if re.search(r"(.*invalid video_id.*)", self.html) is not None: - return False - else: - return True diff --git a/pyload/plugin/hoster/YourfilesTo.py b/pyload/plugin/hoster/YourfilesTo.py deleted file mode 100644 index 5f84d6bef..000000000 --- a/pyload/plugin/hoster/YourfilesTo.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from pyload.plugin.Hoster import Hoster - - -class YourfilesTo(Hoster): - __name__ = "YourfilesTo" - __type__ = "hoster" - __version__ = "0.21" - - __pattern__ = r'(http://)?(?:www\.)?yourfiles\.(to|biz)/\?d=\w+' - - __description__ = """Youfiles.to hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("jeix", "jeix@hasnomail.de"), - ("skydancer", "skydancer@hasnomail.de")] - - - def process(self, pyfile): - self.pyfile = pyfile - self.prepare() - self.download(self.get_file_url()) - - - def prepare(self): - if not self.file_exists(): - self.offline() - - self.pyfile.name = self.get_file_name() - - wait_time = self.get_waiting_time() - self.setWait(wait_time) - self.wait() - - - def get_waiting_time(self): - if not self.html: - self.download_html() - - #var zzipitime = 15; - m = re.search(r'var zzipitime = (\d+);', self.html) - if m: - sec = int(m.group(1)) - else: - sec = 0 - - return sec - - - def download_html(self): - url = self.pyfile.url - self.html = self.load(url) - - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - url = re.search(r"var bla = '(.*?)';", self.html) - if url: - url = url.group(1) - url = unquote(url.replace("http://http:/http://", "http://").replace("dumdidum", "")) - return url - else: - self.error(_("Absolute filepath not found")) - - - def get_file_name(self): - if not self.html: - self.download_html() - - return re.search("<title>(.*)", self.html).group(1) - - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - - if re.search(r"HTTP Status 404", self.html) is not None: - return False - else: - return True diff --git a/pyload/plugin/hoster/YoutubeCom.py b/pyload/plugin/hoster/YoutubeCom.py deleted file mode 100644 index c7e7a6c85..000000000 --- a/pyload/plugin/hoster/YoutubeCom.py +++ /dev/null @@ -1,185 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import re -import subprocess - -from urllib import unquote - -from pyload.plugin.Hoster import Hoster -from pyload.plugin.internal.SimpleHoster import replace_patterns -from pyload.utils import html_unescape - - -def which(program): - """Works exactly like the unix command which - - Courtesy of http://stackoverflow.com/a/377028/675646""" - - def is_exe(fpath): - return os.path.isfile(fpath) and os.access(fpath, os.X_OK) - - fpath, fname = os.path.split(program) - - if fpath: - if is_exe(program): - return program - else: - for path in os.environ['PATH'].split(os.pathsep): - path = path.strip('"') - exe_file = os.path.join(path, program) - if is_exe(exe_file): - return exe_file - - return None - - -class YoutubeCom(Hoster): - __name__ = "YoutubeCom" - __type__ = "hoster" - __version__ = "0.40" - - __pattern__ = r'https?://(?:[^/]*\.)?(?:youtube\.com|youtu\.be)/watch.*?[?&]v=.*' - __config__ = [("quality", "sd;hd;fullhd;240p;360p;480p;720p;1080p;3072p", "Quality Setting", "hd"), - ("fmt", "int", "FMT/ITAG Number (5-102, 0 for auto)", 0), - (".mp4", "bool", "Allow .mp4", True), - (".flv", "bool", "Allow .flv", True), - (".webm", "bool", "Allow .webm", False), - (".3gp", "bool", "Allow .3gp", False), - ("3d", "bool", "Prefer 3D", False)] - - __description__ = """Youtube.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("spoob", "spoob@pyload.org"), - ("zoidberg", "zoidberg@mujmail.cz")] - - - URL_REPLACEMENTS = [(r'youtu\.be/', 'youtube.com/')] - - # Invalid characters that must be removed from the file name - invalidChars = u'\u2605:?><"|\\' - - # name, width, height, quality ranking, 3D - formats = {5 : (".flv" , 400 , 240 , 1 , False), - 6 : (".flv" , 640 , 400 , 4 , False), - 17 : (".3gp" , 176 , 144 , 0 , False), - 18 : (".mp4" , 480 , 360 , 2 , False), - 22 : (".mp4" , 1280, 720 , 8 , False), - 43 : (".webm", 640 , 360 , 3 , False), - 34 : (".flv" , 640 , 360 , 4 , False), - 35 : (".flv" , 854 , 480 , 6 , False), - 36 : (".3gp" , 400 , 240 , 1 , False), - 37 : (".mp4" , 1920, 1080, 9 , False), - 38 : (".mp4" , 4096, 3072, 10, False), - 44 : (".webm", 854 , 480 , 5 , False), - 45 : (".webm", 1280, 720 , 7 , False), - 46 : (".webm", 1920, 1080, 9 , False), - 82 : (".mp4" , 640 , 360 , 3 , True ), - 83 : (".mp4" , 400 , 240 , 1 , True ), - 84 : (".mp4" , 1280, 720 , 8 , True ), - 85 : (".mp4" , 1920, 1080, 9 , True ), - 100: (".webm", 640 , 360 , 3 , True ), - 101: (".webm", 640 , 360 , 4 , True ), - 102: (".webm", 1280, 720 , 8 , True )} - - - def setup(self): - self.resumeDownload = True - self.multiDL = True - - - def process(self, pyfile): - pyfile.url = replace_patterns(pyfile.url, self.URL_REPLACEMENTS) - html = self.load(pyfile.url, decode=True) - - if re.search(r'
    ', html): - self.offline() - - if "We have been receiving a large volume of requests from your network." in html: - self.tempOffline() - - #get config - use3d = self.getConfig("3d") - if use3d: - quality = {"sd": 82, "hd": 84, "fullhd": 85, "240p": 83, "360p": 82, - "480p": 82, "720p": 84, "1080p": 85, "3072p": 85} - else: - quality = {"sd": 18, "hd": 22, "fullhd": 37, "240p": 5, "360p": 18, - "480p": 35, "720p": 22, "1080p": 37, "3072p": 38} - desired_fmt = self.getConfig("fmt") - if desired_fmt and desired_fmt not in self.formats: - self.logWarning(_("FMT %d unknown, using default") % desired_fmt) - desired_fmt = 0 - if not desired_fmt: - desired_fmt = quality.get(self.getConfig("quality"), 18) - - #parse available streams - streams = re.search(r'"url_encoded_fmt_stream_map": "(.*?)",', html).group(1) - streams = [x.split('\u0026') for x in streams.split(',')] - streams = [dict((y.split('=', 1)) for y in x) for x in streams] - streams = [(int(x['itag']), unquote(x['url'])) for x in streams] - #self.logDebug("Found links: %s" % streams) - self.logDebug("AVAILABLE STREAMS: %s" % [x[0] for x in streams]) - - #build dictionary of supported itags (3D/2D) - allowed = lambda x: self.getConfig(self.formats[x][0]) - streams = [x for x in streams if x[0] in self.formats and allowed(x[0])] - if not streams: - self.fail(_("No available stream meets your preferences")) - fmt_dict = dict([x for x in streams if self.formats[x[0]][4] == use3d] or streams) - - self.logDebug("DESIRED STREAM: ITAG:%d (%s) %sfound, %sallowed" % - (desired_fmt, "%s %dx%d Q:%d 3D:%s" % self.formats[desired_fmt], - "" if desired_fmt in fmt_dict else "NOT ", "" if allowed(desired_fmt) else "NOT ")) - - #return fmt nearest to quality index - if desired_fmt in fmt_dict and allowed(desired_fmt): - fmt = desired_fmt - else: - sel = lambda x: self.formats[x][3] # select quality index - comp = lambda x, y: abs(sel(x) - sel(y)) - - self.logDebug("Choosing nearest fmt: %s" % [(x, allowed(x), comp(x, desired_fmt)) for x in fmt_dict.keys()]) - fmt = reduce(lambda x, y: x if comp(x, desired_fmt) <= comp(y, desired_fmt) and - sel(x) > sel(y) else y, fmt_dict.keys()) - - self.logDebug("Chosen fmt: %s" % fmt) - url = fmt_dict[fmt] - self.logDebug("URL: %s" % url) - - #set file name - file_suffix = self.formats[fmt][0] if fmt in self.formats else ".flv" - file_name_pattern = '' - name = re.search(file_name_pattern, html).group(1).replace("/", "") - - # Cleaning invalid characters from the file name - name = name.encode('ascii', 'replace') - for c in self.invalidChars: - name = name.replace(c, '_') - - pyfile.name = html_unescape(name) - - time = re.search(r"t=((\d+)m)?(\d+)s", pyfile.url) - ffmpeg = which("ffmpeg") - if ffmpeg and time: - m, s = time.groups()[1:] - if m is None: - m = "0" - - pyfile.name += " (starting at %s:%s)" % (m, s) - pyfile.name += file_suffix - - filename = self.download(url) - - if ffmpeg and time: - inputfile = filename + "_" - os.rename(filename, inputfile) - - subprocess.call([ - ffmpeg, - "-ss", "00:%s:%s" % (m, s), - "-i", inputfile, - "-vcodec", "copy", - "-acodec", "copy", - filename]) - os.remove(inputfile) diff --git a/pyload/plugin/hoster/ZDF.py b/pyload/plugin/hoster/ZDF.py deleted file mode 100644 index da6d6448e..000000000 --- a/pyload/plugin/hoster/ZDF.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from xml.etree.ElementTree import fromstring - -from pyload.plugin.Hoster import Hoster - - -# Based on zdfm by Roland Beermann (http://github.com/enkore/zdfm/) -class ZDF(Hoster): - __name__ = "ZDF Mediathek" - __type__ = "hoster" - __version__ = "0.80" - - __pattern__ = r'http://(?:www\.)?zdf\.de/ZDFmediathek/\D*(\d+)\D*' - - __description__ = """ZDF.de hoster plugin""" - __license__ = "GPLv3" - __authors__ = [] - - XML_API = "http://www.zdf.de/ZDFmediathek/xmlservice/web/beitragsDetails?id=%i" - - - @staticmethod - def video_key(video): - return ( - int(video.findtext("videoBitrate", "0")), - any(f.text == "progressive" for f in video.iter("facet")), - ) - - - @staticmethod - def video_valid(video): - return video.findtext("url").startswith("http") and video.findtext("url").endswith(".mp4") and \ - video.findtext("facets/facet").startswith("progressive") - - - @staticmethod - def get_id(url): - return int(re.search(r"\D*(\d{4,})\D*", url).group(1)) - - - def process(self, pyfile): - xml = fromstring(self.load(self.XML_API % self.get_id(pyfile.url))) - - status = xml.findtext("./status/statuscode") - if status != "ok": - self.fail(_("Error retrieving manifest")) - - video = xml.find("video") - title = video.findtext("information/title") - - pyfile.name = title - - target_url = sorted((v for v in video.iter("formitaet") if self.video_valid(v)), - key=self.video_key)[-1].findtext("url") - - self.download(target_url) diff --git a/pyload/plugin/hoster/ZShareNet.py b/pyload/plugin/hoster/ZShareNet.py deleted file mode 100644 index a6a34143f..000000000 --- a/pyload/plugin/hoster/ZShareNet.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.internal.DeadHoster import DeadHoster, create_getInfo - - -class ZShareNet(DeadHoster): - __name__ = "ZShareNet" - __type__ = "hoster" - __version__ = "0.21" - - __pattern__ = r'https?://(?:ww[2w]\.)?zshares?\.net/.+' - - __description__ = """ZShare.net hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("espes", ""), - ("Cptn Sandwich", "")] - - -getInfo = create_getInfo(ZShareNet) diff --git a/pyload/plugin/hoster/ZeveraCom.py b/pyload/plugin/hoster/ZeveraCom.py deleted file mode 100644 index 93959637c..000000000 --- a/pyload/plugin/hoster/ZeveraCom.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugin.Hoster import Hoster - - -class ZeveraCom(Hoster): - __name__ = "ZeveraCom" - __type__ = "hoster" - __version__ = "0.21" - - __pattern__ = r'http://(?:www\.)?zevera\.com/.*' - - __description__ = """Zevera.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - def setup(self): - self.resumeDownload = True - self.multiDL = True - self.chunkLimit = 1 - - - def process(self, pyfile): - if not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "zevera.com") - self.fail(_("No zevera.com account provided")) - - self.logDebug("Old URL: %s" % pyfile.url) - - if self.account.getAPIData(self.req, cmd="checklink", olink=pyfile.url) != "Alive": - self.fail(_("Offline or not downloadable - contact Zevera support")) - - header = self.account.getAPIData(self.req, just_header=True, cmd="generatedownloaddirect", olink=pyfile.url) - if not "location" in header: - self.fail(_("Unable to initialize download")) - - self.download(header['location'], disposition=True) - - check = self.checkDownload({"error": 'action="ErrorDownload.aspx'}) - if check == "error": - self.fail(_("Error response received - contact Zevera support")) diff --git a/pyload/plugin/hoster/ZippyshareCom.py b/pyload/plugin/hoster/ZippyshareCom.py deleted file mode 100644 index fa08cf18f..000000000 --- a/pyload/plugin/hoster/ZippyshareCom.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from os.path import join -from urlparse import urljoin - -from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class ZippyshareCom(SimpleHoster): - __name__ = "ZippyshareCom" - __type__ = "hoster" - __version__ = "0.62" - - __pattern__ = r'(?Phttp://www\d{0,2}\.zippyshare\.com)/v(?:/|iew\.jsp.*key=)(?P\d+)' - - __description__ = """Zippyshare.com hoster plugin""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] - - - NAME_PATTERN = r'("\d{6,}/"[ ]*\+.+?"/|Zippyshare.com - )(?P<N>.+?)("|)' - SIZE_PATTERN = r'>Size:.+?">(?P[\d.,]+) (?P[\w^_]+)' - - OFFLINE_PATTERN = r'>File does not exist on this server<' - - COOKIES = [("zippyshare.com", "ziplocale", "en")] - - - def setup(self): - self.multiDL = True - self.chunkLimit = -1 - self.resumeDownload = True - - - def handleFree(self): - url = self.get_link() - self.download(url) - - - def get_checksum(self): - try: - m = re.search(r'\+[ ]*\((\d+)[ ]*\%[ ]*(\d+)[ ]*\+[ ]*(\d+)[ ]*\%[ ]*(\d+)\)[ ]*\+', self.html) - if m: - a1, a2, c1, c2 = map(int, m.groups()) - else: - a1, a2 = map(int, re.search(r'\(\'downloadB\'\).omg = (\d+)%(\d+)', self.html).groups()) - c1, c2 = map(int, re.search(r'\(\'downloadB\'\).omg\) \* \((\d+)%(\d+)', self.html).groups()) - - b = (a1 % a2) * (c1 % c2) - except Exception: - self.error(_("Unable to calculate checksum")) - else: - return b + 18 - - - def get_link(self): - checksum = self.get_checksum() - p_url = join("d", self.info['pattern']['KEY'], str(checksum), self.pyfile.name) - dl_link = urljoin(self.info['pattern']['HOST'], p_url) - return dl_link - - -getInfo = create_getInfo(ZippyshareCom) diff --git a/pyload/plugin/hoster/__init__.py b/pyload/plugin/hoster/__init__.py deleted file mode 100644 index 40a96afc6..000000000 --- a/pyload/plugin/hoster/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- -- cgit v1.2.3