diff options
Diffstat (limited to 'module/plugins')
| -rw-r--r-- | module/plugins/hoster/TurbobitNet.py | 51 | 
1 files changed, 31 insertions, 20 deletions
| diff --git a/module/plugins/hoster/TurbobitNet.py b/module/plugins/hoster/TurbobitNet.py index 6b60d5bc8..fbb163591 100644 --- a/module/plugins/hoster/TurbobitNet.py +++ b/module/plugins/hoster/TurbobitNet.py @@ -17,31 +17,32 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, t  class TurbobitNet(SimpleHoster):      __name__ = "TurbobitNet"      __type__ = "hoster" -    __version__ = "0.11" +    __version__ = "0.12" -    __pattern__ = r'http://(?:www\.)?(turbobit.net|unextfiles.com)/(?!download/folder/)(?:download/free/)?(?P<ID>\w+).*' +    __pattern__ = r'http://(?:www\.)?turbobit\.net/(?:download/free/)?(?P<ID>\w+)' -    __description__ = """Turbobit.net plugin""" -    __author_name__ = "zoidberg" -    __author_mail__ = "zoidberg@mujmail.cz" +    __description__ = """ Turbobit.net hoster plugin """ +    __author_name__ = ("zoidberg", "prOq") +    __author_mail__ = ("zoidberg@mujmail.cz", "") -    FILE_INFO_PATTERN = r"<span class='file-icon1[^>]*>(?P<N>[^<]+)</span>\s*\((?P<S>[^\)]+)\)\s*</h1>"  #: long filenames are shortened -    FILE_NAME_PATTERN = r'<meta name="keywords" content="\s+(?P<N>[^,]+)'  #: full name but missing on page2 + +    FILE_NAME_PATTERN = r'id="file-title">(?P<N>.+?)<' +    FILE_SIZE_PATTERN = r'class="file-size">(?P<S>[\d,.]+) (?P<U>\w+)'      OFFLINE_PATTERN = r'<h2>File Not Found</h2>|html\(\'File (?:was )?not found' -    FILE_URL_REPLACEMENTS = [(r"http://(?:www\.)?(turbobit.net|unextfiles.com)/(?:download/free/)?(?P<ID>\w+).*", -                              "http://turbobit.net/\g<ID>.html")] +    FILE_URL_REPLACEMENTS = [(__pattern__, "http://turbobit.net/\g<ID>.html")] +      COOKIES = [(".turbobit.net", "user_lang", "en")]      LINK_PATTERN = r'(?P<url>/download/redirect/[^"\']+)' -    LIMIT_WAIT_PATTERN = r'<div id="time-limit-text">\s*.*?<span id=\'timeout\'>(\d+)</span>' +    LIMIT_WAIT_PATTERN = r"<div id='timeout'>(\d+)<"      CAPTCHA_KEY_PATTERN = r'src="http://api\.recaptcha\.net/challenge\?k=([^"]+)"' -    CAPTCHA_SRC_PATTERN = r'<img alt="Captcha" src="(.*?)"' +    CAPTCHA_SRC_PATTERN = r'<img alt="Captcha" src="(.+?)"'      def handleFree(self):          self.url = "http://turbobit.net/download/free/%s" % self.file_info['ID'] -        self.html = self.load(self.url) +        self.html = self.load(self.url, ref=True, decode=True)          rtUpdate = self.getRtUpdate() @@ -54,6 +55,7 @@ class TurbobitNet(SimpleHoster):          self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"])          self.downloadFile() +      def solveCaptcha(self):          for _ in xrange(5):              m = re.search(self.LIMIT_WAIT_PATTERN, self.html) @@ -83,7 +85,8 @@ class TurbobitNet(SimpleHoster):              self.logDebug(inputs)              self.html = self.load(self.url, post=inputs) -            if not "<div class='download-timer-header'>" in self.html: +            if '<div class="captcha-error">Incorrect, try again!<' in self.html: +                self.logInfo("Invalid captcha")                  self.invalidCaptcha()              else:                  self.correctCaptcha() @@ -91,11 +94,12 @@ class TurbobitNet(SimpleHoster):          else:              self.fail("Invalid captcha") +      def getRtUpdate(self):          rtUpdate = self.getStorage("rtUpdate")          if not rtUpdate: -            if self.getStorage("version") != self.__version__ or int( -                    self.getStorage("timestamp", 0)) + 86400000 < timestamp(): +            if self.getStorage("version") != self.__version__ \ +               or int(self.getStorage("timestamp", 0)) + 86400000 < timestamp():                  # that's right, we are even using jdownloader updates                  rtUpdate = getURL("http://update0.jdownloader.org/pluginstuff/tbupdate.js")                  rtUpdate = self.decrypt(rtUpdate.splitlines()[1]) @@ -114,19 +118,23 @@ class TurbobitNet(SimpleHoster):          return rtUpdate +      def getDownloadUrl(self, rtUpdate):          self.req.http.lastURL = self.url          m = re.search("(/\w+/timeout\.js\?\w+=)([^\"\'<>]+)", self.html) -        url = "http://turbobit.net%s%s" % (m.groups() if m else ( -        '/files/timeout.js?ver=', ''.join(random.choice('0123456789ABCDEF') for _ in xrange(32)))) +        if m: +            url = "http://turbobit.net%s%s" % m.groups() +        else: +            url = "http://turbobit.net/files/timeout.js?ver=%s" % "".join(random.choice('0123456789ABCDEF') for _ in xrange(32)) +          fun = self.load(url)          self.setWait(65, False)          for b in [1, 3]:              self.jscode = "var id = \'%s\';var b = %d;var inn = \'%s\';%sout" % ( -                self.file_info['ID'], b, quote(fun), rtUpdate) +                          self.file_info['ID'], b, quote(fun), rtUpdate)              try:                  out = self.js.eval(self.jscode) @@ -141,26 +149,29 @@ class TurbobitNet(SimpleHoster):                  self.delStorage("rtUpdate")              self.retry() +      def decrypt(self, data):          cipher = ARC4.new(hexlify('E\x15\xa1\x9e\xa3M\xa0\xc6\xa0\x84\xb6H\x83\xa8o\xa0'))          return unhexlify(cipher.encrypt(unhexlify(data))) +      def getLocalTimeString(self):          lt = time.localtime()          tz = time.altzone if lt.tm_isdst else time.timezone          return "%s GMT%+03d%02d" % (time.strftime("%a %b %d %Y %H:%M:%S", lt), -tz // 3600, tz % 3600) +      def handlePremium(self):          self.logDebug("Premium download as user %s" % self.user)          self.html = self.load(self.pyfile.url)  # Useless in 0.5          self.downloadFile() +      def downloadFile(self):          m = re.search(self.LINK_PATTERN, self.html)          if m is None: -            self.parseError("download link") +            self.parseError("Download link not found")          self.url = "http://turbobit.net" + m.group('url') -        self.logDebug(self.url)          self.download(self.url) | 
