diff options
| author | 2014-12-07 15:34:19 +0100 | |
|---|---|---|
| committer | 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) | 
