diff options
| author | 2013-06-24 00:51:54 +0200 | |
|---|---|---|
| committer | 2013-06-24 00:51:54 +0200 | |
| commit | 40831c996c0c80e369d2232bd707e0b2088056fc (patch) | |
| tree | f11158702b0ed00acb684850442d50dbf6ef4b25 | |
| parent | Bugfix: super() function (diff) | |
| download | pyload-40831c996c0c80e369d2232bd707e0b2088056fc.tar.xz | |
StreamcloudEu Update to meet increased bot protection
| -rw-r--r-- | module/plugins/hoster/StreamcloudEu.py | 85 | 
1 files changed, 84 insertions, 1 deletions
| diff --git a/module/plugins/hoster/StreamcloudEu.py b/module/plugins/hoster/StreamcloudEu.py index 7dec2e65b..35b9a0bd2 100644 --- a/module/plugins/hoster/StreamcloudEu.py +++ b/module/plugins/hoster/StreamcloudEu.py @@ -1,5 +1,7 @@  # -*- coding: utf-8 -*-  from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo +from module.network.HTTPRequest import HTTPRequest +from time import sleep  import re  class StreamcloudEu(XFileSharingPro): @@ -23,6 +25,87 @@ class StreamcloudEu(XFileSharingPro):          if found:              return found.group(1) -        return super(StreamcloudEu, self).getDownloadLink() +        for i in range(5): +            self.logDebug("Getting download link: #%d" % i) +            data = self.getPostParameters() +            httpRequest = HTTPRequest(options=self.req.options) +            httpRequest.cj = self.req.cj +            sleep(10) +            self.html = httpRequest.load(self.pyfile.url, post = data, referer=False, cookies=True, decode = True) +            self.header = httpRequest.header + +            found = re.search("Location\s*:\s*(.*)", self.header, re.I) +            if found: +                break + +            found = re.search(self.DIRECT_LINK_PATTERN, self.html, re.S) +            if found: +                break + +        else: +            if self.errmsg and 'captcha' in self.errmsg: +                self.fail("No valid captcha code entered") +            else: +                self.fail("Download link not found") + +        return found.group(1) + +    def getPostParameters(self): +        for i in range(3): +            if not self.errmsg: self.checkErrors() + +            if hasattr(self,"FORM_PATTERN"): +                action, inputs = self.parseHtmlForm(self.FORM_PATTERN) +            else: +                action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")}) + +            if not inputs: +                action, inputs = self.parseHtmlForm('F1') +                if not inputs: +                    if self.errmsg: +                        self.retry() +                    else: +                        self.parseError("Form not found") + +            self.logDebug(self.HOSTER_NAME, inputs) + +            if 'op' in inputs and inputs['op'] in ('download1', 'download2', 'download3'): +                if "password" in inputs: +                    if self.passwords: +                        inputs['password'] = self.passwords.pop(0) +                    else: +                        self.fail("No or invalid passport") + +                if not self.premium: +                    found = re.search(self.WAIT_PATTERN, self.html) +                    if found: +                        wait_time = int(found.group(1)) + 1 +                        self.setWait(wait_time, False) +                    else: +                        wait_time = 0 + +                    self.captcha = self.handleCaptcha(inputs) + +                    if wait_time: self.wait() + +                self.errmsg = None +                self.logDebug("getPostParameters {0}".format(i)) +                return inputs + +            else: +                inputs['referer'] = self.pyfile.url + +                if self.premium: +                    inputs['method_premium'] = "Premium Download" +                    if 'method_free' in inputs: del inputs['method_free'] +                else: +                    inputs['method_free'] = "Free Download" +                    if 'method_premium' in inputs: del inputs['method_premium'] + +                self.html = self.load(self.pyfile.url, post = inputs, ref = False) +                self.errmsg = None + +        else: self.parseError('FORM: %s' % (inputs['op'] if 'op' in inputs else 'UNKNOWN')) +  getInfo = create_getInfo(StreamcloudEu) | 
