diff options
Diffstat (limited to 'module/plugins/hoster')
-rw-r--r-- | module/plugins/hoster/BasePlugin.py | 59 | ||||
-rw-r--r-- | module/plugins/hoster/DepositfilesCom.py | 103 | ||||
-rw-r--r-- | module/plugins/hoster/HellshareCz.py | 123 | ||||
-rw-r--r-- | module/plugins/hoster/IfolderRu.py | 6 | ||||
-rw-r--r-- | module/plugins/hoster/LoadTo.py | 82 | ||||
-rw-r--r-- | module/plugins/hoster/RapidshareCom.py | 4 | ||||
-rw-r--r-- | module/plugins/hoster/ShareRapidCom.py | 15 |
7 files changed, 288 insertions, 104 deletions
diff --git a/module/plugins/hoster/BasePlugin.py b/module/plugins/hoster/BasePlugin.py index 71c61942f..15e35ce24 100644 --- a/module/plugins/hoster/BasePlugin.py +++ b/module/plugins/hoster/BasePlugin.py @@ -1,21 +1,24 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from urlparse import urlparse +from re import search +from urllib import unquote -import re +from module.network.HTTPRequest import BadHeader from module.plugins.Hoster import Hoster -from module.utils import html_unescape +from module.utils import html_unescape, removeChars class BasePlugin(Hoster): __name__ = "BasePlugin" __type__ = "hoster" __pattern__ = r"^unmatchable$" - __version__ = "0.11" + __version__ = "0.14" __description__ = """Base Plugin when any other didnt fit""" __author_name__ = ("RaNaN") __author_mail__ = ("RaNaN@pyload.org") def setup(self): - self.chunkLimit = 3 + self.chunkLimit = -1 self.resumeDownload = True def process(self, pyfile): @@ -39,8 +42,48 @@ class BasePlugin(Hoster): # return if pyfile.url.startswith("http"): - pyfile.name = html_unescape(re.findall("([^/=]+)", pyfile.url)[-1]) - self.download(pyfile.url, disposition=True) - + try: + self.downloadFile(pyfile) + except BadHeader, e: + if e.code in (401, 403): + self.logDebug("Auth required") + + pwd = pyfile.package().password.strip() + if ":" not in pwd: + self.fail(_("Authorization required (username:password)")) + + self.req.addAuth(pwd) + self.downloadFile(pyfile) + else: + raise + + else: + self.fail("No Plugin matched and not a downloadable url.") + + + def downloadFile(self, pyfile): + header = self.load(pyfile.url, just_header = True) + #self.logDebug(header) + + if 'location' in header: + self.logDebug("Location: " + header['location']) + url = unquote(header['location']) else: - self.fail("No Plugin matched and not a downloadable url.")
\ No newline at end of file + url = pyfile.url + + name = html_unescape(urlparse(url).path.split("/")[-1]) + + if 'content-disposition' in header: + self.logDebug("Content-Disposition: " + header['content-disposition']) + m = search("filename(?P<type>=|\*=(?P<enc>.+)'')(?P<name>.*)", header['content-disposition']) + if m: + disp = m.groupdict() + self.logDebug(disp) + if not disp['enc']: disp['enc'] = 'utf-8' + name = removeChars(disp['name'], "\"';").strip() + name = unicode(unquote(name), disp['enc']) + + if not name: name = url + pyfile.name = name + self.logDebug("Filename: %s" % pyfile.name) + self.download(url, disposition=True)
\ No newline at end of file diff --git a/module/plugins/hoster/DepositfilesCom.py b/module/plugins/hoster/DepositfilesCom.py index 4f2cc9fc4..81e6aa4d6 100644 --- a/module/plugins/hoster/DepositfilesCom.py +++ b/module/plugins/hoster/DepositfilesCom.py @@ -4,37 +4,64 @@ import re import urllib from module.plugins.Hoster import Hoster +from module.network.RequestFactory import getURL +from module.plugins.ReCaptcha import ReCaptcha + +def getInfo(urls): + result = [] + + for url in urls: + html = getURL(re.sub(r"\.com(/.*?)?/files", ".com/en/files", url), decode=True) + if re.search(DepositfilesCom.FILE_OFFLINE_PATTERN, html): + # File offline + result.append((url, 0, 1, url)) + else: + # Get file info + name, size = url, 0 + + found = re.search(DepositfilesCom.FILE_INFO_PATTERN, html) + if found is not None: + name, size, units = found.groups() + size = float(size) * 1024 ** {'KB': 1, 'MB': 2, 'GB': 3}[units] + result.append((name, size, 2, url)) + yield result class DepositfilesCom(Hoster): __name__ = "DepositfilesCom" __type__ = "hoster" __pattern__ = r"http://[\w\.]*?depositfiles\.com(/\w{1,3})?/files/[\w]+" - __version__ = "0.32" + __version__ = "0.34" __description__ = """Depositfiles.com Download Hoster""" - __author_name__ = ("spoob") - __author_mail__ = ("spoob@pyload.org") + __author_name__ = ("spoob", "zoidberg") + __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz") + + FILE_INFO_PATTERN = r'File name: <b title="([^"]+)">.*\s*<span class="nowrap">File size: <b>([0-9.]+) (KB|MB|GB)</b>' + FILE_OFFLINE_PATTERN = r'<span class="html_download_api-not_exists"></span>' + RECAPTCHA_PATTERN = r"Recaptcha.create\('([^']+)', this\);" + DOWNLOAD_LINK_PATTERN = r'<form action="(http://.+?\.depositfiles.com/.+?)" method="get"' def setup(self): self.resumeDownload = self.multiDL = True if self.account else False - self.pyfile.url = re.sub(r"\.com(/.*?)?/files", ".com/de/files", self.pyfile.url) - + self.pyfile.url = re.sub(r"\.com(/.*?)?/files", ".com/en/files", self.pyfile.url) + def process(self, pyfile): if re.search(r"(.*)\.html", self.pyfile.url): self.pyfile.url = re.search(r"(.*)\.html", self.pyfile.url).group(1) - self.html = self.load(self.pyfile.url, cookies=True if self.account else False) - - if '<span class="html_download_api-not_exists"></span>' in self.html: + self.html = self.load(self.pyfile.url, cookies=True if self.account else False, decode = True) + + if self.FILE_OFFLINE_PATTERN in self.html: self.offline() - - - - return_url = self.req.lastEffectiveURL.split("/", 3)[3] - self.html = self.load(r'http://depositfiles.com/switch_lang.php?return_url=%s&lang=de' % return_url) - pyfile.name = re.search('(?s)Dateiname: <b title=\"(.*?)\">.*?</b>', self.html).group(1) + pyfile.name, size, units = re.search(self.FILE_INFO_PATTERN, self.html).groups() + pyfile.size = float(size) * 1024 ** {'KB': 1, 'MB': 2, 'GB': 3}[units] + self.logDebug ("FILENAME: %s" % pyfile.name) + #return_url = self.req.lastEffectiveURL.split("/", 3)[3] + #self.html = self.load(r'http://depositfiles.com/switch_lang.php?return_url=%s&lang=en' % return_url) + + #pyfile.name = re.search('(?s)Dateiname: <b title=\"(.*?)\">.*?</b>', self.html).group(1) if self.account: self.handlePremium() @@ -50,7 +77,7 @@ class DepositfilesCom(Hoster): self.setWait(61) self.wait() self.retry() - + wait = re.search(r'html_download_api-limit_interval\">(\d+)</span>', self.html) if wait: wait_time = int(wait.group(1)) @@ -70,20 +97,44 @@ class DepositfilesCom(Hoster): if wait: self.setWait(int(wait.group(1))) - self.wait() - - form = re.search(r"\$\('#download_container'\)\.load\('([^']+)", self.html) + found = re.search(r"var fid = '(\w+)';", self.html) + if not found: self.retry(wait_time=5) + params = {'fid' : found.group(1)} + self.logDebug ("FID: %s" % params['fid']) - self.html = self.load("http://depositfiles.com/"+ form.group(1)) + captcha_key = None + found = re.search(self.RECAPTCHA_PATTERN, self.html) + if found: captcha_key = found.group(1) + self.logDebug ("CAPTCHA_KEY: %s" % captcha_key) - link = urllib.unquote(re.search('<form action="(http://.+?\.depositfiles.com/.+?)" method="get"', self.html).group(1)) - self.download(link) + self.wait() + recaptcha = ReCaptcha(self) + + for i in range(5): + self.html = self.load("http://depositfiles.com/get_file.php", get = params) + if '<input type=button value="Continue" onclick="check_recaptcha' in self.html: + if not captcha_key: self.fail('Parse error (Captcha key)') + if 'response' in params: self.invalidCaptcha() + params['challenge'], params['response'] = recaptcha.challenge(captcha_key) + self.logDebug(params) + continue + + found = re.search(self.DOWNLOAD_LINK_PATTERN, self.html) + if found: + if 'response' in params: self.correctCaptcha() + link = urllib.unquote(found.group(1)) + self.logDebug ("LINK: %s" % link) + break + else: + self.fail('Parse error (Download link)') + else: + self.fail('No valid captcha response received') - - #wait_time = int(re.search(r'<span id="download_waiter_remain">(.*?)</span>', self.html).group(1)) - #self.setWait(wait_time) - #self.log.debug("DepositFiles.com: Waiting %d seconds." % wait_time) + try: + self.download(link) + except: + self.retry(wait_time = 60) def handlePremium(self): link = urllib.unquote(re.search('<div id="download_url">\s*<a href="(http://.+?\.depositfiles.com/.+?)"', self.html).group(1)) - self.download(link) + self.download(link)
\ No newline at end of file diff --git a/module/plugins/hoster/HellshareCz.py b/module/plugins/hoster/HellshareCz.py index 7ff5e5367..8c90e8099 100644 --- a/module/plugins/hoster/HellshareCz.py +++ b/module/plugins/hoster/HellshareCz.py @@ -31,94 +31,94 @@ def getInfo(urls): result.append((url, 0, 1, url)) else: # Get file info + found = re.search(HellshareCz.FILE_SIZE_PATTERN, html) + if found is not None: + size, units = found.groups() + size = float(size) * 1024 ** {'kB': 1, 'KB': 1, 'MB': 2, 'GB': 3}[units] + found = re.search(HellshareCz.FILE_NAME_PATTERN, html) if found is not None: name = found.group(1) + + if found or size > 0: result.append((name, 0, 2, url)) yield result - class HellshareCz(Hoster): __name__ = "HellshareCz" __type__ = "hoster" __pattern__ = r"http://(.*\.)*hellshare\.(cz|com|sk|hu)/.*" - __version__ = "0.6" + __version__ = "0.71" __description__ = """Hellshare.cz""" __author_name__ = ("zoidberg") - FREE_URL_PATTERN = r'<a id="button-download-free" href="([^"]*)"' - PREMIUM_URL_PATTERN = r'<a onclick="return launchFullDownload[^>]*href="(http://[^/]+/([^/]+)/[^"]+)" target="full-download-iframe">' - FILE_NAME_PATTERN = r'<strong id="FileName_master">([^<]+)</strong>' - FILE_OFFLINE_PATTERN = r'<h1>Soubor nenalezen</h1>' - SERVER_PATTERN = r'<form method="post" action="([^"]+)">' - CAPTCHA_PATTERN = r'<p class="text-center marg-off"><img id="captcha-img" class="va-middle" src="([^"]+)"' - FILE_CREDITS_PATTERN = r'<strong style="font-size:20px;">(\d+)\s*credits</strong>' - CREDIT_LEFT_PATTERN = r'<a class="button-amount-1" href="[^>]*/buy-credit/" title="Your current credit">([^<]+)</a>' - DOWNLOAD_AGAIN_PATTERN = r'Soubor jste ji. stahoval - opakovan. download prob.hne zdarma. Pokra.ovat' + FREE_URL_PATTERN = r'<h3>I\'ll wait.*\s*<form action="([^"]*)"' + PREMIUM_URL_PATTERN = r"launchFullDownload\('([^']*)'\);" + FILE_NAME_PATTERN = r'<h1 id="filename">([^<]+)</h1>' + FILE_SIZE_PATTERN = r'<td><span>Size</span></td>\s*<th><span>([0-9.]*) (kB|KB|MB|GB)</span></th>' + FILE_OFFLINE_PATTERN = r'<h1>File not found.</h1>' + CAPTCHA_PATTERN = r'<img class="left" id="captcha-img"src="([^"]*)" />' + FILE_CREDITS_PATTERN = r'<strong class="filesize">(\d+) MB</strong>' + CREDIT_LEFT_PATTERN = r'<p>After downloading this file you will have (\d+) MB for future downloads.' + DOWNLOAD_AGAIN_PATTERN = r'<p>This file you downloaded already and re-download is for free. </p>' def setup(self): self.resumeDownload = self.multiDL = True if self.account else False self.chunkLimit = 1 def process(self, pyfile): - if self.premium and self.account is not None: + if self.account: self.account.relogin(self.user) - self.getFileInfo(pyfile) + + pyfile.url = re.search(r'([^?]*)', pyfile.url).group(1) + self.html = self.load(pyfile.url, get = {"do" : "fileDownloadButton-showDownloadWindow"}, decode=True) + self.getFileInfo(pyfile) + + if self.account: self.handlePremium() else: - self.getFileInfo(pyfile) self.handleFree() def getFileInfo(self, pyfile): - self.html = self.load(pyfile.url, decode=True) - #marks the file as "offline" when the pattern was found on the html-page if re.search(self.FILE_OFFLINE_PATTERN, self.html) is not None: self.offline() - # parse the name from the site and set attribute in pyfile + # parse the name from the site and set attribute in pyfile found = re.search(self.FILE_NAME_PATTERN, self.html) if found is None: self.fail("Parse error (Filename") pyfile.name = found.group(1) - def handleFree(self): - # parse free download url - found = re.search(self.FREE_URL_PATTERN, self.html) - if found is None: - self.fail("Parse error (URL)") - - parsed_url = found.group(1) + found = re.search(self.FILE_SIZE_PATTERN, self.html) + if found is not None: + size, units = found.groups() + pyfile.size = float(size) * 1024 ** {'kB': 1, 'KB': 1, 'MB': 2, 'GB': 3}[units] - if parsed_url == "": + def handleFree(self): + # hellshare is very generous + if "You exceeded your today's limit for free download. You can download only 1 files per 24 hours." in self.html: t = datetime.datetime.today().replace(hour=1, minute=0, second=0) + datetime.timedelta( days=1) - datetime.datetime.today() self.setWait(t.seconds, True) self.wait() self.retry() - # get download ticket and parse html - self.logDebug("PARSED_URL:" + parsed_url) - self.html = self.load(parsed_url) - - found = re.search(self.SERVER_PATTERN, self.html) - if found is None: - self.fail("Parse error (Server)") - download_url = found.group(1) + # parse free download url + found = re.search(self.FREE_URL_PATTERN, self.html) + if found is None: self.fail("Parse error (URL)") + parsed_url = found.group(1) + self.logDebug("Free URL: %s" % parsed_url) + # decrypt captcha found = re.search(self.CAPTCHA_PATTERN, self.html) - if found is None: - self.fail("Parse error (Captcha)") + if found is None: self.fail("Parse error (Captcha)") captcha_url = found.group(1) - # get and decrypt captcha captcha = self.decryptCaptcha(captcha_url) self.logDebug('CAPTCHA_URL:' + captcha_url + ' CAPTCHA:' + captcha) - # download the file, destination is determined by pyLoad - self.download(download_url, post={ - "captcha": captcha - }) + self.download(parsed_url, post = {"captcha" : captcha, "submit" : "Download"}) # check download check = self.checkDownload({ @@ -130,32 +130,31 @@ class HellshareCz(Hoster): self.retry() def handlePremium(self): - found = re.search(self.FILE_CREDITS_PATTERN, self.html) - if found is None: - self.fail("Parse error (Credits)") - file_credits = int(found.group(1)) - - found = re.search(self.CREDIT_LEFT_PATTERN, self.html) - if found is None: - self.fail("Parse error (Credits left)") - credits_left = int(found.group(1)) + # get premium download url + found = re.search(self.PREMIUM_URL_PATTERN, self.html) + if found is None: self.fail("Parse error (URL)") + download_url = found.group(1) - self.logInfo("Premium download for %i credits" % file_credits) - self.logInfo("User %s has %i credits left" % (self.user, credits_left)) + # check credit + if self.DOWNLOAD_AGAIN_PATTERN in self.html: + self.logInfo("Downloading again for free") + else: + found = re.search(self.CREDIT_LEFT_PATTERN, self.html) + if not found: + self.fail("Not enough credit left. Trying to download as free user.") + self.resetAccount() + credits_left = int(found.group(1)) - if file_credits > credits_left and not re.search(self.DOWNLOAD_AGAIN_PATTERN, self.html): - self.resetAccount() + found = re.search(self.FILE_CREDITS_PATTERN, self.html) + if found: + self.file_credits = found.group(1) + else: + self.logError("Parse error: file credits") + self.file_credits = "???" - found = re.search(self.PREMIUM_URL_PATTERN, self.html) - if found is None: - self.fail("Parse error (URL)") - download_url = found.group(1) + self.logInfo("Downloading file for %s credits, %d credits left" % (self.file_credits, credits_left)) self.download(download_url) info = self.account.getAccountInfo(self.user, True) - self.logInfo("User %s has %i credits left" % (self.user, info["trafficleft"] / 1024)) - - - - + self.logInfo("User %s has %i credits left" % (self.user, info["trafficleft"] / 1024))
\ No newline at end of file diff --git a/module/plugins/hoster/IfolderRu.py b/module/plugins/hoster/IfolderRu.py index 063ebfbff..c0e45a87a 100644 --- a/module/plugins/hoster/IfolderRu.py +++ b/module/plugins/hoster/IfolderRu.py @@ -45,14 +45,14 @@ class IfolderRu(Hoster): __name__ = "IfolderRu" __type__ = "hoster" __pattern__ = r"http://(?:\w*\.)?ifolder.ru/(\d+).*" - __version__ = "0.3" + __version__ = "0.31" __description__ = """ifolder.ru""" __author_name__ = ("zoidberg") __author_mail__ = ("zoidberg@mujmail.cz") - FILE_NAME_PATTERN = ur'^\s*(?:<div><span>)?Название:(?:</span>)? <b>([^<]+)</b><(?:/div|br)>' - FILE_SIZE_PATTERN = ur'^\s*(?:<div><span>)?Размер:(?:</span>)? <b>([0-9.]+) ([^<]+)</b><(?:/div|br)>' + FILE_NAME_PATTERN = ur'(?:<div><span>)?Название:(?:</span>)? <b>([^<]+)</b><(?:/div|br)>' + FILE_SIZE_PATTERN = ur'(?:<div><span>)?Размер:(?:</span>)? <b>([0-9.]+) ([^<]+)</b><(?:/div|br)>' SESSION_ID_PATTERN = r'<a href=(http://ints.ifolder.ru/ints/sponsor/\?bi=\d*&session=([^&]+)&u=[^>]+)>' FORM1_PATTERN = r'<form method=post name="form1" ID="Form1" style="margin-bottom:200px">(.*?)</form>' FORM_INPUT_PATTERN = r'<input[^>]* name="?([^" ]+)"? value="?([^" ]+)"?[^>]*>' diff --git a/module/plugins/hoster/LoadTo.py b/module/plugins/hoster/LoadTo.py new file mode 100644 index 000000000..b1204cb2d --- /dev/null +++ b/module/plugins/hoster/LoadTo.py @@ -0,0 +1,82 @@ +# -*- 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: halfman +""" + +import re +from module.plugins.Hoster import Hoster +from module.network.RequestFactory import getURL + +def getInfo(urls): + result = [] + + for url in urls: + + html = getURL(url, decode=True) + if re.search(LoadTo.FILE_OFFLINE_PATTERN, html): + # File offline + result.append((url, 0, 1, url)) + else: + # Get file info + name = re.search(LoadTo.FILE_NAME_PATTERN, html) + size = re.search(LoadTo.SIZE_PATTERN, html) + if name is not None: + name = name.group(1) + size = size.group(1) + result.append((name, size, 2, url)) + yield result + +class LoadTo(Hoster): + __name__ = "LoadTo" + __type__ = "hoster" + __pattern__ = r"http://.*load.to/.*" + __version__ = "0.1" + __description__ = """load.to""" + __author_name__ = ("halfman") + __author_mail__ = ("Pulpan3@gmail.com") + + FILE_NAME_PATTERN = r'<div class="toolarge"><h1>([^<]+)</h1></div>' + URL_PATTERN = r'<form method="post" action="([^"]+)"' + SIZE_PATTERN = r'<div class="download_table_right">(\d+) Bytes</div>' + FILE_OFFLINE_PATTERN = r'Can\'t find file. Please check URL.<br />' + WAIT_PATTERN = r'type="submit" value="Download \((\d+)\)"' + + def setup(self): + self.multiDL = False + + def process(self, pyfile): + + self.html = self.load(pyfile.url, decode=True) + + if re.search(self.FILE_OFFLINE_PATTERN, self.html): + self.offline() + + timmy = re.search(self.WAIT_PATTERN, self.html) + if timmy: + self.setWait(timmy.group(1)) + self.wait() + + found = re.search(self.FILE_NAME_PATTERN, self.html) + if found is None: + self.fail("Parse error (NAME)") + pyfile.name = found.group(1) + + found = re.search(self.URL_PATTERN, self.html) + if found is None: + self.fail("Parse error (URL)") + download_url = found.group(1) + + self.download(download_url)
\ No newline at end of file diff --git a/module/plugins/hoster/RapidshareCom.py b/module/plugins/hoster/RapidshareCom.py index c9aba7898..0d927c525 100644 --- a/module/plugins/hoster/RapidshareCom.py +++ b/module/plugins/hoster/RapidshareCom.py @@ -50,7 +50,7 @@ class RapidshareCom(Hoster): __name__ = "RapidshareCom" __type__ = "hoster" __pattern__ = r"https?://[\w\.]*?rapidshare.com/(?:files/(?P<id>\d*?)/(?P<name>[^?]+)|#!download\|(?:\w+)\|(?P<id_new>\d+)\|(?P<name_new>[^|]+))" - __version__ = "1.36" + __version__ = "1.37" __description__ = """Rapidshare.com Download Hoster""" __config__ = [["server", "Cogent;Deutsche Telekom;Level(3);Level(3) #2;GlobalCrossing;Level(3) #3;Teleglobe;GlobalCrossing #2;TeliaSonera #2;Teleglobe #2;TeliaSonera #3;TeliaSonera", "Preferred Server", "None"]] __author_name__ = ("spoob", "RaNaN", "mkaay") @@ -103,6 +103,8 @@ class RapidshareCom(Hoster): elif self.api_data["status"] in ("0","4","5"): self.offline() + elif self.api_data["status"] == "3": + self.tempOffline() else: self.fail("Unknown response code.") diff --git a/module/plugins/hoster/ShareRapidCom.py b/module/plugins/hoster/ShareRapidCom.py index ce1912d38..46818a84c 100644 --- a/module/plugins/hoster/ShareRapidCom.py +++ b/module/plugins/hoster/ShareRapidCom.py @@ -4,6 +4,7 @@ import re from pycurl import HTTPHEADER from module.network.RequestFactory import getRequest +from module.network.HTTPRequest import BadHeader from module.plugins.Hoster import Hoster def getInfo(urls): @@ -41,8 +42,8 @@ def getInfo(urls): class ShareRapidCom(Hoster): __name__ = "ShareRapidCom" __type__ = "hoster" - __pattern__ = r"http://(?:www\.)?((share(-?rapid\.(biz|com|cz|info|eu|net|org|pl|sk)|-(central|credit|free|net)\.cz|-ms\.net)|(s-?rapid|rapids)\.(cz|sk))|(e-stahuj|mediatack|premium-rapidshare|rapidshare-premium|qiuck)\.cz|kadzet\.com|stahuj-zdarma\.eu|strelci\.net|universal-share\.com)/.*" - __version__ = "0.4" + __pattern__ = r"http://(?:www\.)?((share(-?rapid\.(biz|com|cz|info|eu|net|org|pl|sk)|-(central|credit|free|net)\.cz|-ms\.net)|(s-?rapid|rapids)\.(cz|sk))|(e-stahuj|mediatack|premium-rapidshare|rapidshare-premium|qiuck)\.cz|kadzet\.com|stahuj-zdarma\.eu|strelci\.net|universal-share\.com)/(stahuj/.+)" + __version__ = "0.42" __description__ = """Share-rapid.com plugin - premium only""" __author_name__ = ("MikyWoW", "zoidberg") __author_mail__ = ("MikyWoW@seznam.cz", "zoidberg@mujmail.cz") @@ -61,14 +62,20 @@ class ShareRapidCom(Hoster): def process(self, pyfile): if not self.account: self.fail("User not logged in") + url = "http://share-rapid.com/" + re.search(self.__pattern__, pyfile.url).groups()[-1] + self.logDebug("URL: " + url) - self.html = self.load(pyfile.url, decode=True) + try: + self.html = self.load(url, decode=True) + except BadHeader, e: + self.account.relogin(self.user) + self.retry(3, 0, str(e)) + size, units = re.search(self.FILE_SIZE_PATTERN, self.html).groups() pyfile.size = float(size) * 1024 ** {'kB': 1, 'MB': 2, 'GB': 3}[units] found = re.search(self.DOWNLOAD_URL_PATTERN, self.html) if found is not None: - self.logDebug(found) link, pyfile.name = found.groups() self.logInfo("Downloading file: %s (%s %s)" % (pyfile.name, size, units)) self.logInfo("Premium link: %s" % link) |