diff options
author | Walter Purcaro <vuolter@gmail.com> | 2014-12-07 15:34:19 +0100 |
---|---|---|
committer | Walter Purcaro <vuolter@gmail.com> | 2014-12-07 15:34:19 +0100 |
commit | d8771b13f1c658ac726ac93195a48ad87169eccd (patch) | |
tree | a81899c2905d59ff20341ffcad35c949d880a0b4 /module/plugins/hoster | |
parent | Tiny code cosmetics (diff) | |
parent | [SkipRev] Tiny fixup (diff) | |
download | pyload-d8771b13f1c658ac726ac93195a48ad87169eccd.tar.xz |
Merge branch 'stable' into 0.4.10
Conflicts:
module/plugins/hoster/NowDownloadEu.py
module/plugins/hoster/NowDownloadSx.py
module/plugins/hoster/NowVideoAt.py
module/plugins/hoster/NowVideoSx.py
pyload/plugins/account/RapidshareCom.py
pyload/plugins/addon/ExtractArchive.py
pyload/plugins/addon/HotFolder.py
pyload/plugins/addon/UpdateManager.py
pyload/plugins/hook/Captcha9kw.py
pyload/plugins/hook/DebridItaliaCom.py
pyload/plugins/hoster/DebridItaliaCom.py
pyload/plugins/hoster/Keep2shareCc.py
pyload/plugins/hoster/NetloadIn.py
pyload/plugins/hoster/NowDownloadEu.py
pyload/plugins/hoster/NowVideoAt.py
pyload/plugins/hoster/RapidshareCom.py
pyload/plugins/hoster/ShareonlineBiz.py
pyload/plugins/internal/MultiHoster.py
pyload/plugins/internal/SimpleHoster.py
Diffstat (limited to 'module/plugins/hoster')
-rw-r--r-- | module/plugins/hoster/DodanePl.py | 18 | ||||
-rw-r--r-- | module/plugins/hoster/NowDownloadSx.py | 64 | ||||
-rw-r--r-- | module/plugins/hoster/NowVideoSx.py | 44 | ||||
-rw-r--r-- | module/plugins/hoster/RapiduNet.py | 82 | ||||
-rw-r--r-- | module/plugins/hoster/SafesharingEu.py | 25 | ||||
-rw-r--r-- | module/plugins/hoster/UploadableCh.py | 90 |
6 files changed, 323 insertions, 0 deletions
diff --git a/module/plugins/hoster/DodanePl.py b/module/plugins/hoster/DodanePl.py new file mode 100644 index 000000000..58f1c02d8 --- /dev/null +++ b/module/plugins/hoster/DodanePl.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from module.plugins.internal.DeadHoster import DeadHoster, parseFileInfo + + +class DodanePl(DeadHoster): + __name__ = "DodanePl" + __type__ = "hoster" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?dodane\.pl/file/\d+' + + __description__ = """Dodane.pl hoster plugin""" + __license__ = "GPLv3" + __authors__ = [("z00nx", "z00nx0@gmail.com")] + + +getInfo = create_getInfo(DodanePl) diff --git a/module/plugins/hoster/NowDownloadSx.py b/module/plugins/hoster/NowDownloadSx.py new file mode 100644 index 000000000..d2ae08954 --- /dev/null +++ b/module/plugins/hoster/NowDownloadSx.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +import re + +from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo +from module.utils import fixup + + +class NowDownloadSx(SimpleHoster): + __name__ = "NowDownloadSx" + __type__ = "hoster" + __version__ = "0.05" + + __pattern__ = r'http://(?:www\.)?nowdownload\.(at|ch|co|eu|sx)/(dl/|download\.php\?id=)\w+' + + __description__ = """NowDownload.sx hoster plugin""" + __license__ = "GPLv3" + __authors__ = [("godofdream", "soilfiction@gmail.com"), + ("Walter Purcaro", "vuolter@gmail.com")] + + + INFO_PATTERN = r'Downloading</span> <br> (?P<N>.*) (?P<S>[\d.,]+) (?P<U>[\w^_]+) </h4>' + OFFLINE_PATTERN = r'>This file does not exist' + + TOKEN_PATTERN = r'"(/api/token\.php\?token=\w+)"' + CONTINUE_PATTERN = r'"(/dl2/\w+/\w+)"' + WAIT_PATTERN = r'\.countdown\(\{until: \+(\d+),' + LINK_PATTERN = r'(http://s\d+\.coolcdn\.info/nowdownload/.+?)["\']' + + NAME_REPLACEMENTS = [("&#?\w+;", fixup), (r'<[^>]*>', '')] + + + def setup(self): + self.resumeDownload = True + self.multiDL = True + self.chunkLimit = -1 + + + def handleFree(self): + tokenlink = re.search(self.TOKEN_PATTERN, self.html) + continuelink = re.search(self.CONTINUE_PATTERN, self.html) + if tokenlink is None or continuelink is None: + self.error() + + m = re.search(self.WAIT_PATTERN, self.html) + if m: + wait = int(m.group(1)) + else: + wait = 60 + + baseurl = "http://www.nowdownload.at" + self.html = self.load(baseurl + str(tokenlink.group(1))) + self.wait(wait) + + self.html = self.load(baseurl + str(continuelink.group(1))) + + url = re.search(self.LINK_PATTERN, self.html) + if url is None: + self.error(_("Download link not found")) + + self.download(str(url.group(1))) + + +getInfo = create_getInfo(NowDownloadSx) diff --git a/module/plugins/hoster/NowVideoSx.py b/module/plugins/hoster/NowVideoSx.py new file mode 100644 index 000000000..b59bd79da --- /dev/null +++ b/module/plugins/hoster/NowVideoSx.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +import re + +from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class NowVideoSx(SimpleHoster): + __name__ = "NowVideoSx" + __type__ = "hoster" + __version__ = "0.07" + + __pattern__ = r'http://(?:www\.)?nowvideo\.(at|ch|co|eu|sx)/(video|mobile/#/videos)/(?P<ID>\w+)' + + __description__ = """NowVideo.sx hoster plugin""" + __license__ = "GPLv3" + __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] + + + URL_REPLACEMENTS = [(__pattern__ + ".*", r'http://www.nowvideo.at/video/\g<ID>')] + + NAME_PATTERN = r'<h4>(?P<N>.+?)<' + OFFLINE_PATTERN = r'>This file no longer exists' + + LINK_FREE_PATTERN = r'<source src="(.+?)"' + LINK_PREMIUM_PATTERN = r'<div id="content_player" >\s*<a href="(.+?)"' + + + def setup(self): + self.resumeDownload = True + self.multiDL = True + + + def handleFree(self): + self.html = self.load("http://www.nowvideo.at/mobile/video.php", get={'id': self.info['pattern']['ID']}) + + m = re.search(self.LINK_FREE_PATTERN, self.html) + if m is None: + self.error(_("Free download link not found")) + + self.download(m.group(1)) + + +getInfo = create_getInfo(NowVideoSx) diff --git a/module/plugins/hoster/RapiduNet.py b/module/plugins/hoster/RapiduNet.py new file mode 100644 index 000000000..e14b18a4f --- /dev/null +++ b/module/plugins/hoster/RapiduNet.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import HTTPHEADER +from time import time, altzone + +from module.common.json_layer import json_loads +from module.plugins.internal.CaptchaService import ReCaptcha +from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class RapiduNet(SimpleHoster): + __name__ = "RapiduNet" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'https?://(?:www\.)?rapidu\.net/(?P<ID>\d{10})' + + __description__ = """Rapidu.net hoster plugin""" + __license__ = "GPLv3" + __authors__ = [("prOq", None)] + + + COOKIES = [("rapidu.net", "rapidu_lang", "en")] + + FILE_INFO_PATTERN = r'<h1 title="(?P<N>.*)">.*</h1>\s*<small>(?P<S>\d+(\.\d+)?)\s(?P<U>\w+)</small>' + OFFLINE_PATTERN = r'404 - File not found' + + ERROR_PATTERN = r'<div class="error">' + + 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, code = recaptcha.challenge(self.RECAPTCHA_KEY) + + jsvars = self.getJsonResponse("https://rapidu.net/ajax.php?a=getCheckCaptcha", + {'_go' : None, + 'captcha1': challenge, + 'captcha2': code, + 'fileId' : self.info['ID']}) + if jsvars['message'] == 'success': + self.download(jsvars['url']) + break + + + def getJsonResponse(self, url, post_data): + response = self.load(url, post=post_data, decode=True) + if not response.startswith('{'): + self.retry() + + self.logDebug(url, response) + + return json_loads(response) + + +getInfo = create_getInfo(RapiduNet) diff --git a/module/plugins/hoster/SafesharingEu.py b/module/plugins/hoster/SafesharingEu.py new file mode 100644 index 000000000..f0936b9e8 --- /dev/null +++ b/module/plugins/hoster/SafesharingEu.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +from module.plugins.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'(?:<div class="alert alert-danger">)(.+?)(?:</div>)' + + +getInfo = create_getInfo(SafesharingEu) diff --git a/module/plugins/hoster/UploadableCh.py b/module/plugins/hoster/UploadableCh.py new file mode 100644 index 000000000..77b3d7d8a --- /dev/null +++ b/module/plugins/hoster/UploadableCh.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- + +import re + +from time import sleep + +from module.plugins.internal.CaptchaService import ReCaptcha +from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class UploadableCh(SimpleHoster): + __name__ = "UploadableCh" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?uploadable\.ch/file/(?P<ID>\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<N>.+)<span class=\"filename_normal\">\((?P<S>[\d.]+) (?P<U>\w+)\)</span><' + + OFFLINE_PATTERN = r'>(File not available|This file is no longer available)' + TEMP_OFFLINE_PATTERN = r'<div class="icon_err">' + + WAIT_PATTERN = r'data-time="(\d+)" data-format' + + FILE_URL_REPLACEMENTS = [(__pattern__ + ".*", r'http://www.uploadable.ch/file/\g<ID>')] + + + 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, captcha = 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' : captcha, + '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("<head>")}) + + 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) |