diff options
Diffstat (limited to 'module/plugins/hoster')
| -rw-r--r-- | module/plugins/hoster/TurbobitNet.py | 87 | ||||
| -rw-r--r-- | module/plugins/hoster/UlozTo.py | 24 | 
2 files changed, 101 insertions, 10 deletions
| diff --git a/module/plugins/hoster/TurbobitNet.py b/module/plugins/hoster/TurbobitNet.py new file mode 100644 index 000000000..ee55d257b --- /dev/null +++ b/module/plugins/hoster/TurbobitNet.py @@ -0,0 +1,87 @@ +# -*- 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 +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: zoidberg +""" + +import re + +from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo +from module.plugins.ReCaptcha import ReCaptcha + +from pycurl import HTTPHEADER + +class TurbobitNet(SimpleHoster): +    __name__ = "TurbobitNet" +    __type__ = "hoster" +    __pattern__ = r"http://(?:\w*\.)?turbobit.net/(?P<ID>\w+).*" +    __version__ = "0.01" +    __description__ = """Turbobit.net plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    FILE_SIZE_PATTERN = r"<span class='file-icon1 document'>[^<]*</span>\s*\((?P<S>[^\)]+)\)" +    FILE_NAME_PATTERN = r'<meta name="keywords" content="(?P<N>[^,]+)' +    FILE_OFFLINE_PATTERN = r'<h2>File Not Found</h2>' +    FILE_URL_REPLACEMENTS = [(r'(?<=http://)(.*?)(?=turbobit.net/)', '')] +    SH_COOKIES = [("turbobit.net", "user_lang", "en")] +     +    CAPTCHA_KEY_PATTERN = r'src="http://api\.recaptcha\.net/challenge\?k=([^"]+)"' +    DOWNLOAD_URL_PATTERN = r'(?P<url>/download/redirect/[^"\']+)' +    LIMIT_WAIT_PATTERN = r'<div id="time-limit-text">\s*.*?<span id=\'timeout\'>(\d+)</span> seconds'       + +    def handleFree(self):          +        self.url = "http://turbobit.net/download/free/%s" % self.file_info['ID'] +        self.html = self.load(self.url) +         +        found = re.search(self.CAPTCHA_KEY_PATTERN, self.html) +        captcha_key = found.group(1) if found else '6LcTGLoSAAAAAHCWY9TTIrQfjUlxu6kZlTYP50_c' +        recaptcha = ReCaptcha(self)                                     + +        for i in range(5): +            found = re.search(self.LIMIT_WAIT_PATTERN, self.html) +            if found: +                self.setWait(int(found.group(1)), True) +                self.wait() +                self.retry() +         +            action, inputs = self.parseHtmlForm("action='#'")             +            inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(captcha_key) +            if not inputs: self.parseError("inputs") +            self.logDebug(inputs) + +            self.html = self.load(self.url, post = inputs) +             +            if not "<div class='download-timer-header'>" in self.html: +                self.invalidCaptcha() +            else: +                self.correctCaptcha() +                break +        else: self.fail("Invalid captcha") +         +        self.req.http.lastURL = self.url +        self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) +         +        self.setWait(60, False) +        self.wait() +         +        self.html = self.load("http://turbobit.net/download/getLinkAfterTimeout/" + self.file_info['ID']) +        found = re.search(self.DOWNLOAD_URL_PATTERN, self.html) +        if not found: self.parseError("free download link")         +        self.url = "http://turbobit.net" + found.group('url') +        self.logDebug(self.url) +        self.download(self.url) + +getInfo = create_getInfo(TurbobitNet)
\ No newline at end of file diff --git a/module/plugins/hoster/UlozTo.py b/module/plugins/hoster/UlozTo.py index a67e52d4d..54138e7e5 100644 --- a/module/plugins/hoster/UlozTo.py +++ b/module/plugins/hoster/UlozTo.py @@ -27,7 +27,7 @@ class UlozTo(SimpleHoster):      __name__ = "UlozTo"      __type__ = "hoster"      __pattern__ = r"http://(\w*\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(?:live/)?(?P<id>\w+/[^/?]*)" -    __version__ = "0.84" +    __version__ = "0.85"      __description__ = """uloz.to"""      __author_name__ = ("zoidberg") @@ -45,11 +45,12 @@ class UlozTo(SimpleHoster):      CAPTCHA_PATTERN = r'<img class="captcha" src="(.*?(\d+).png)" alt="" />'      def setup(self): -        self.multiDL = self.resumeDownload = True +        self.multiDL = self.premium  +        self.resumeDownload = True      def process(self, pyfile):          pyfile.url = re.sub(r"(?<=http://)([^/]+)", "www.ulozto.net", pyfile.url) -        self.html = self.load(pyfile.url, decode = True, cookies = False) +        self.html = self.load(pyfile.url, decode = True, cookies = True)          passwords = self.getPassword().splitlines()          while self.PASSWD_PATTERN in self.html: @@ -70,6 +71,8 @@ class UlozTo(SimpleHoster):              self.handlePremium()          else:              self.handleFree() +             +        self.doCheckDownload()      def handleFree(self):          parsed_url = self.findDownloadURL(premium=False) @@ -87,18 +90,16 @@ class UlozTo(SimpleHoster):              captcha_text = self.decryptCaptcha(captcha_url)          self.log.debug('CAPTCHA_URL:' + captcha_url + ' CAPTCHA ID:' + captcha_id + ' CAPTCHA TEXT:' + captcha_text) - -        # download and check -        self.download(parsed_url, post={"captcha[id]": captcha_id, "captcha[text]": captcha_text, "freeDownload": "Download"}, cookies=True) -        self.doCheckDownload() - +                  self.setStorage("captcha_id", captcha_id)          self.setStorage("captcha_text", captcha_text) +        self.multiDL = True + +        self.download(parsed_url, post={"captcha[id]": captcha_id, "captcha[text]": captcha_text, "freeDownload": "Download"}, cookies=True)      def handlePremium(self):          parsed_url = self.findDownloadURL(premium=True)          self.download(parsed_url, post={"download": "Download"}) -        self.doCheckDownload()      def findDownloadURL(self, premium=False):          msg = "%s link" % ("Premium" if premium else "Free") @@ -113,7 +114,8 @@ class UlozTo(SimpleHoster):              "wrong_captcha": re.compile(self.CAPTCHA_PATTERN),              "offline": re.compile(self.FILE_OFFLINE_PATTERN),              "passwd": self.PASSWD_PATTERN, -            "paralell_dl": re.compile(r'<title>Uloz.to - Ji. stahuje.</title>') +            "paralell_dl": "<title>Uloz.to - Již stahuješ</title>", +            "not_found": "<title>Ulož.to</title>"          })          if check == "wrong_captcha": @@ -130,5 +132,7 @@ class UlozTo(SimpleHoster):              self.setWait(300, True)              self.wait()              self.retry() +        elif check == "not_found": +            self.fail("Server error - file not downloadable")  getInfo = create_getInfo(UlozTo)
\ No newline at end of file | 
