diff options
Diffstat (limited to 'module/plugins/hoster/BezvadataCz.py')
| -rw-r--r-- | module/plugins/hoster/BezvadataCz.py | 69 | 
1 files changed, 59 insertions, 10 deletions
| diff --git a/module/plugins/hoster/BezvadataCz.py b/module/plugins/hoster/BezvadataCz.py index a0717ad64..49299d463 100644 --- a/module/plugins/hoster/BezvadataCz.py +++ b/module/plugins/hoster/BezvadataCz.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +# -*- coding: utf-8 -*-  """      This program is free software; you can redistribute it and/or modify      it under the terms of the GNU General Public License as published by @@ -23,7 +23,7 @@ class BezvadataCz(SimpleHoster):      __name__ = "BezvadataCz"      __type__ = "hoster"      __pattern__ = r"http://(\w*\.)*bezvadata.cz/stahnout/.*" -    __version__ = "0.23" +    __version__ = "0.24"      __description__ = """BezvaData.cz"""      __author_name__ = ("zoidberg")      __author_mail__ = ("zoidberg@mujmail.cz") @@ -31,15 +31,64 @@ class BezvadataCz(SimpleHoster):      FILE_NAME_PATTERN = r'<p><b>Soubor: (?P<N>[^<]+)</b></p>'      FILE_SIZE_PATTERN = r'<li><strong>Velikost:</strong> (?P<S>[^<]+)</li>'      FILE_OFFLINE_PATTERN = r'<title>BezvaData \| Soubor nenalezen</title>' -    DOWNLOAD_FORM_PATTERN = r'<form class="download" action="([^"]+)" method="post" id="frm-stahnoutForm">' + +    def setup(self): +        self.multiDL = self.resumeDownload = True      def handleFree(self): -        found = re.search(self.DOWNLOAD_FORM_PATTERN, self.html) -        if found is None: self.parseError("Download form") -        url = "http://bezvadata.cz" + found.group(1) -        self.logDebug("Download form: %s" % url)        -               -        self.download(url, post = {"stahnoutSoubor": "St%C3%A1hnout"}, cookies = True) +        #download button +        found = re.search(r'<a class="stahnoutSoubor".*?href="(.*?)"', self.html) +        if not found: self.parseError("page1 URL") +        url = "http://bezvadata.cz%s" % found.group(1) + +        #captcha form +        self.html = self.load(url) +        self.checkErrors() +        for i in range(5): +            action, inputs = self.parseHtmlForm('frm-stahnoutFreeForm') +            if not inputs: self.parseError("FreeForm") + +            found = re.search(r'<img src="data:image/png;base64,(.*?)"', self.html) +            if not found: self.parseError("captcha img") + +            #captcha image is contained in html page as base64encoded data but decryptCaptcha() expects image url +            self.load, proper_load = self.loadcaptcha, self.load +            try: +                inputs['captcha'] = self.decryptCaptcha(found.group(1), imgtype='png') +            finally: +                self.load = proper_load + +            if '<img src="data:image/png;base64' in self.html: +                self.invalidCaptcha() +            else: +                self.correctCaptcha() +                break +        else: +            self.fail("No valid captcha code entered") + +        #download url +        self.html = self.load("http://bezvadata.cz%s" % action, post=inputs) +        self.checkErrors() +        found = re.search(r'<a class="stahnoutSoubor2" href="(.*?)">', self.html) +        if not found: self.parseError("page2 URL") +        url = "http://bezvadata.cz%s" % found.group(1) +        self.logDebug("DL URL %s" % url) + +        #countdown +        found = re.search(r'id="countdown">(\d\d):(\d\d)<', self.html) +        wait_time = (int(found.group(1)) * 60 + int(found.group(2)) + 1) if found else 120 +        self.setWait(wait_time, False) +        self.wait() + +        self.download(url) + +    def checkErrors(self): +        if 'images/button-download-disable.png' in self.html: +            self.longWait(300, 24) #parallel dl limit +        elif '<div class="infobox' in self.html: +            self.tempOffline() + +    def loadcaptcha(self, data, *args, **kwargs): +        return data.decode("base64")  getInfo = create_getInfo(BezvadataCz) -        
\ No newline at end of file | 
