diff options
author | zoidberg10 <zoidberg@mujmail.cz> | 2012-08-22 01:16:39 +0200 |
---|---|---|
committer | zoidberg10 <zoidberg@mujmail.cz> | 2012-08-22 01:16:39 +0200 |
commit | f7d1bb7cc380c99b9adc75587afb9c7365e5ff35 (patch) | |
tree | 48021fc83548ed004d5a2f5b80417d30de23de47 | |
parent | uploded.net - closed #655, #661, #662# - thx meX Styler & thammi (diff) | |
download | pyload-f7d1bb7cc380c99b9adc75587afb9c7365e5ff35.tar.xz |
update XFileSharingPro - closes #663, hopefully doesn't break more
-rw-r--r-- | module/plugins/hoster/DdlstorageCom.py | 4 | ||||
-rw-r--r-- | module/plugins/hoster/RyushareCom.py | 4 | ||||
-rw-r--r-- | module/plugins/hoster/XFileSharingPro.py | 83 |
3 files changed, 57 insertions, 34 deletions
diff --git a/module/plugins/hoster/DdlstorageCom.py b/module/plugins/hoster/DdlstorageCom.py index 1390c31cc..0177d9648 100644 --- a/module/plugins/hoster/DdlstorageCom.py +++ b/module/plugins/hoster/DdlstorageCom.py @@ -5,13 +5,13 @@ class DdlstorageCom(XFileSharingPro): __name__ = "DdlstorageCom" __type__ = "hoster" __pattern__ = r"http://(?:\w*\.)*?ddlstorage.com/\w{12}" - __version__ = "0.04" + __version__ = "0.05" __description__ = """DDLStorage.com hoster plugin""" __author_name__ = ("zoidberg") __author_mail__ = ("zoidberg@mujmail.cz") FILE_INFO_PATTERN = r'<h2>Download File\s*<span[^>]*>(?P<N>[^>]+)</span></h2>\s*[^\(]*\((?P<S>[^\)]+)\)</h2>' - DIRECT_LINK_PATTERN = r'<a href="(http://\w+.ddlstorage.com:\d+/d/[^"]+)"' + HOSTER_NAME = "ddlstorage.com" def setup(self): self.resumeDownload = self.multiDL = self.premium diff --git a/module/plugins/hoster/RyushareCom.py b/module/plugins/hoster/RyushareCom.py index 97a14242c..b3d7bafc6 100644 --- a/module/plugins/hoster/RyushareCom.py +++ b/module/plugins/hoster/RyushareCom.py @@ -5,11 +5,13 @@ class RyushareCom(XFileSharingPro): __name__ = "RyushareCom" __type__ = "hoster" __pattern__ = r"http://(?:\w*\.)*?ryushare.com/\w{12}" - __version__ = "0.01" + __version__ = "0.02" __description__ = """ryushare.com hoster plugin""" __author_name__ = ("zoidberg") __author_mail__ = ("zoidberg@mujmail.cz") + HOSTER_NAME = "ryushare.com" + def setup(self): self.resumeDownload = self.multiDL = self.premium diff --git a/module/plugins/hoster/XFileSharingPro.py b/module/plugins/hoster/XFileSharingPro.py index 63e79e0b3..7ddbeb280 100644 --- a/module/plugins/hoster/XFileSharingPro.py +++ b/module/plugins/hoster/XFileSharingPro.py @@ -3,7 +3,7 @@ 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. + 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 @@ -34,7 +34,7 @@ class XFileSharingPro(SimpleHoster): __name__ = "XFileSharingPro" __type__ = "hoster" __pattern__ = r"^unmatchable$" - __version__ = "0.08" + __version__ = "0.09" __description__ = """XFileSharingPro common hoster base""" __author_name__ = ("zoidberg") __author_mail__ = ("zoidberg@mujmail.cz") @@ -51,16 +51,20 @@ class XFileSharingPro(SimpleHoster): CAPTCHA_URL_PATTERN = r'(http://[^"\']+?/captchas?/[^"\']+)' RECAPTCHA_URL_PATTERN = r'http://[^"\']+?recaptcha[^"\']+?\?k=([^"\']+)"' CAPTCHA_DIV_PATTERN = r'<b>Enter code.*?<div.*?>(.*?)</div>' - ERROR_PATTERN = r'class=["\']err["\'][^>]*>(.*?)</' - - DIRECT_LINK_PATTERN = r'This direct link.*?href=["\'](.*?)["\']' + ERROR_PATTERN = r'class=["\']err["\'][^>]*>(.*?)</' + #DIRECT_LINK_PATTERN = r'This direct link.*?href=["\'](.*?)["\']' def setup(self): self.__pattern__ = self.core.pluginManager.hosterPlugins[self.__name__]['pattern'] - self.HOSTER_NAME = re.search(self.__pattern__, self.pyfile.url).group(1) - self.multiDL = True + self.multiDL = True + self.chunkLimit = 1 def process(self, pyfile): + if not hasattr(self, "HOSTER_NAME"): + self.HOSTER_NAME = re.search(self.__pattern__, self.pyfile.url).group(1) + if not hasattr(self, "DIRECT_LINK_PATTERN"): + self.DIRECT_LINK_PATTERN = r'(http://(\w+\.%s|\d+\.\d+\.\d+\.\d+)(:\d+/d/|/files/\d+/\w+/)[^"\'<]+)' % self.HOSTER_NAME + self.captcha = self.errmsg = None self.passwords = self.getPassword().splitlines() @@ -70,17 +74,25 @@ class XFileSharingPro(SimpleHoster): else: self.fail("Only premium users can download from other hosters with %s" % self.HOSTER_NAME) else: - self.html = self.load(pyfile.url, cookies = False, decode = True) + location = None + + self.req.http.c.setopt(FOLLOWLOCATION, 0) + self.html = self.load(self.pyfile.url, cookies = True, decode = True) + self.header = self.req.http.header + self.req.http.c.setopt(FOLLOWLOCATION, 1) + + found = re.search("Location\s*:\s*(.*)", self.header, re.I) + if found and re.match(self.DIRECT_LINK_PATTERN, found.group(1)): + location = found.group(1) + self.html = self.load(pyfile.url, cookies = False, decode = True) + try: self.file_info = self.getFileInfo() except PluginParseError: - pyfile.name = html_unescape(unquote(urlparse(pyfile.url).path.split("/")[-1])) - - self.header = self.load(self.pyfile.url, just_header = True, cookies = True) - self.logDebug(self.header) - - if 'location' in self.header and re.match(self.DIRECT_LINK_PATTERN, self.header['location']): - self.startDownload(self.header['location']) + pyfile.name = html_unescape(unquote(urlparse(location if location else pyfile.url).path.split("/")[-1])) + + if location: + self.startDownload(location) elif self.premium: self.handlePremium() else: @@ -93,22 +105,27 @@ class XFileSharingPro(SimpleHoster): def getDownloadLink(self): for i in range(5): + self.logDebug("Getting download link: #%d" % i) data = self.getPostParameters() self.req.http.c.setopt(FOLLOWLOCATION, 0) - self.html = self.load(self.pyfile.url, post = data, ref = True) + self.html = self.load(self.pyfile.url, post = data, ref = True, decode = True) self.header = self.req.http.header self.req.http.c.setopt(FOLLOWLOCATION, 1) found = re.search("Location\s*:\s*(.*)", self.header, re.I) if found: - break - elif not self.checkErrors(): - found = re.search(self.DIRECT_LINK_PATTERN, self.html, re.S) - if not found: self.parseError('Download Link') break + + found = re.search(self.DIRECT_LINK_PATTERN, self.html, re.S) + if found: + break - else: self.fail("No valid captcha code entered") + else: + if captcha in self.err: + self.fail("No valid captcha code entered") + else: + self.fail("Download link not found") return found.group(1) @@ -128,14 +145,14 @@ class XFileSharingPro(SimpleHoster): inputs['url_mass'] = self.pyfile.url inputs['up1oad_type'] = 'url' - self.logDebug(action, inputs) + self.logDebug(self.HOSTER_NAME, action, inputs) #wait for file to upload to easybytez.com self.req.http.c.setopt(LOW_SPEED_TIME, 600) self.html = self.load(action, post = inputs) action, inputs = self.parseHtmlForm('F1') if not inputs: self.parseError('TEXTAREA') - self.logDebug(inputs) + self.logDebug(self.HOSTER_NAME, inputs) if inputs['st'] == 'OK': self.html = self.load(action, post = inputs) elif inputs['st'] == 'Can not leech file': @@ -190,16 +207,18 @@ class XFileSharingPro(SimpleHoster): for i in range(3): if not self.errmsg: self.checkErrors() - action, inputs = self.parseHtmlForm("action=['\"]{2}") + action, inputs = self.parseHtmlForm('F1') if not inputs: - if self.errmsg: - self.retry() - else: - self.parseError("Form not found") + action, inputs = self.parseHtmlForm("action=(''|\"\")") + if not inputs: + if self.errmsg: + self.retry() + else: + self.parseError("Form not found") - self.logDebug(inputs) - - if 'op' in inputs and inputs['op'] == 'download2': + self.logDebug(self.HOSTER_NAME, inputs) + + if 'op' in inputs and inputs['op'] in ('download2', 'download3'): if "password" in inputs: if self.passwords: inputs['password'] = self.passwords.pop(0) @@ -218,7 +237,9 @@ class XFileSharingPro(SimpleHoster): if wait_time: self.wait() + self.errmsg = None return inputs + else: inputs['referer'] = self.pyfile.url |