summaryrefslogtreecommitdiffstats
path: root/module/plugins/hoster
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hoster')
-rw-r--r--module/plugins/hoster/AndroidfilehostCom.py2
-rw-r--r--module/plugins/hoster/BasePlugin.py73
-rw-r--r--module/plugins/hoster/BezvadataCz.py30
-rw-r--r--module/plugins/hoster/BitshareCom.py30
-rw-r--r--module/plugins/hoster/CatShareNet.py2
-rw-r--r--module/plugins/hoster/CloudzillaTo.py6
-rw-r--r--module/plugins/hoster/CrockoCom.py19
-rw-r--r--module/plugins/hoster/CzshareCom.py42
-rw-r--r--module/plugins/hoster/DataportCz.py40
-rw-r--r--module/plugins/hoster/DateiTo.py3
-rw-r--r--module/plugins/hoster/DebridItaliaCom.py2
-rw-r--r--module/plugins/hoster/DepositfilesCom.py8
-rw-r--r--module/plugins/hoster/DlFreeFr.py5
-rw-r--r--module/plugins/hoster/EuroshareEu.py12
-rw-r--r--module/plugins/hoster/ExashareCom.py6
-rw-r--r--module/plugins/hoster/ExtabitCom.py26
-rw-r--r--module/plugins/hoster/FastixRu.py14
-rw-r--r--module/plugins/hoster/FastshareCz.py16
-rw-r--r--module/plugins/hoster/FileSharkPl.py16
-rw-r--r--module/plugins/hoster/FileboomMe.py83
-rw-r--r--module/plugins/hoster/FilecloudIo.py28
-rw-r--r--module/plugins/hoster/FiledropperCom.py10
-rw-r--r--module/plugins/hoster/FilefactoryCom.py27
-rw-r--r--module/plugins/hoster/FilepostCom.py27
-rw-r--r--module/plugins/hoster/FilepupNet.py8
-rw-r--r--module/plugins/hoster/FilerNet.py5
-rw-r--r--module/plugins/hoster/FilesMailRu.py5
-rw-r--r--module/plugins/hoster/FileserveCom.py41
-rw-r--r--module/plugins/hoster/FourSharedCom.py5
-rw-r--r--module/plugins/hoster/FreakshareCom.py13
-rw-r--r--module/plugins/hoster/FreeWayMe.py4
-rw-r--r--module/plugins/hoster/FshareVn.py4
-rw-r--r--module/plugins/hoster/Ftp.py31
-rw-r--r--module/plugins/hoster/GigapetaCom.py33
-rw-r--r--module/plugins/hoster/GoogledriveCom.py19
-rw-r--r--module/plugins/hoster/HellshareCz.py2
-rw-r--r--module/plugins/hoster/HighWayMe.py6
-rw-r--r--module/plugins/hoster/HostujeNet.py10
-rw-r--r--module/plugins/hoster/IfolderRu.py23
-rw-r--r--module/plugins/hoster/Keep2ShareCc.py22
-rw-r--r--module/plugins/hoster/KingfilesNet.py2
-rw-r--r--module/plugins/hoster/LetitbitNet.py21
-rw-r--r--module/plugins/hoster/LinksnappyCom.py6
-rw-r--r--module/plugins/hoster/LoadTo.py2
-rw-r--r--module/plugins/hoster/LuckyShareNet.py36
-rw-r--r--module/plugins/hoster/MediafireCom.py6
-rw-r--r--module/plugins/hoster/MegaDebridEu.py2
-rw-r--r--module/plugins/hoster/MegaRapidCz.py17
-rw-r--r--module/plugins/hoster/MegaRapidoNet.py18
-rw-r--r--module/plugins/hoster/MegasharesCom.py46
-rw-r--r--module/plugins/hoster/MultishareCz.py4
-rw-r--r--module/plugins/hoster/MyfastfileCom.py5
-rw-r--r--module/plugins/hoster/MystoreTo.py2
-rw-r--r--module/plugins/hoster/NarodRu.py36
-rw-r--r--module/plugins/hoster/NoPremiumPl.py16
-rw-r--r--module/plugins/hoster/NosuploadCom.py6
-rw-r--r--module/plugins/hoster/NowDownloadSx.py11
-rw-r--r--module/plugins/hoster/NowVideoSx.py6
-rw-r--r--module/plugins/hoster/OboomCom.py55
-rw-r--r--module/plugins/hoster/OneFichierCom.py63
-rw-r--r--module/plugins/hoster/OpenloadIo.py59
-rw-r--r--module/plugins/hoster/OverLoadMe.py4
-rw-r--r--module/plugins/hoster/PornhostCom.py2
-rw-r--r--module/plugins/hoster/PornhubCom.py2
-rw-r--r--module/plugins/hoster/PremiumTo.py8
-rw-r--r--module/plugins/hoster/PremiumizeMe.py10
-rw-r--r--module/plugins/hoster/QuickshareCz.py10
-rw-r--r--module/plugins/hoster/RPNetBiz.py9
-rw-r--r--module/plugins/hoster/RapideoPl.py10
-rw-r--r--module/plugins/hoster/RapidgatorNet.py44
-rw-r--r--module/plugins/hoster/RapiduNet.py2
-rw-r--r--module/plugins/hoster/RehostTo.py4
-rw-r--r--module/plugins/hoster/SendspaceCom.py29
-rw-r--r--module/plugins/hoster/Share4WebCom.py4
-rw-r--r--module/plugins/hoster/ShareonlineBiz.py65
-rw-r--r--module/plugins/hoster/ShareplaceCom.py2
-rw-r--r--module/plugins/hoster/SimplyPremiumCom.py6
-rw-r--r--module/plugins/hoster/SimplydebridCom.py8
-rw-r--r--module/plugins/hoster/SizedriveCom.py2
-rw-r--r--module/plugins/hoster/SmoozedCom.py6
-rw-r--r--module/plugins/hoster/SpeedyshareCom.py1
-rw-r--r--module/plugins/hoster/TurbobitNet.py97
-rw-r--r--module/plugins/hoster/UlozTo.py26
-rw-r--r--module/plugins/hoster/UloziskoSk.py4
-rw-r--r--module/plugins/hoster/UnibytesCom.py16
-rw-r--r--module/plugins/hoster/UpleaCom.py6
-rw-r--r--module/plugins/hoster/UploadableCh.py8
-rw-r--r--module/plugins/hoster/UploadedTo.py5
-rw-r--r--module/plugins/hoster/UploadheroCom.py8
-rw-r--r--module/plugins/hoster/UploadingCom.py10
-rw-r--r--module/plugins/hoster/UpstoreNet.py8
-rw-r--r--module/plugins/hoster/UptoboxCom.py4
-rw-r--r--module/plugins/hoster/UserscloudCom.py37
-rw-r--r--module/plugins/hoster/VeohCom.py2
-rw-r--r--module/plugins/hoster/WebshareCz.py6
-rw-r--r--module/plugins/hoster/XFileSharingPro.py26
-rw-r--r--module/plugins/hoster/XHamsterCom.py1
-rw-r--r--module/plugins/hoster/Xdcc.py4
-rw-r--r--module/plugins/hoster/YadiSk.py2
-rw-r--r--module/plugins/hoster/YibaishiwuCom.py5
-rw-r--r--module/plugins/hoster/YourfilesTo.py2
-rw-r--r--module/plugins/hoster/YoutubeCom.py30
-rw-r--r--module/plugins/hoster/ZeveraCom.py5
-rw-r--r--module/plugins/hoster/ZippyshareCom.py4
104 files changed, 858 insertions, 863 deletions
diff --git a/module/plugins/hoster/AndroidfilehostCom.py b/module/plugins/hoster/AndroidfilehostCom.py
index 3fb77f83e..38f3b8392 100644
--- a/module/plugins/hoster/AndroidfilehostCom.py
+++ b/module/plugins/hoster/AndroidfilehostCom.py
@@ -42,7 +42,7 @@ class AndroidfilehostCom(SimpleHoster):
self.log_debug("Waiting time: %s seconds" % wait.group(1))
fid = re.search(r'id="fid" value="(\d+)" />', self.html).group(1)
- self.log_debug("fid: %s" % fid)
+ self.log_debug("FID: %s" % fid)
html = self.load("https://www.androidfilehost.com/libs/otf/mirrors.otf.php",
post={'submit': 'submit',
diff --git a/module/plugins/hoster/BasePlugin.py b/module/plugins/hoster/BasePlugin.py
index 2e9ae4e48..1952309fe 100644
--- a/module/plugins/hoster/BasePlugin.py
+++ b/module/plugins/hoster/BasePlugin.py
@@ -12,7 +12,7 @@ from module.plugins.internal.Hoster import Hoster
class BasePlugin(Hoster):
__name__ = "BasePlugin"
__type__ = "hoster"
- __version__ = "0.45"
+ __version__ = "0.46"
__status__ = "testing"
__pattern__ = r'^unmatchable$'
@@ -23,18 +23,6 @@ class BasePlugin(Hoster):
("Walter Purcaro", "vuolter@gmail.com")]
- @classmethod
- def get_info(cls, url="", html=""): #@TODO: Move to hoster class in 0.4.10
- url = urllib.unquote(url)
- url_p = urlparse.urlparse(url)
- return {'name' : (url_p.path.split('/')[-1]
- or url_p.query.split('=', 1)[::-1][0].split('&', 1)[0]
- or url_p.netloc.split('.', 1)[0]),
- 'size' : 0,
- 'status': 3 if url else 8,
- 'url' : url}
-
-
def setup(self):
self.chunk_limit = -1
self.multiDL = True
@@ -45,48 +33,48 @@ class BasePlugin(Hoster):
"""
Main function
"""
+ netloc = urlparse.urlparse(pyfile.url).netloc
+
pyfile.name = self.get_info(pyfile.url)['name']
if not pyfile.url.startswith("http"):
self.fail(_("No plugin matched"))
- for _i in xrange(5):
- try:
- link = self.direct_link(urllib.unquote(pyfile.url))
+ try:
+ link = self.direct_link(urllib.unquote(pyfile.url))
- if link:
- self.download(link, ref=False, disposition=True)
- else:
- self.fail(_("File not found"))
+ if link:
+ self.download(link, ref=False, disposition=True)
+ else:
+ self.fail(_("File not found"))
- except BadHeader, e:
- if e.code == 404:
- self.offline()
+ except BadHeader, e:
+ if e.code == 404:
+ self.offline()
- elif e.code in (401, 403):
- self.log_debug("Auth required", "Received HTTP status code: %d" % e.code)
+ elif e.code in (401, 403):
+ self.log_debug("Auth required", "Received HTTP status code: %d" % e.code)
- account = self.pyload.accountManager.getAccountPlugin('Http')
- servers = [x['login'] for x in account.getAllAccounts()] #@TODO: Recheck in 0.4.10
- server = urlparse.urlparse(pyfile.url).netloc
+ #@TODO: Recheck in 0.4.10
+ if self.account:
+ servers = [x['login'] for x in self.account.getAllAccounts()]
+ else:
+ servers = []
+
+ if netloc in servers:
+ self.log_debug("Logging on to %s" % netloc)
+ self.req.addAuth(self.account.get_login('password'))
- if server in servers:
- self.log_debug("Logging on to %s" % server)
- self.req.addAuth(account.get_info(server)['login']['password'])
- else:
- pwd = self.get_password()
- if ':' in pwd:
- self.req.addAuth(pwd)
- else:
- self.fail(_("Authorization required"))
else:
- self.fail(e)
+ pwd = self.get_password()
+ if ':' in pwd:
+ self.req.addAuth(pwd)
+ else:
+ self.fail(_("Authorization required"))
else:
- break
- else:
- self.fail(_("No file downloaded")) #@TODO: Move to hoster class in 0.4.10
+ self.fail(e)
- errmsg = self.check_download({'Empty file' : re.compile(r'\A\s*\Z'),
+ errmsg = self.check_file({'Empty file' : re.compile(r'\A\s*\Z'),
'Html error' : re.compile(r'\A(?:\s*<.+>)?((?:[\w\s]*(?:[Ee]rror|ERROR)\s*\:?)?\s*\d{3})(?:\Z|\s+)'),
'Html file' : re.compile(r'\A\s*<!DOCTYPE html'),
'Request error': re.compile(r'([Aa]n error occured while processing your request)')})
@@ -95,6 +83,7 @@ class BasePlugin(Hoster):
try:
errmsg += " | " + self.last_check.group(1).strip()
+
except Exception:
pass
diff --git a/module/plugins/hoster/BezvadataCz.py b/module/plugins/hoster/BezvadataCz.py
index d2af8272a..204c981c6 100644
--- a/module/plugins/hoster/BezvadataCz.py
+++ b/module/plugins/hoster/BezvadataCz.py
@@ -8,7 +8,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class BezvadataCz(SimpleHoster):
__name__ = "BezvadataCz"
__type__ = "hoster"
- __version__ = "0.29"
+ __version__ = "0.30"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?bezvadata\.cz/stahnout/.+'
@@ -39,24 +39,16 @@ class BezvadataCz(SimpleHoster):
#: Captcha form
self.html = self.load(url)
self.check_errors()
- for _i in xrange(5):
- action, inputs = self.parse_html_form('frm-stahnoutFreeForm')
- if not inputs:
- self.error(_("FreeForm"))
-
- m = re.search(r'<img src="data:image/png;base64,(.*?)"', self.html)
- if m is None:
- self.error(_("Wrong captcha image"))
-
- inputs['captcha'] = self.captcha._decrypt(m.group(1).decode('base64'), input_type='png')
-
- if '<img src="data:image/png;base64' in self.html:
- self.captcha.invalid()
- else:
- self.captcha.correct()
- break
- else:
- self.fail(_("No valid captcha code entered"))
+
+ action, inputs = self.parse_html_form('frm-stahnoutFreeForm')
+ if not inputs:
+ self.error(_("FreeForm"))
+
+ m = re.search(r'<img src="data:image/png;base64,(.*?)"', self.html)
+ if m is None:
+ self.retry_captcha()
+
+ inputs['captcha'] = self.captcha.decrypt_image(m.group(1).decode('base64'), input_type='png')
#: Download url
self.html = self.load("http://bezvadata.cz%s" % action, post=inputs)
diff --git a/module/plugins/hoster/BitshareCom.py b/module/plugins/hoster/BitshareCom.py
index b975a8ab0..e426de092 100644
--- a/module/plugins/hoster/BitshareCom.py
+++ b/module/plugins/hoster/BitshareCom.py
@@ -11,7 +11,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class BitshareCom(SimpleHoster):
__name__ = "BitshareCom"
__type__ = "hoster"
- __version__ = "0.55"
+ __version__ = "0.56"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?bitshare\.com/(files/)?(?(1)|\?f=)(?P<ID>\w+)(?(1)/(?P<NAME>.+?)\.html)'
@@ -39,7 +39,7 @@ class BitshareCom(SimpleHoster):
def process(self, pyfile):
if self.premium:
- self.account.relogin(self.user)
+ self.account.relogin()
#: File id
m = re.match(self.__pattern__, pyfile.url)
@@ -75,7 +75,7 @@ class BitshareCom(SimpleHoster):
#: This may either download our file or forward us to an error page
self.link = self.get_download_url()
- if self.check_download({'error': ">Error occured<"}):
+ if self.check_file({'error': ">Error occured<"}):
self.retry(5, 5 * 60, "Bitshare host : Error occured")
@@ -114,16 +114,14 @@ class BitshareCom(SimpleHoster):
self.log_debug("File is captcha protected")
recaptcha = ReCaptcha(self)
- #: Try up to 3 times
- for i in xrange(3):
- response, challenge = recaptcha.challenge()
- res = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html",
- post={'request' : "validateCaptcha",
- 'ajaxid' : self.ajaxid,
- 'recaptcha_challenge_field': challenge,
- 'recaptcha_response_field' : response})
- if self.handle_captcha_errors(res):
- break
+ response, challenge = recaptcha.challenge()
+ res = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html",
+ post={'request' : "validateCaptcha",
+ 'ajaxid' : self.ajaxid,
+ 'recaptcha_challenge_field': challenge,
+ 'recaptcha_response_field' : response})
+
+ self.handle_captcha_errors(res)
#: Get download URL
self.log_debug("Getting download url")
@@ -141,6 +139,7 @@ class BitshareCom(SimpleHoster):
self.log_debug("Checking response [%s]" % res)
if "ERROR:Session timed out" in res:
self.retry()
+
elif "ERROR" in res:
msg = res.split(separator)[-1]
self.fail(msg)
@@ -150,11 +149,12 @@ class BitshareCom(SimpleHoster):
self.log_debug("Result of captcha resolving [%s]" % res)
if "SUCCESS" in res:
self.captcha.correct()
- return True
+
elif "ERROR:SESSION ERROR" in res:
self.retry()
- self.captcha.invalid()
+ else:
+ self.retry_captcha()
getInfo = create_getInfo(BitshareCom)
diff --git a/module/plugins/hoster/CatShareNet.py b/module/plugins/hoster/CatShareNet.py
index 5b7d61e05..c2b8d9257 100644
--- a/module/plugins/hoster/CatShareNet.py
+++ b/module/plugins/hoster/CatShareNet.py
@@ -46,7 +46,7 @@ class CatShareNet(SimpleHoster):
'recaptcha_response_field' : response})
m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m:
+ if m is not None:
self.link = m.group(1)
diff --git a/module/plugins/hoster/CloudzillaTo.py b/module/plugins/hoster/CloudzillaTo.py
index 60c66960d..d9466c954 100644
--- a/module/plugins/hoster/CloudzillaTo.py
+++ b/module/plugins/hoster/CloudzillaTo.py
@@ -8,7 +8,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class CloudzillaTo(SimpleHoster):
__name__ = "CloudzillaTo"
__type__ = "hoster"
- __version__ = "0.08"
+ __version__ = "0.09"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?cloudzilla\.to/share/file/(?P<ID>[\w^_]+)'
@@ -34,7 +34,7 @@ class CloudzillaTo(SimpleHoster):
self.fail(_("Missing password"))
if re.search(self.PASSWORD_PATTERN, self.html):
- self.retry(reason="Wrong password")
+ self.retry(msg="Wrong password")
else:
return super(CloudzillaTo, self).check_errors()
@@ -49,7 +49,7 @@ class CloudzillaTo(SimpleHoster):
if 'error' in ticket:
if "File is password protected" in ticket['error']:
- self.retry(reason="Wrong password")
+ self.retry(msg="Wrong password")
else:
self.fail(ticket['error'])
diff --git a/module/plugins/hoster/CrockoCom.py b/module/plugins/hoster/CrockoCom.py
index 8f092ad0c..70f2be6fb 100644
--- a/module/plugins/hoster/CrockoCom.py
+++ b/module/plugins/hoster/CrockoCom.py
@@ -10,7 +10,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class CrockoCom(SimpleHoster):
__name__ = "CrockoCom"
__type__ = "hoster"
- __version__ = "0.21"
+ __version__ = "0.22"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?(crocko|easy-share)\.com/\w+'
@@ -39,8 +39,8 @@ class CrockoCom(SimpleHoster):
for _i in xrange(5):
m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m:
- url = urlparse.urljoin("http://crocko.com", m.group(1))
+ if m is not None:
+ url = urlparse.urljoin("http://crocko.com/", m.group(1))
self.wait(m.group(2))
self.html = self.load(url)
else:
@@ -54,16 +54,11 @@ class CrockoCom(SimpleHoster):
inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form))
recaptcha = ReCaptcha(self)
- for _i in xrange(5):
- inputs['recaptcha_response_field'], inputs['recaptcha_challenge_field'] = recaptcha.challenge()
- self.download(action, post=inputs)
+ inputs['recaptcha_response_field'], inputs['recaptcha_challenge_field'] = recaptcha.challenge()
+ self.download(action, post=inputs)
- if self.check_download({'captcha': recaptcha.KEY_AJAX_PATTERN}):
- self.captcha.invalid()
- else:
- break
- else:
- self.fail(_("No valid captcha solution received"))
+ if self.check_file({'captcha': recaptcha.KEY_AJAX_PATTERN}):
+ self.retry_captcha()
getInfo = create_getInfo(CrockoCom)
diff --git a/module/plugins/hoster/CzshareCom.py b/module/plugins/hoster/CzshareCom.py
index 3d2de5f7f..d678f25fa 100644
--- a/module/plugins/hoster/CzshareCom.py
+++ b/module/plugins/hoster/CzshareCom.py
@@ -12,7 +12,7 @@ from module.utils import parseFileSize as parse_size
class CzshareCom(SimpleHoster):
__name__ = "CzshareCom"
__type__ = "hoster"
- __version__ = "1.02"
+ __version__ = "1.04"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/(\d+/|download\.php\?).+'
@@ -40,11 +40,11 @@ class CzshareCom(SimpleHoster):
USER_CREDIT_PATTERN = r'<div class="credit">\s*kredit: <strong>([\d .,]+)(\w+)</strong>\s*</div><!-- .credit -->'
- def check_traffic_left(self):
+ def check_traffic(self):
#: Check if user logged in
m = re.search(self.USER_CREDIT_PATTERN, self.html)
if m is None:
- self.account.relogin(self.user)
+ self.account.relogin()
self.html = self.load(self.pyfile.url)
m = re.search(self.USER_CREDIT_PATTERN, self.html)
if m is None:
@@ -54,10 +54,11 @@ class CzshareCom(SimpleHoster):
try:
credit = parse_size(m.group(1).replace(' ', ''), m.group(2))
self.log_info(_("Premium download for %i KiB of Credit") % (self.pyfile.size / 1024))
- self.log_info(_("User %s has %i KiB left") % (self.user, credit / 1024))
+ self.log_info(_("User %s has %i KiB left") % (self.account.user, credit / 1024))
if credit < self.pyfile.size:
self.log_info(_("Not enough credit to download file: %s") % self.pyfile.name)
return False
+
except Exception, e:
#: let's continue and see what happens...
self.log_error(e)
@@ -66,13 +67,13 @@ class CzshareCom(SimpleHoster):
def handle_premium(self, pyfile):
- #: Parse download link
try:
form = re.search(self.PREMIUM_FORM_PATTERN, self.html, re.S).group(1)
inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form))
+
except Exception, e:
self.log_error(e)
- self.restart(nopremium=True)
+ self.restart()
#: Download the file, destination is determined by pyLoad
self.download("http://sdilej.cz/profi_down.php", post=inputs, disposition=True)
@@ -104,21 +105,17 @@ class CzshareCom(SimpleHoster):
#: Get and decrypt captcha
captcha_url = 'http://sdilej.cz/captcha.php'
- for _i in xrange(5):
- inputs['captchastring2'] = self.captcha.decrypt(captcha_url)
- self.html = self.load(parsed_url, post=inputs)
+ inputs['captchastring2'] = self.captcha.decrypt(captcha_url)
+ self.html = self.load(parsed_url, post=inputs)
- if u"<li>ZadanÃœ ověřovací kód nesouhlasí!</li>" in self.html:
- self.captcha.invalid()
+ if u"<li>ZadanÃœ ověřovací kód nesouhlasí!</li>" in self.html:
+ self.retry_captcha()
- elif re.search(self.MULTIDL_PATTERN, self.html):
- self.wait(5 * 60, 12, _("Download limit reached"))
+ elif re.search(self.MULTIDL_PATTERN, self.html):
+ self.wait(5 * 60, 12, _("Download limit reached"))
- else:
- self.captcha.correct()
- break
else:
- self.fail(_("No valid captcha code entered"))
+ self.captcha.correct()
m = re.search("countdown_number = (\d+);", self.html)
self.set_wait(int(m.group(1)) if m else 50)
@@ -135,9 +132,9 @@ class CzshareCom(SimpleHoster):
self.wait()
- def check_file(self):
+ def check_download(self):
#: Check download
- check = self.check_download({
+ check = self.check_file({
"temp offline" : re.compile(r"^Soubor je do.*asn.* nedostupn.*$"),
'credit' : re.compile(r"^Nem.*te dostate.*n.* kredit.$"),
"multi-dl" : re.compile(self.MULTIDL_PATTERN),
@@ -148,16 +145,15 @@ class CzshareCom(SimpleHoster):
self.fail(_("File not available - try later"))
elif check == "credit":
- self.restart(nopremium=True)
+ self.restart()
elif check == "multi-dl":
self.wait(5 * 60, 12, _("Download limit reached"))
elif check == "captcha":
- self.captcha.invalid()
- self.retry()
+ self.retry_captcha()
- return super(CzshareCom, self).check_file()
+ return super(CzshareCom, self).check_download()
getInfo = create_getInfo(CzshareCom)
diff --git a/module/plugins/hoster/DataportCz.py b/module/plugins/hoster/DataportCz.py
index 15caae1f7..fe304fdea 100644
--- a/module/plugins/hoster/DataportCz.py
+++ b/module/plugins/hoster/DataportCz.py
@@ -6,7 +6,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class DataportCz(SimpleHoster):
__name__ = "DataportCz"
__type__ = "hoster"
- __version__ = "0.42"
+ __version__ = "0.43"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?dataport\.cz/file/(.+)'
@@ -28,32 +28,26 @@ class DataportCz(SimpleHoster):
def handle_free(self, pyfile):
captchas = {'1': "jkeG", '2': "hMJQ", '3': "vmEK", '4': "ePQM", '5': "blBd"}
- for _i in xrange(60):
- action, inputs = self.parse_html_form('free_download_form')
- self.log_debug(action, inputs)
- if not action or not inputs:
- self.error(_("free_download_form"))
+ action, inputs = self.parse_html_form('free_download_form')
+ self.log_debug(action, inputs)
+ if not action or not inputs:
+ self.error(_("free_download_form"))
- if "captchaId" in inputs and inputs['captchaId'] in captchas:
- inputs['captchaCode'] = captchas[inputs['captchaId']]
- else:
- self.error(_("captcha"))
+ if "captchaId" in inputs and inputs['captchaId'] in captchas:
+ inputs['captchaCode'] = captchas[inputs['captchaId']]
+ else:
+ self.error(_("Captcha not found"))
- self.download("http://www.dataport.cz%s" % action, post=inputs)
+ self.download("http://www.dataport.cz%s" % action, post=inputs)
- check = self.check_download({'captcha': 'alert("\u0160patn\u011b opsan\u00fd k\u00f3d z obr\u00e1zu");',
- 'slot' : 'alert("Je n\u00e1m l\u00edto, ale moment\u00e1ln\u011b nejsou'})
- if check == "captcha":
- self.error(_("invalid captcha"))
+ check = self.check_file({'captcha': 'alert("\u0160patn\u011b opsan\u00fd k\u00f3d z obr\u00e1zu");',
+ 'slot' : 'alert("Je n\u00e1m l\u00edto, ale moment\u00e1ln\u011b nejsou'})
+ if check == "captcha":
+ self.retry_captcha()
- elif check == "slot":
- self.log_debug("No free slots - wait 60s and retry")
- self.wait(60, False)
- self.html = self.load(pyfile.url)
- continue
-
- else:
- break
+ elif check == "slot":
+ self.log_debug("No free slots - wait 60s and retry")
+ self.retry(wait=60)
getInfo = create_getInfo(DataportCz)
diff --git a/module/plugins/hoster/DateiTo.py b/module/plugins/hoster/DateiTo.py
index d90fc5864..42aed2c77 100644
--- a/module/plugins/hoster/DateiTo.py
+++ b/module/plugins/hoster/DateiTo.py
@@ -49,7 +49,8 @@ class DateiTo(SimpleHoster):
m = re.search(self.DATA_PATTERN, self.html)
if m is None:
- self.error(_("data"))
+ self.error(_("Data pattern not found"))
+
url = 'http://datei.to/' + m.group(1)
data = dict(x.split('=') for x in m.group(2).split('&'))
diff --git a/module/plugins/hoster/DebridItaliaCom.py b/module/plugins/hoster/DebridItaliaCom.py
index 7cf7c4663..ca6603a87 100644
--- a/module/plugins/hoster/DebridItaliaCom.py
+++ b/module/plugins/hoster/DebridItaliaCom.py
@@ -29,7 +29,7 @@ class DebridItaliaCom(MultiHoster):
get={'generate': "on", 'link': pyfile.url, 'p': self.get_password()})
if "ERROR:" not in self.html:
- self.link = self.html.strip()
+ self.link = self.html
else:
self.info['error'] = re.search(r'ERROR:(.*)', self.html).group(1).strip()
diff --git a/module/plugins/hoster/DepositfilesCom.py b/module/plugins/hoster/DepositfilesCom.py
index 9d42935cb..b3854f581 100644
--- a/module/plugins/hoster/DepositfilesCom.py
+++ b/module/plugins/hoster/DepositfilesCom.py
@@ -10,7 +10,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class DepositfilesCom(SimpleHoster):
__name__ = "DepositfilesCom"
__type__ = "hoster"
- __version__ = "0.57"
+ __version__ = "0.58"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(depositfiles\.com|dfiles\.(eu|ru))(/\w{1,3})?/files/(?P<ID>\w+)'
@@ -48,7 +48,7 @@ class DepositfilesCom(SimpleHoster):
m = re.search(r"var fid = '(\w+)';", self.html)
if m is None:
- self.retry(wait_time=5)
+ self.retry(wait=5)
params = {'fid': m.group(1)}
self.log_debug("FID: %s" % params['fid'])
@@ -66,7 +66,7 @@ class DepositfilesCom(SimpleHoster):
self.html = self.load("https://dfiles.eu/get_file.php", get=params)
m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m:
+ if m is not None:
self.link = urllib.unquote(m.group(1))
@@ -76,7 +76,7 @@ class DepositfilesCom(SimpleHoster):
self.retry(25, 60 * 60, "Download limit reached")
elif 'onClick="show_gold_offer' in self.html:
- self.account.relogin(self.user)
+ self.account.relogin()
self.retry()
else:
diff --git a/module/plugins/hoster/DlFreeFr.py b/module/plugins/hoster/DlFreeFr.py
index f9d427c1b..f77b9596a 100644
--- a/module/plugins/hoster/DlFreeFr.py
+++ b/module/plugins/hoster/DlFreeFr.py
@@ -100,15 +100,16 @@ class DlFreeFr(SimpleHoster):
if headers.get("code") == 302 and "set-cookie" in headers and "location" in headers:
m = re.search("(.*?)=(.*?); path=(.*?); domain=(.*)", headers.get("set-cookie"))
cj = CookieJar(self.__name__)
- if m:
+ if m is not None:
cj.setCookie(m.group(4), m.group(1), m.group(2), m.group(3))
else:
self.fail(_("Cookie error"))
self.link = headers.get("location")
self.req.setCookieJar(cj)
+
else:
- self.fail(_("Invalid response"))
+ self.fail(_("Bad header"))
def get_last_headers(self):
diff --git a/module/plugins/hoster/EuroshareEu.py b/module/plugins/hoster/EuroshareEu.py
index 53ac9ff06..3cfa014dd 100644
--- a/module/plugins/hoster/EuroshareEu.py
+++ b/module/plugins/hoster/EuroshareEu.py
@@ -8,7 +8,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class EuroshareEu(SimpleHoster):
__name__ = "EuroshareEu"
__type__ = "hoster"
- __version__ = "0.30"
+ __version__ = "0.32"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?euroshare\.(eu|sk|cz|hu|pl)/file/.+'
@@ -32,17 +32,17 @@ class EuroshareEu(SimpleHoster):
def handle_premium(self, pyfile):
if self.ERROR_PATTERN in self.html:
- self.account.relogin(self.user)
- self.retry(reason=_("User not logged in"))
+ self.account.relogin()
+ self.retry(msg=_("User not logged in"))
self.link = pyfile.url.rstrip('/') + "/download/"
- check = self.check_download({'login': re.compile(self.ERROR_PATTERN),
+ check = self.check_file({'login': re.compile(self.ERROR_PATTERN),
'json' : re.compile(r'\{"status":"error".*?"message":"(.*?)"')})
if check == "login" or (check == "json" and self.last_check.group(1) == "Access token expired"):
- self.account.relogin(self.user)
- self.retry(reason=_("Access token expired"))
+ self.account.relogin()
+ self.retry(msg=_("Access token expired"))
elif check == "json":
self.fail(self.last_check.group(1))
diff --git a/module/plugins/hoster/ExashareCom.py b/module/plugins/hoster/ExashareCom.py
index 19cd1b46c..c3a4b43dc 100644
--- a/module/plugins/hoster/ExashareCom.py
+++ b/module/plugins/hoster/ExashareCom.py
@@ -28,11 +28,7 @@ class ExashareCom(XFSHoster):
def handle_free(self, pyfile):
- m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m is None:
- self.error(_("Free download link not found"))
- else:
- self.link = m.group(1)
+ return super(XFSHoster, self).handle_free(pyfile)
getInfo = create_getInfo(ExashareCom)
diff --git a/module/plugins/hoster/ExtabitCom.py b/module/plugins/hoster/ExtabitCom.py
index 3442e7d27..b21db38bb 100644
--- a/module/plugins/hoster/ExtabitCom.py
+++ b/module/plugins/hoster/ExtabitCom.py
@@ -11,7 +11,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, s
class ExtabitCom(SimpleHoster):
__name__ = "ExtabitCom"
__type__ = "hoster"
- __version__ = "0.67"
+ __version__ = "0.68"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?extabit\.com/(file|go|fid)/(?P<ID>\w+)'
@@ -35,32 +35,30 @@ class ExtabitCom(SimpleHoster):
self.fail(_("Only premium users can download this file"))
m = re.search(r"Next free download from your ip will be available in <b>(\d+)\s*minutes", self.html)
- if m:
+ if m is not None:
self.wait(int(m.group(1)) * 60, True)
elif "The daily downloads limit from your IP is exceeded" in self.html:
self.log_warning(_("You have reached your daily downloads limit for today"))
- self.wait(seconds_to_midnight(gmt=2), True)
+ self.wait(seconds_to_midnight(), True)
self.log_debug("URL: " + self.req.http.lastEffectiveURL)
m = re.match(self.__pattern__, self.req.http.lastEffectiveURL)
fileID = m.group('ID') if m else self.info['pattern']['ID']
m = re.search(r'recaptcha/api/challenge\?k=(\w+)', self.html)
- if m:
+ if m is not None:
recaptcha = ReCaptcha(self)
captcha_key = m.group(1)
- for _i in xrange(5):
- get_data = {'type': "recaptcha"}
- get_data['capture'], get_data['challenge'] = recaptcha.challenge(captcha_key)
- res = json_loads(self.load("http://extabit.com/file/%s/" % fileID, get=get_data))
- if "ok" in res:
- self.captcha.correct()
- break
- else:
- self.captcha.invalid()
+ get_data = {'type': "recaptcha"}
+ get_data['capture'], get_data['challenge'] = recaptcha.challenge(captcha_key)
+
+ res = json_loads(self.load("http://extabit.com/file/%s/" % fileID, get=get_data))
+
+ if "ok" in res:
+ self.captcha.correct()
else:
- self.fail(_("Invalid captcha"))
+ self.retry_captcha()
else:
self.error(_("Captcha"))
diff --git a/module/plugins/hoster/FastixRu.py b/module/plugins/hoster/FastixRu.py
index 0019cf3c2..d932bb22e 100644
--- a/module/plugins/hoster/FastixRu.py
+++ b/module/plugins/hoster/FastixRu.py
@@ -10,7 +10,7 @@ from module.plugins.internal.MultiHoster import MultiHoster, create_getInfo
class FastixRu(MultiHoster):
__name__ = "FastixRu"
__type__ = "hoster"
- __version__ = "0.13"
+ __version__ = "0.15"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?fastix\.(ru|it)/file/\w{24}'
@@ -27,13 +27,11 @@ class FastixRu(MultiHoster):
def handle_premium(self, pyfile):
- api_key = self.account.get_data(self.user)
- api_key = api_key['api']
-
- self.html = self.load("http://fastix.ru/api_v2/",
- get={'apikey': api_key, 'sub': "getdirectlink", 'link': pyfile.url})
-
- data = json_loads(self.html)
+ self.html = json_loads(self.load("http://fastix.ru/api_v2/",
+ get={'apikey': self.account.get_data('apikey'),
+ 'sub' : "getdirectlink",
+ 'link' : pyfile.url})
+ data = self.html)
self.log_debug("Json data", data)
diff --git a/module/plugins/hoster/FastshareCz.py b/module/plugins/hoster/FastshareCz.py
index 485d69d15..b05edfb27 100644
--- a/module/plugins/hoster/FastshareCz.py
+++ b/module/plugins/hoster/FastshareCz.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class FastshareCz(SimpleHoster):
__name__ = "FastshareCz"
__type__ = "hoster"
- __version__ = "0.32"
+ __version__ = "0.35"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?fastshare\.cz/\d+/.+'
@@ -42,14 +42,14 @@ class FastshareCz(SimpleHoster):
if self.CREDIT_ERROR in self.html:
errmsg = self.info['error'] = _("Not enough traffic left")
self.log_warning(errmsg)
- self.restart(nopremium=True)
+ self.restart()
self.info.pop('error', None)
def handle_free(self, pyfile):
m = re.search(self.FREE_URL_PATTERN, self.html)
- if m:
+ if m is not None:
action, captcha_src = m.groups()
else:
self.error(_("FREE_URL_PATTERN not found"))
@@ -59,8 +59,8 @@ class FastshareCz(SimpleHoster):
self.download(urlparse.urljoin(baseurl, action), post={'code': captcha, 'btn.x': 77, 'btn.y': 18})
- def check_file(self):
- check = self.check_download({
+ def check_download(self):
+ check = self.check_file({
'paralell-dl' : re.compile(r"<title>FastShare.cz</title>|<script>alert\('Pres FREE muzete stahovat jen jeden soubor najednou.'\)"),
'wrong captcha': re.compile(r'Download for FREE'),
'credit' : re.compile(self.CREDIT_ERROR)
@@ -70,12 +70,12 @@ class FastshareCz(SimpleHoster):
self.retry(6, 10 * 60, _("Paralell download"))
elif check == "wrong captcha":
- self.retry(max_tries=5, reason=_("Wrong captcha"))
+ self.retry_captcha()
elif check == "credit":
- self.restart(nopremium=True)
+ self.restart()
- return super(FastshareCz, self).check_file()
+ return super(FastshareCz, self).check_download()
getInfo = create_getInfo(FastshareCz)
diff --git a/module/plugins/hoster/FileSharkPl.py b/module/plugins/hoster/FileSharkPl.py
index 62a7a553f..23aa7ea61 100644
--- a/module/plugins/hoster/FileSharkPl.py
+++ b/module/plugins/hoster/FileSharkPl.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class FileSharkPl(SimpleHoster):
__name__ = "FileSharkPl"
__type__ = "hoster"
- __version__ = "0.13"
+ __version__ = "0.15"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?fileshark\.pl/pobierz/\d+/\w+'
@@ -50,12 +50,12 @@ class FileSharkPl(SimpleHoster):
def check_errors(self):
#: Check if file is now available for download (-> file name can be found in html body)
m = re.search(self.WAIT_PATTERN, self.html)
- if m:
+ if m is not None:
errmsg = self.info['error'] = _("Another download already run")
self.retry(15, int(m.group(1)), errmsg)
m = re.search(self.ERROR_PATTERN, self.html)
- if m:
+ if m is not None:
alert = m.group(1)
if re.match(self.IP_ERROR_PATTERN, alert):
@@ -78,12 +78,12 @@ class FileSharkPl(SimpleHoster):
if m is None:
self.error(_("Download url not found"))
- link = urlparse.urljoin("http://fileshark.pl", m.group(1))
+ link = urlparse.urljoin("http://fileshark.pl/", m.group(1))
self.html = self.load(link)
m = re.search(self.WAIT_PATTERN, self.html)
- if m:
+ if m is not None:
seconds = int(m.group(1))
self.log_debug("Wait %s seconds" % seconds)
self.wait(seconds)
@@ -92,15 +92,15 @@ class FileSharkPl(SimpleHoster):
m = re.search(self.TOKEN_PATTERN, self.html)
if m is None:
- self.retry(reason=_("Captcha form not found"))
+ self.retry(msg=_("Captcha form not found"))
inputs['form[_token]'] = m.group(1)
m = re.search(self.CAPTCHA_PATTERN, self.html)
if m is None:
- self.retry(reason=_("Captcha image not found"))
+ self.retry(msg=_("Captcha image not found"))
- inputs['form[captcha]'] = self.captcha._decrypt(m.group(1).decode('base64'), input_type='jpeg')
+ inputs['form[captcha]'] = self.captcha.decrypt_image(m.group(1).decode('base64'), input_type='jpeg')
inputs['form[start]'] = ""
self.download(link, post=inputs, disposition=True)
diff --git a/module/plugins/hoster/FileboomMe.py b/module/plugins/hoster/FileboomMe.py
index 2798d9eda..1a2c89b0b 100644
--- a/module/plugins/hoster/FileboomMe.py
+++ b/module/plugins/hoster/FileboomMe.py
@@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
import re
-
-from urlparse import urljoin
+import urlparse
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
@@ -37,67 +36,53 @@ class FileboomMe(SimpleHoster):
def handle_free(self, pyfile):
- post_url = urljoin(pyfile.url, "/file/" + self.info['pattern']['ID'])
+ post_url = urlparse.urljoin(pyfile.url, "file/" + self.info['pattern']['ID'])
m = re.search(r'data-slow-id="(\w+)"', self.html)
- if m:
+ if m is not None:
self.html = self.load(post_url,
post={'slow_id': m.group(1)})
m = re.search(self.LINK_PATTERN, self.html)
- if m:
- self.link = urljoin(pyfile.url, m.group(0))
+ if m is not None:
+ self.link = urlparse.urljoin(pyfile.url, m.group(0))
else:
- for _i in xrange(5):
- m = re.search(r'<input type="hidden" name="uniqueId" value="(\w+)">', self.html)
- if m:
- uniqueId = m.group(1)
-
- m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m:
- captcha = self.captcha.decrypt(urljoin(pyfile.url, m.group(1)))
-
- self.html = self.load(post_url,
- post={'CaptchaForm[code]' : captcha,
- 'free' : 1,
- 'freeDownloadRequest': 1,
- 'uniqueId' : uniqueId})
-
- if 'The verification code is incorrect' in self.html:
- self.captcha.invalid()
-
- else:
- self.check_errors()
+ m = re.search(r'<input type="hidden" name="uniqueId" value="(\w+)">', self.html)
+ if m is None:
+ m = re.search(r'>\s*Please wait ([\d:]+)', self.html)
+ if m is not None:
+ wait_time = 0
+ for v in re.findall(r'(\d+)', m.group(1), re.I):
+ wait_time = 60 * wait_time + int(v)
+ self.wait(wait_time)
+ self.retry()
- self.html = self.load(post_url,
- post={'free' : 1,
- 'uniqueId': uniqueId})
-
- m = re.search(self.LINK_PATTERN, self.html)
- if m:
- self.link = urljoin(pyfile.url, m.group(0))
+ else:
+ uniqueId = m.group(1)
- else:
- self.captcha.invalid()
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m is not None:
+ captcha = self.captcha.decrypt(urlparse.urljoin(pyfile.url, m.group(1)))
+ self.html = self.load(post_url,
+ post={'CaptchaForm[code]' : captcha,
+ 'free' : 1,
+ 'freeDownloadRequest': 1,
+ 'uniqueId' : uniqueId})
- break
+ if 'The verification code is incorrect' in self.html:
+ self.retry_captcha()
else:
- self.fail(_("Captcha not found"))
-
- else:
- m = re.search(r'>\s*Please wait ([\d:]+)', self.html)
- if m:
- wait_time = 0
- for v in re.findall(r'(\d+)', m.group(1), re.I):
- wait_time = 60 * wait_time + int(v)
- self.wait(wait_time)
- self.retry()
- break
+ self.check_errors()
- else:
- self.fail(_("Invalid captcha"))
+ self.html = self.load(post_url,
+ post={'free' : 1,
+ 'uniqueId': uniqueId})
+
+ m = re.search(self.LINK_PATTERN, self.html)
+ if m is not None:
+ self.link = urlparse.urljoin(pyfile.url, m.group(0))
getInfo = create_getInfo(FileboomMe)
diff --git a/module/plugins/hoster/FilecloudIo.py b/module/plugins/hoster/FilecloudIo.py
index 21654fee3..da81d3f37 100644
--- a/module/plugins/hoster/FilecloudIo.py
+++ b/module/plugins/hoster/FilecloudIo.py
@@ -10,7 +10,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class FilecloudIo(SimpleHoster):
__name__ = "FilecloudIo"
__type__ = "hoster"
- __version__ = "0.10"
+ __version__ = "0.11"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?(?:filecloud\.io|ifile\.it|mihd\.net)/(?P<ID>\w+)'
@@ -64,7 +64,7 @@ class FilecloudIo(SimpleHoster):
response, challenge = recaptcha.challenge(captcha_key)
self.account.form_data = {'recaptcha_challenge_field': challenge,
'recaptcha_response_field' : response}
- self.account.relogin(self.user)
+ self.account.relogin()
self.retry(2)
json_url = "http://filecloud.io/download-request.json"
@@ -78,22 +78,18 @@ class FilecloudIo(SimpleHoster):
self.log_debug(res)
if res['captcha']:
data['ctype'] = "recaptcha"
+ data['recaptcha_response'], data['recaptcha_challenge'] = recaptcha.challenge(captcha_key)
- for _i in xrange(5):
- data['recaptcha_response'], data['recaptcha_challenge'] = recaptcha.challenge(captcha_key)
+ json_url = "http://filecloud.io/download-request.json"
+ res = self.load(json_url, post=data)
+ self.log_debug(res)
+ res = json_loads(res)
- json_url = "http://filecloud.io/download-request.json"
- res = self.load(json_url, post=data)
- self.log_debug(res)
- res = json_loads(res)
-
- if "retry" in res and res['retry']:
- self.captcha.invalid()
- else:
- self.captcha.correct()
- break
+ if "retry" in res and res['retry']:
+ self.retry_captcha()
else:
- self.fail(_("Incorrect captcha"))
+ self.captcha.correct()
+
if res['dl']:
self.html = self.load('http://filecloud.io/download.html')
@@ -111,7 +107,7 @@ class FilecloudIo(SimpleHoster):
def handle_premium(self, pyfile):
- akey = self.account.get_data(self.user)['akey']
+ akey = self.account.get_data('akey')
ukey = self.info['pattern']['ID']
self.log_debug("Akey: %s | Ukey: %s" % (akey, ukey))
rep = self.load("http://api.filecloud.io/api-fetch_download_url.api",
diff --git a/module/plugins/hoster/FiledropperCom.py b/module/plugins/hoster/FiledropperCom.py
index 3f5e2b761..8cef6c709 100644
--- a/module/plugins/hoster/FiledropperCom.py
+++ b/module/plugins/hoster/FiledropperCom.py
@@ -32,16 +32,14 @@ class FiledropperCom(SimpleHoster):
def handle_free(self, pyfile):
m = re.search(r'img id="img" src="(.+?)"', self.html)
if m is None:
- self.fail("Captcha not found")
+ self.fail(_("Captcha not found"))
captcha_code = self.captcha.decrypt("http://www.filedropper.com/%s" % m.group(1))
m = re.search(r'method="post" action="(.+?)"', self.html)
- if m is None:
- self.fail("Download link not found")
-
- self.download(urlparse.urljoin("http://www.filedropper.com/", m.group(1)),
- post={'code': captcha_code})
+ if m is not None:
+ self.download(urlparse.urljoin("http://www.filedropper.com/", m.group(1)),
+ post={'code': captcha_code})
getInfo = create_getInfo(FiledropperCom)
diff --git a/module/plugins/hoster/FilefactoryCom.py b/module/plugins/hoster/FilefactoryCom.py
index 325b4bb27..637f3b2e0 100644
--- a/module/plugins/hoster/FilefactoryCom.py
+++ b/module/plugins/hoster/FilefactoryCom.py
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
import re
-import urlparse
from module.network.RequestFactory import getURL as get_url
from module.plugins.internal.SimpleHoster import SimpleHoster, parse_fileInfo
@@ -20,7 +19,7 @@ def get_info(urls):
class FilefactoryCom(SimpleHoster):
__name__ = "FilefactoryCom"
__type__ = "hoster"
- __version__ = "0.57"
+ __version__ = "0.59"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?filefactory\.com/(file|trafficshare/\w+)/\w+'
@@ -51,36 +50,24 @@ class FilefactoryCom(SimpleHoster):
m = re.search(self.LINK_FREE_PATTERN, self.html)
if m is None:
- self.error(_("Free download link not found"))
+ return
self.link = m.group(1)
m = re.search(self.WAIT_PATTERN, self.html)
- if m:
+ if m is not None:
self.wait(m.group(1))
- def check_file(self):
- check = self.check_download({'multiple': "You are currently downloading too many files at once.",
+ def check_download(self):
+ check = self.check_file({'multiple': "You are currently downloading too many files at once.",
'error' : '<div id="errorMessage">'})
if check == "multiple":
self.log_debug("Parallel downloads detected; waiting 15 minutes")
- self.retry(wait_time=15 * 60, reason=_("Parallel downloads"))
+ self.retry(wait=15 * 60, msg=_("Parallel downloads"))
elif check == "error":
self.error(_("Unknown error"))
- return super(FilefactoryCom, self).check_file()
-
-
- def handle_premium(self, pyfile):
- self.link = self.direct_link(self.load(pyfile.url, just_header=True))
-
- if not self.link:
- html = self.load(pyfile.url)
- m = re.search(self.LINK_PREMIUM_PATTERN, html)
- if m:
- self.link = m.group(1)
- else:
- self.error(_("Premium download link not found"))
+ return super(FilefactoryCom, self).check_download()
diff --git a/module/plugins/hoster/FilepostCom.py b/module/plugins/hoster/FilepostCom.py
index d8c626ef2..3d42bebed 100644
--- a/module/plugins/hoster/FilepostCom.py
+++ b/module/plugins/hoster/FilepostCom.py
@@ -11,7 +11,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class FilepostCom(SimpleHoster):
__name__ = "FilepostCom"
__type__ = "hoster"
- __version__ = "0.35"
+ __version__ = "0.36"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(?:filepost\.com/files|fp\.io)/(?P<ID>[^/]+)'
@@ -64,27 +64,20 @@ class FilepostCom(SimpleHoster):
self.link = self.get_json_response(get_dict, post_dict, 'link')
if not self.link:
- self.fail(_("Incorrect password"))
+ self.fail(_("Wrong password"))
else:
self.fail(_("No password found"))
else:
- #: Solve recaptcha
- recaptcha = ReCaptcha(self)
-
- for i in xrange(5):
- get_dict['JsHttpRequest'] = str(int(time.time() * 10000)) + '-xml'
- if i:
- post_dict['recaptcha_response_field'], post_dict['recaptcha_challenge_field'] = recaptcha.challenge(
- captcha_key)
- self.log_debug(u"RECAPTCHA: %s : %s : %s" % (
- captcha_key, post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field']))
+ get_dict['JsHttpRequest'] = str(int(time.time() * 10000)) + '-xml'
+ self.link = self.get_json_response(get_dict, post_dict, 'link')
+ if not self.link:
+ #: Solve recaptcha
+ recaptcha = ReCaptcha(self)
+ post_dict['recaptcha_response_field'], post_dict['recaptcha_challenge_field'] = recaptcha.challenge(captcha_key)
self.link = self.get_json_response(get_dict, post_dict, 'link')
- else:
- self.fail(_("Invalid captcha"))
-
def get_json_response(self, get_dict, post_dict, field):
res = json_loads(self.load('https://filepost.com/files/get/', get=get_dict, post=post_dict))
@@ -101,8 +94,8 @@ class FilepostCom(SimpleHoster):
if 'error' in res['js']:
if res['js']['error'] == "download_delay":
- self.retry(wait_time=res['js']['params']['next_download'])
- #: ~? self.retry(wait_time=js_answer['params']['next_download'])
+ self.retry(wait=res['js']['params']['next_download'])
+ #: ~? self.retry(wait=js_answer['params']['next_download'])
elif 'Wrong file password' in res['js']['error'] \
or 'You entered a wrong CAPTCHA code' in res['js']['error'] \
diff --git a/module/plugins/hoster/FilepupNet.py b/module/plugins/hoster/FilepupNet.py
index 8bb23adb1..7793afe53 100644
--- a/module/plugins/hoster/FilepupNet.py
+++ b/module/plugins/hoster/FilepupNet.py
@@ -39,11 +39,9 @@ class FilepupNet(SimpleHoster):
def handle_free(self, pyfile):
m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m is None:
- self.error(_("Download link not found"))
-
- dl_link = m.group(1)
- self.download(dl_link, post={'task': "download"})
+ if m is not None:
+ dl_link = m.group(1)
+ self.download(dl_link, post={'task': "download"})
getInfo = create_getInfo(FilepupNet)
diff --git a/module/plugins/hoster/FilerNet.py b/module/plugins/hoster/FilerNet.py
index f8c41f4d1..37c88dec7 100644
--- a/module/plugins/hoster/FilerNet.py
+++ b/module/plugins/hoster/FilerNet.py
@@ -6,7 +6,6 @@
import pycurl
import re
-import urlparse
from module.plugins.captcha.ReCaptcha import ReCaptcha
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
@@ -58,10 +57,10 @@ class FilerNet(SimpleHoster):
self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 1)
if 'location' in self.req.http.header.lower():
- self.link = re.search(r'location: (\S+)', self.req.http.header, re.I).group(1)
self.captcha.correct()
+ self.link = re.search(r'location: (\S+)', self.req.http.header, re.I).group(1)
else:
- self.captcha.invalid()
+ self.retry_captcha()
getInfo = create_getInfo(FilerNet)
diff --git a/module/plugins/hoster/FilesMailRu.py b/module/plugins/hoster/FilesMailRu.py
index a6dd56152..fcb29b922 100644
--- a/module/plugins/hoster/FilesMailRu.py
+++ b/module/plugins/hoster/FilesMailRu.py
@@ -21,6 +21,7 @@ def get_info(urls):
url_pattern = '<a href="(.+?)" onclick="return Act\(this\, \'dlink\'\, event\)">(.+?)</a>'
file_name = re.search(url_pattern, html).group(0).split(', event)">')[1].split('</a>')[0]
result.append((file_name, 0, 2, url))
+
except Exception:
pass
@@ -32,7 +33,7 @@ def get_info(urls):
class FilesMailRu(Hoster):
__name__ = "FilesMailRu"
__type__ = "hoster"
- __version__ = "0.34"
+ __version__ = "0.35"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?files\.mail\.ru/.+'
@@ -103,7 +104,7 @@ class FilesMailRu(Hoster):
#: so i set it to check every download because sometimes there are downloads
#: that contain the HTML-Text and 60MB ZEROs after that in a xyzfile.part1.rar file
#: (Loading 100MB in to ram is not an option)
- check = self.check_download({'html': "<meta name="}, read_size=50000)
+ check = self.check_file({'html': "<meta name="}, read_size=50000)
if check == "html":
self.log_info(_(
"There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." %
diff --git a/module/plugins/hoster/FileserveCom.py b/module/plugins/hoster/FileserveCom.py
index a74589cff..277d4f2a8 100644
--- a/module/plugins/hoster/FileserveCom.py
+++ b/module/plugins/hoster/FileserveCom.py
@@ -24,6 +24,7 @@ def check_file(plugin, urls):
parse_size(cols[2]) if cols[2] != '--' else 0,
2 if cols[3].startswith('Available') else 1,
cols[0]))
+
except Exception, e:
continue
@@ -33,7 +34,7 @@ def check_file(plugin, urls):
class FileserveCom(Hoster):
__name__ = "FileserveCom"
__type__ = "hoster"
- __version__ = "0.58"
+ __version__ = "0.61"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?fileserve\.com/file/(?P<ID>[^/]+)'
@@ -94,7 +95,7 @@ class FileserveCom(Hoster):
elif action['fail'] == "parallelDownload":
self.log_warning(_("Parallel download error, now waiting 60s"))
- self.retry(wait_time=60, reason=_("parallelDownload"))
+ self.retry(wait=60, msg=_("parallelDownload"))
else:
self.fail(_("Download check returned: %s") % action['fail'])
@@ -119,7 +120,7 @@ class FileserveCom(Hoster):
self.download(self.url, post={'download': "normal"})
self.log_debug(self.req.http.lastEffectiveURL)
- check = self.check_download({'expired': self.LINK_EXPIRED_PATTERN,
+ check = self.check_file({'expired': self.LINK_EXPIRED_PATTERN,
'wait' : re.compile(self.LONG_WAIT_PATTERN),
'limit' : self.DL_LIMIT_PATTERN})
@@ -132,7 +133,7 @@ class FileserveCom(Hoster):
elif check == "limit":
self.log_warning(_("Download limited reached for today"))
- self.wait(seconds_to_midnight(gmt=2), True)
+ self.wait(seconds_to_midnight(), True)
self.retry()
self.thread.m.reconnecting.wait(3) #: Ease issue with later downloads appearing to be in parallel
@@ -160,19 +161,15 @@ class FileserveCom(Hoster):
captcha_key = re.search(self.CAPTCHA_KEY_PATTERN, self.html).group(1)
recaptcha = ReCaptcha(self)
- for _i in xrange(5):
- response, challenge = recaptcha.challenge(captcha_key)
- res = json_loads(self.load(self.URLS[2],
- post={'recaptcha_challenge_field' : challenge,
- 'recaptcha_response_field' : response,
- 'recaptcha_shortencode_field': self.file_id}))
- if not res['success']:
- self.captcha.invalid()
- else:
- self.captcha.correct()
- break
+ response, challenge = recaptcha.challenge(captcha_key)
+ res = json_loads(self.load(self.URLS[2],
+ post={'recaptcha_challenge_field' : challenge,
+ 'recaptcha_response_field' : response,
+ 'recaptcha_shortencode_field': self.file_id}))
+ if res['success']:
+ self.captcha.correct()
else:
- self.fail(_("Invalid captcha"))
+ self.retry_captcha()
def do_long_wait(self, m):
@@ -186,8 +183,8 @@ class FileserveCom(Hoster):
if self.__name__ == "FileserveCom":
#: Try api download
res = self.load("http://app.fileserve.com/api/download/premium/",
- post={'username': self.user,
- 'password': self.account.get_info(self.user)['login']['password'],
+ post={'username': self.account.user,
+ 'password': self.account.get_login('password'),
'shorten': self.file_id})
if res:
res = json_loads(res)
@@ -196,7 +193,7 @@ class FileserveCom(Hoster):
elif res['error_code'] in ["305", "500"]:
self.temp_offline()
elif res['error_code'] in ["403", "605"]:
- self.restart(nopremium=True)
+ self.restart()
elif res['error_code'] in ["606", "607", "608"]:
self.offline()
else:
@@ -204,9 +201,9 @@ class FileserveCom(Hoster):
self.download(premium_url or self.pyfile.url)
- if not premium_url and self.check_download({'login': re.compile(self.NOT_LOGGED_IN_PATTERN)}):
- self.account.relogin(self.user)
- self.retry(reason=_("Not logged in"))
+ if not premium_url and self.check_file({'login': re.compile(self.NOT_LOGGED_IN_PATTERN)}):
+ self.account.relogin()
+ self.retry(msg=_("Not logged in"))
def get_info(urls):
diff --git a/module/plugins/hoster/FourSharedCom.py b/module/plugins/hoster/FourSharedCom.py
index e5b309dc1..d767f4ca1 100644
--- a/module/plugins/hoster/FourSharedCom.py
+++ b/module/plugins/hoster/FourSharedCom.py
@@ -38,7 +38,7 @@ class FourSharedCom(SimpleHoster):
def handle_free(self, pyfile):
m = re.search(self.LINK_BTN_PATTERN, self.html)
- if m:
+ if m is not None:
link = m.group(1)
else:
link = re.sub(r'/(download|get|file|document|photo|video|audio)/', r'/get/', pyfile.url)
@@ -47,7 +47,7 @@ class FourSharedCom(SimpleHoster):
m = re.search(self.LINK_FREE_PATTERN, self.html)
if m is None:
- self.error(_("Download link"))
+ return
self.link = m.group(1)
@@ -55,6 +55,7 @@ class FourSharedCom(SimpleHoster):
m = re.search(self.ID_PATTERN, self.html)
res = self.load('http://www.4shared.com/web/d2/getFreeDownloadLimitInfo?fileId=%s' % m.group(1))
self.log_debug(res)
+
except Exception:
pass
diff --git a/module/plugins/hoster/FreakshareCom.py b/module/plugins/hoster/FreakshareCom.py
index 4564ee03e..450f11095 100644
--- a/module/plugins/hoster/FreakshareCom.py
+++ b/module/plugins/hoster/FreakshareCom.py
@@ -10,7 +10,7 @@ from module.plugins.internal.SimpleHoster import seconds_to_midnight
class FreakshareCom(Hoster):
__name__ = "FreakshareCom"
__type__ = "hoster"
- __version__ = "0.43"
+ __version__ = "0.44"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?freakshare\.(net|com)/files/\S*?/'
@@ -44,7 +44,7 @@ class FreakshareCom(Hoster):
self.download(pyfile.url, post=self.req_opts)
- check = self.check_download({'bad' : "bad try",
+ check = self.check_file({'bad' : "bad try",
'paralell' : "> Sorry, you cant download more then 1 files at time. <",
'empty' : "Warning: Unknown: Filename cannot be empty",
'wrong_captcha' : "Wrong Captcha!",
@@ -61,8 +61,7 @@ class FreakshareCom(Hoster):
self.fail(_("File not downloadable"))
elif check == "wrong_captcha":
- self.captcha.invalid()
- self.retry()
+ self.retry_captcha()
elif check == "downloadserver":
self.retry(5, 15 * 60, _("No Download server"))
@@ -111,7 +110,7 @@ class FreakshareCom(Hoster):
if not self.wantReconnect:
m = re.search(r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center;\">([^ ]+)", self.html)
- if m:
+ if m is not None:
file_name = m.group(1)
else:
file_name = self.pyfile.url
@@ -128,7 +127,7 @@ class FreakshareCom(Hoster):
if not self.wantReconnect:
m = re.search(r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center;\">[^ ]+ - ([^ ]+) (\w\w)yte", self.html)
- if m:
+ if m is not None:
units = float(m.group(1).replace(",", ""))
pow = {'KB': 1, 'MB': 2, 'GB': 3}[m.group(2)]
size = int(units * 1024 ** pow)
@@ -142,7 +141,7 @@ class FreakshareCom(Hoster):
if "Your Traffic is used up for today" in self.html:
self.wantReconnect = True
- return seconds_to_midnight(gmt=2)
+ return seconds_to_midnight()
timestring = re.search('\s*var\s(?:downloadWait|time)\s=\s(\d*)[\d.]*;', self.html)
if timestring:
diff --git a/module/plugins/hoster/FreeWayMe.py b/module/plugins/hoster/FreeWayMe.py
index ed7c4bf7f..c0053fc76 100644
--- a/module/plugins/hoster/FreeWayMe.py
+++ b/module/plugins/hoster/FreeWayMe.py
@@ -6,7 +6,7 @@ from module.plugins.internal.MultiHoster import MultiHoster, create_getInfo
class FreeWayMe(MultiHoster):
__name__ = "FreeWayMe"
__type__ = "hoster"
- __version__ = "0.19"
+ __version__ = "0.20"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?free-way\.(bz|me)/.+'
@@ -33,7 +33,7 @@ class FreeWayMe(MultiHoster):
get={'multiget': 7,
'url' : pyfile.url,
'user' : user,
- 'pw' : self.account.get_info(self.user)['login']['password'],
+ 'pw' : self.account.get_login('password'),
'json' : ""},
just_header=True)
diff --git a/module/plugins/hoster/FshareVn.py b/module/plugins/hoster/FshareVn.py
index a5aac222c..b387151f7 100644
--- a/module/plugins/hoster/FshareVn.py
+++ b/module/plugins/hoster/FshareVn.py
@@ -68,7 +68,7 @@ class FshareVn(SimpleHoster):
self.html = self.load(url, post=inputs)
if 'name="link_file_pwd_dl"' in self.html:
- self.fail(_("Incorrect password"))
+ self.fail(_("Wrong password"))
else:
self.fail(_("No password found"))
@@ -93,7 +93,7 @@ class FshareVn(SimpleHoster):
self.offline()
m = re.search(self.WAIT_PATTERN, self.html)
- if m:
+ if m is not None:
self.log_info(_("Wait until %s ICT") % m.group(1))
wait_until = time.mktime.time(time.strptime.time(m.group(1), "%d/%m/%Y %H:%M"))
self.wait(wait_until - time.mktime.time(time.gmtime.time()) - 7 * 60 * 60, True)
diff --git a/module/plugins/hoster/Ftp.py b/module/plugins/hoster/Ftp.py
index 25eb44604..2ff1755f4 100644
--- a/module/plugins/hoster/Ftp.py
+++ b/module/plugins/hoster/Ftp.py
@@ -11,7 +11,7 @@ from module.plugins.internal.Hoster import Hoster
class Ftp(Hoster):
__name__ = "Ftp"
__type__ = "hoster"
- __version__ = "0.54"
+ __version__ = "0.55"
__status__ = "testing"
__pattern__ = r'(?:ftps?|sftp)://([\w.-]+(:[\w.-]+)?@)?[\w.-]+(:\d+)?/.+'
@@ -29,30 +29,41 @@ class Ftp(Hoster):
def process(self, pyfile):
- parsed_url = urlparse.urlparse(pyfile.url)
- netloc = parsed_url.netloc
+ p_url = urlparse.urlparse(pyfile.url)
+ netloc = p_url.netloc
- pyfile.name = parsed_url.path.rpartition('/')[2]
+ pyfile.name = p_url.path.rpartition('/')[2]
try:
pyfile.name = urllib.unquote(str(pyfile.name)).decode('utf8')
+
except Exception:
pass
if not "@" in netloc:
- servers = [x['login'] for x in self.account.getAllAccounts()] if self.account else []
+ self.log_debug("Auth required")
+
+ #@TODO: Recheck in 0.4.10
+ if self.account:
+ servers = [x['login'] for x in self.account.getAllAccounts()]
+ else:
+ servers = []
if netloc in servers:
self.log_debug("Logging on to %s" % netloc)
- self.req.addAuth(self.account.get_info(netloc)['login']['password'])
+ self.req.addAuth(self.account.get_login('password'))
+
else:
pwd = self.get_password()
if ':' in pwd:
self.req.addAuth(pwd)
+ else:
+ self.fail(_("Authorization required"))
self.req.http.c.setopt(pycurl.NOBODY, 1)
try:
res = self.load(pyfile.url)
+
except pycurl.error, e:
self.fail(_("Error %d: %s") % e.args)
@@ -60,19 +71,25 @@ class Ftp(Hoster):
self.log_debug(self.req.http.header)
m = re.search(r"Content-Length:\s*(\d+)", res)
- if m:
+ if m is not None:
pyfile.size = int(m.group(1))
self.download(pyfile.url)
+
else:
#: Naive ftp directory listing
if re.search(r'^25\d.*?"', self.req.http.header, re.M):
pyfile.url = pyfile.url.rstrip('/')
pkgname = "/".join([pyfile.package().name, urlparse.urlparse(pyfile.url).path.rpartition('/')[2]])
+
pyfile.url += '/'
+
self.req.http.c.setopt(48, 1) #: CURLOPT_DIRLISTONLY
res = self.load(pyfile.url, decode=False)
+
links = [pyfile.url + x for x in res.splitlines()]
self.log_debug("LINKS", links)
+
self.pyload.api.addPackage(pkgname, links)
+
else:
self.fail(_("Unexpected server response"))
diff --git a/module/plugins/hoster/GigapetaCom.py b/module/plugins/hoster/GigapetaCom.py
index 381c39a21..85e5e4843 100644
--- a/module/plugins/hoster/GigapetaCom.py
+++ b/module/plugins/hoster/GigapetaCom.py
@@ -36,23 +36,22 @@ class GigapetaCom(SimpleHoster):
self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 0)
- for _i in xrange(5):
- self.check_errors()
-
- captcha = self.captcha.decrypt(captcha_url)
- self.html = self.load(pyfile.url, post={
- 'captcha_key': captcha_key,
- 'captcha': captcha,
- 'download': "Download"})
-
- m = re.search(r'Location\s*:\s*(.+)', self.req.http.header, re.I)
- if m:
- self.link = m.group(1).rstrip() #@TODO: Remove .rstrip() in 0.4.10
- break
- elif "Entered figures don&#96;t coincide with the picture" in self.html:
- self.captcha.invalid()
- else:
- self.fail(_("No valid captcha code entered"))
+ self.check_errors()
+
+ captcha = self.captcha.decrypt(captcha_url)
+ self.html = self.load(pyfile.url, post={
+ 'captcha_key': captcha_key,
+ 'captcha': captcha,
+ 'download': "Download"})
+
+ m = re.search(r'Location\s*:\s*(.+)', self.req.http.header, re.I)
+ if m is not None:
+ self.captcha.correct()
+ self.link = m.group(1)
+
+ elif "Entered figures don&#96;t coincide with the picture" in self.html:
+ self.retry_captcha()
+
self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 1)
diff --git a/module/plugins/hoster/GoogledriveCom.py b/module/plugins/hoster/GoogledriveCom.py
index 903b5361e..c6b84b776 100644
--- a/module/plugins/hoster/GoogledriveCom.py
+++ b/module/plugins/hoster/GoogledriveCom.py
@@ -41,19 +41,16 @@ class GoogledriveCom(SimpleHoster):
m = re.search(self.LINK_FREE_PATTERN, self.html)
if m is None:
- self.error(_("Free download link not found"))
+ return
+ link = self.fixurl(link, "https://docs.google.com/")
+ direct_link = self.direct_link(link, False)
+
+ if not direct_link:
+ self.html = self.load(link)
else:
- link = html_unescape(m.group(1).decode('unicode-escape'))
- if not urlparse.urlparse(link).scheme:
- link = urlparse.urljoin("https://docs.google.com/", link)
-
- direct_link = self.direct_link(link, False)
- if not direct_link:
- self.html = self.load(link)
- else:
- self.link = direct_link
- break
+ self.link = direct_link
+ break
getInfo = create_getInfo(GoogledriveCom)
diff --git a/module/plugins/hoster/HellshareCz.py b/module/plugins/hoster/HellshareCz.py
index eab819ad9..012b6be63 100644
--- a/module/plugins/hoster/HellshareCz.py
+++ b/module/plugins/hoster/HellshareCz.py
@@ -1,7 +1,5 @@
# -*- coding: utf-8 -*-
-import urlparse
-
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
diff --git a/module/plugins/hoster/HighWayMe.py b/module/plugins/hoster/HighWayMe.py
index 119ddb70e..53a8960c1 100644
--- a/module/plugins/hoster/HighWayMe.py
+++ b/module/plugins/hoster/HighWayMe.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import seconds_to_midnight
class HighWayMe(MultiHoster):
__name__ = "HighWayMe"
__type__ = "hoster"
- __version__ = "0.13"
+ __version__ = "0.15"
__status__ = "testing"
__pattern__ = r'https?://.+high-way\.my'
@@ -27,7 +27,7 @@ class HighWayMe(MultiHoster):
def check_errors(self):
if self.html.get('code') == 302: #@NOTE: This is not working. It should by if 302 Moved Temporarily then... But I don't now how to implement it.
- self.account.relogin(self.user)
+ self.account.relogin()
self.retry()
elif "<code>9</code>" in self.html:
@@ -39,7 +39,7 @@ class HighWayMe(MultiHoster):
elif "trafficlimit" in self.html:
self.log_warning(_("Reached daily limit"))
- self.retry(wait_time=seconds_to_midnight(gmt=2), reason="Daily limit for this host reached")
+ self.retry(wait=seconds_to_midnight(), msg="Daily limit for this host reached")
elif "<code>8</code>" in self.html:
self.log_warning(_("Hoster temporarily unavailable, waiting 1 minute and retry"))
diff --git a/module/plugins/hoster/HostujeNet.py b/module/plugins/hoster/HostujeNet.py
index 4dbf550b3..3c0a53535 100644
--- a/module/plugins/hoster/HostujeNet.py
+++ b/module/plugins/hoster/HostujeNet.py
@@ -30,19 +30,19 @@ class HostujeNet(SimpleHoster):
def handle_free(self, pyfile):
m = re.search(r'<script src="([\w^_]+.php)"></script>', self.html)
- if m:
+ if m is not None:
jscript = self.load("http://hostuje.net/" + m.group(1))
m = re.search(r"\('(\w+\.php\?i=\w+)'\);", jscript)
- if m:
+ if m is not None:
self.load("http://hostuje.net/" + m.group(1))
else:
- self.error(_("unexpected javascript format"))
+ self.error(_("Unexpected javascript format"))
else:
- self.error(_("script not found"))
+ self.error(_("Script not found"))
action, inputs = self.parse_html_form(pyfile.url.replace(".", "\.").replace( "?", "\?"))
if not action:
- self.error(_("form not found"))
+ self.error(_("Form not found"))
self.download(action, post=inputs)
diff --git a/module/plugins/hoster/IfolderRu.py b/module/plugins/hoster/IfolderRu.py
index 85d03489d..08e22a9df 100644
--- a/module/plugins/hoster/IfolderRu.py
+++ b/module/plugins/hoster/IfolderRu.py
@@ -45,21 +45,16 @@ class IfolderRu(SimpleHoster):
self.get_fileInfo()
session_id = re.search(self.SESSION_ID_PATTERN, self.html).groups()
-
captcha_url = "http://ints.rusfolder.com/random/images/?session=%s" % session_id
- for _i in xrange(5):
- action, inputs = self.parse_html_form('id="download-step-one-form"')
- inputs['confirmed_number'] = self.captcha.decrypt(captcha_url, cookies=True)
- inputs['action'] = '1'
- self.log_debug(inputs)
-
- self.html = self.load(url, post=inputs)
- if self.WRONG_CAPTCHA_PATTERN in self.html:
- self.captcha.invalid()
- else:
- break
- else:
- self.fail(_("Invalid captcha"))
+
+ action, inputs = self.parse_html_form('id="download-step-one-form"')
+ inputs['confirmed_number'] = self.captcha.decrypt(captcha_url, cookies=True)
+ inputs['action'] = '1'
+ self.log_debug(inputs)
+
+ self.html = self.load(url, post=inputs)
+ if self.WRONG_CAPTCHA_PATTERN in self.html:
+ self.retry_captcha()
self.link = re.search(self.LINK_FREE_PATTERN, self.html).group(1)
diff --git a/module/plugins/hoster/Keep2ShareCc.py b/module/plugins/hoster/Keep2ShareCc.py
index bf4b157cb..427dbbec7 100644
--- a/module/plugins/hoster/Keep2ShareCc.py
+++ b/module/plugins/hoster/Keep2ShareCc.py
@@ -10,7 +10,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class Keep2ShareCc(SimpleHoster):
__name__ = "Keep2ShareCc"
__type__ = "hoster"
- __version__ = "0.24"
+ __version__ = "0.26"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(keep2share|k2s|keep2s)\.cc/file/(?P<ID>\w+)'
@@ -42,18 +42,18 @@ class Keep2ShareCc(SimpleHoster):
def check_errors(self):
m = re.search(self.TEMP_ERROR_PATTERN, self.html)
- if m:
+ if m is not None:
self.info['error'] = m.group(1)
self.wantReconnect = True
- self.retry(wait_time=30 * 60, reason=m.group(0))
+ self.retry(wait=30 * 60, msg=m.group(0))
m = re.search(self.ERROR_PATTERN, self.html)
- if m:
+ if m is not None:
errmsg = self.info['error'] = m.group(1)
self.error(errmsg)
m = re.search(self.WAIT_PATTERN, self.html)
- if m:
+ if m is not None:
self.log_debug("Hoster told us to wait for %s" % m.group(1))
#: String to time convert courtesy of https://stackoverflow.com/questions/10663720
@@ -61,7 +61,7 @@ class Keep2ShareCc(SimpleHoster):
wait_time = sum(a * b for a, b in zip(ftr, map(int, m.group(1).split(':'))))
self.wantReconnect = True
- self.retry(wait_time=wait_time, reason="Please wait to download this file")
+ self.retry(wait=wait_time, msg="Please wait to download this file")
self.info.pop('error', None)
@@ -95,11 +95,11 @@ class Keep2ShareCc(SimpleHoster):
'yt0' : ''}
m = re.search(r'id="(captcha\-form)"', self.html)
- self.log_debug("captcha-form found %s" % m)
+ self.log_debug("Captcha form found", m)
m = re.search(self.CAPTCHA_PATTERN, self.html)
self.log_debug("CAPTCHA_PATTERN found %s" % m)
- if m:
+ if m is not None:
captcha_url = urlparse.urljoin("http://keep2s.cc/", m.group(1))
post_data['CaptchaForm[code]'] = self.captcha.decrypt(captcha_url)
else:
@@ -110,10 +110,10 @@ class Keep2ShareCc(SimpleHoster):
self.html = self.load(self.pyfile.url, post=post_data)
- if 'verification code is incorrect' not in self.html:
- self.captcha.correct()
+ if 'verification code is incorrect' in self.html:
+ self.retry_captcha()
else:
- self.captcha.invalid()
+ self.captcha.correct()
getInfo = create_getInfo(Keep2ShareCc)
diff --git a/module/plugins/hoster/KingfilesNet.py b/module/plugins/hoster/KingfilesNet.py
index 98f74ad0d..3f7b0bfb9 100644
--- a/module/plugins/hoster/KingfilesNet.py
+++ b/module/plugins/hoster/KingfilesNet.py
@@ -56,7 +56,7 @@ class KingfilesNet(SimpleHoster):
self.error(_("Random key not found"))
rand = m.group(1)
- self.log_debug("rand = ", rand)
+ self.log_debug("rand = " + rand)
post_data = {'op' : "download2",
'id' : self.info['pattern']['ID'],
diff --git a/module/plugins/hoster/LetitbitNet.py b/module/plugins/hoster/LetitbitNet.py
index e93b60460..b8a563007 100644
--- a/module/plugins/hoster/LetitbitNet.py
+++ b/module/plugins/hoster/LetitbitNet.py
@@ -35,7 +35,7 @@ def get_info(urls):
class LetitbitNet(SimpleHoster):
__name__ = "LetitbitNet"
__type__ = "hoster"
- __version__ = "0.32"
+ __version__ = "0.33"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(letitbit|shareflare)\.net/download/.+'
@@ -60,7 +60,7 @@ class LetitbitNet(SimpleHoster):
def handle_free(self, pyfile):
action, inputs = self.parse_html_form('id="ifree_form"')
if not action:
- self.error(_("ifree_form"))
+ self.error(_("Form not found"))
pyfile.size = float(inputs['sssize'])
self.log_debug(action, inputs)
@@ -99,16 +99,12 @@ class LetitbitNet(SimpleHoster):
self.log_debug(res)
- if not res:
- self.captcha.invalid()
+ if not res or res == "error_wrong_captcha":
+ self.retry_captcha()
- if res == "error_free_download_blocked":
+ elif res == "error_free_download_blocked":
self.log_warning(_("Daily limit reached"))
- self.wait(seconds_to_midnight(gmt=2), True)
-
- if res == "error_wrong_captcha":
- self.captcha.invalid()
- self.retry()
+ self.wait(seconds_to_midnight(), True)
elif res.startswith('['):
urls = json_loads(res)
@@ -123,10 +119,9 @@ class LetitbitNet(SimpleHoster):
def handle_premium(self, pyfile):
- api_key = self.user
- premium_key = self.account.get_info(self.user)['login']['password']
+ premium_key = self.account.get_login('password')
- json_data = [api_key, ["download/direct_links", {'pass': premium_key, 'link': pyfile.url}]]
+ json_data = [self.account.user, ["download/direct_links", {'pass': premium_key, 'link': pyfile.url}]]
api_rep = self.load('http://api.letitbit.net/json', post={'r': json_dumps(json_data)})
self.log_debug("API Data: " + api_rep)
api_rep = json_loads(api_rep)
diff --git a/module/plugins/hoster/LinksnappyCom.py b/module/plugins/hoster/LinksnappyCom.py
index 1c3f86d4a..f92681f60 100644
--- a/module/plugins/hoster/LinksnappyCom.py
+++ b/module/plugins/hoster/LinksnappyCom.py
@@ -10,7 +10,7 @@ from module.plugins.internal.MultiHoster import MultiHoster, create_getInfo
class LinksnappyCom(MultiHoster):
__name__ = "LinksnappyCom"
__type__ = "hoster"
- __version__ = "0.11"
+ __version__ = "0.12"
__status__ = "testing"
__pattern__ = r'https?://(?:[^/]+\.)?linksnappy\.com'
@@ -26,8 +26,8 @@ class LinksnappyCom(MultiHoster):
host = self._get_host(pyfile.url)
json_params = json_dumps({'link' : pyfile.url,
'type' : host,
- 'username': self.user,
- 'password': self.account.get_info(self.user)['login']['password']})
+ 'username': self.account.user,
+ 'password': self.account.get_login('password')})
r = self.load("http://linksnappy.com/api/linkgen",
post={'genLinks': json_params})
diff --git a/module/plugins/hoster/LoadTo.py b/module/plugins/hoster/LoadTo.py
index 7a42e0360..722f0e518 100644
--- a/module/plugins/hoster/LoadTo.py
+++ b/module/plugins/hoster/LoadTo.py
@@ -50,7 +50,7 @@ class LoadTo(SimpleHoster):
#: Set Timer - may be obsolete
m = re.search(self.WAIT_PATTERN, self.html)
- if m:
+ if m is not None:
self.wait(m.group(1))
#: Load.to is using solvemedia captchas since ~july 2014:
diff --git a/module/plugins/hoster/LuckyShareNet.py b/module/plugins/hoster/LuckyShareNet.py
index 788c1aca8..f9c7a89ef 100644
--- a/module/plugins/hoster/LuckyShareNet.py
+++ b/module/plugins/hoster/LuckyShareNet.py
@@ -10,7 +10,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class LuckyShareNet(SimpleHoster):
__name__ = "LuckyShareNet"
__type__ = "hoster"
- __version__ = "0.08"
+ __version__ = "0.10"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?luckyshare\.net/(?P<ID>\d{10,})'
@@ -29,14 +29,14 @@ class LuckyShareNet(SimpleHoster):
if 'AJAX Error' in rep:
html = self.load(self.pyfile.url)
m = re.search(r"waitingtime = (\d+);", html)
- if m:
+ if m is not None:
seconds = int(m.group(1))
self.log_debug("You have to wait %d seconds between free downloads" % seconds)
- self.retry(wait_time=seconds)
+ self.retry(wait=seconds)
else:
self.error(_("Unable to detect wait time between free downloads"))
elif 'Hash expired' in rep:
- self.retry(reason=_("Hash expired"))
+ self.retry(msg=_("Hash expired"))
return json_loads(rep)
@@ -52,24 +52,20 @@ class LuckyShareNet(SimpleHoster):
recaptcha = ReCaptcha(self)
- for _i in xrange(5):
- response, challenge = recaptcha.challenge()
- rep = self.load(r"http://luckyshare.net/download/verify/challenge/%s/response/%s/hash/%s" %
- (challenge, response, json['hash']))
- self.log_debug("JSON: " + rep)
- if 'link' in rep:
- json.update(self.parse_json(rep))
- self.captcha.correct()
- break
- elif 'Verification failed' in rep:
- self.captcha.invalid()
- else:
- self.error(_("Unable to get downlaod link"))
+ response, challenge = recaptcha.challenge()
+ rep = self.load(r"http://luckyshare.net/download/verify/challenge/%s/response/%s/hash/%s" %
+ (challenge, response, json['hash']))
+
+ self.log_debug("JSON: " + rep)
- if not json['link']:
- self.fail(_("No Download url retrieved/all captcha attempts failed"))
+ if 'Verification failed' in rep:
+ self.retry_captcha()
- self.link = json['link']
+ elif 'link' in rep:
+ self.captcha.correct()
+ json.update(self.parse_json(rep))
+ if json['link']:
+ self.link = json['link']
getInfo = create_getInfo(LuckyShareNet)
diff --git a/module/plugins/hoster/MediafireCom.py b/module/plugins/hoster/MediafireCom.py
index 3ba191160..1abe87cd2 100644
--- a/module/plugins/hoster/MediafireCom.py
+++ b/module/plugins/hoster/MediafireCom.py
@@ -8,10 +8,10 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class MediafireCom(SimpleHoster):
__name__ = "MediafireCom"
__type__ = "hoster"
- __version__ = "0.90"
+ __version__ = "0.91"
__status__ = "testing"
- __pattern__ = r'https?://(?:www\.)?mediafire\.com/(file/|view/\??|download(\.php\?|/)|\?)(?P<ID>\w{15})'
+ __pattern__ = r'https?://(?:www\.)?mediafire\.com/(file/|view/\??|download(\.php\?|/)|\?)(?P<ID>\w+)'
__config__ = [("use_premium", "bool", "Use premium account if available", True)]
__description__ = """Mediafire.com hoster plugin"""
@@ -69,7 +69,7 @@ class MediafireCom(SimpleHoster):
self.html = self.load(self.link, post={'downloadp': password})
if self.PASSWORD_PATTERN in self.html:
- self.fail(_("Incorrect password"))
+ self.fail(_("Wrong password"))
return super(MediafireCom, self).handle_free(pyfile)
diff --git a/module/plugins/hoster/MegaDebridEu.py b/module/plugins/hoster/MegaDebridEu.py
index 4afba0a3a..0dfc16c34 100644
--- a/module/plugins/hoster/MegaDebridEu.py
+++ b/module/plugins/hoster/MegaDebridEu.py
@@ -48,7 +48,7 @@ class MegaDebridEu(MultiHoster):
Return The debrided link if succeed or original link if fail
"""
if not self.api_load():
- self.error("Unable to connect to remote API")
+ self.error(_("Unable to connect to remote API"))
jsonResponse = self.load(self.API_URL,
get={'action': 'getLink', 'token': self.token},
diff --git a/module/plugins/hoster/MegaRapidCz.py b/module/plugins/hoster/MegaRapidCz.py
index 13f462585..69c1c411b 100644
--- a/module/plugins/hoster/MegaRapidCz.py
+++ b/module/plugins/hoster/MegaRapidCz.py
@@ -22,7 +22,7 @@ def get_info(urls):
class MegaRapidCz(SimpleHoster):
__name__ = "MegaRapidCz"
__type__ = "hoster"
- __version__ = "0.57"
+ __version__ = "0.59"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?(share|mega)rapid\.cz/soubor/\d+/.+'
@@ -54,15 +54,12 @@ class MegaRapidCz(SimpleHoster):
def handle_premium(self, pyfile):
m = re.search(self.LINK_PREMIUM_PATTERN, self.html)
- if m:
+ if m is not None:
self.link = m.group(1)
- else:
- if re.search(self.ERR_LOGIN_PATTERN, self.html):
- self.relogin(self.user)
- self.retry(wait_time=60, reason=_("User login failed"))
- elif re.search(self.ERR_CREDIT_PATTERN, self.html):
- self.fail(_("Not enough credit left"))
+ elif re.search(self.ERR_LOGIN_PATTERN, self.html):
+ self.relogin()
+ self.retry(wait=60, msg=_("User login failed"))
- else:
- self.fail(_("Download link not found"))
+ elif re.search(self.ERR_CREDIT_PATTERN, self.html):
+ self.fail(_("Not enough credit left"))
diff --git a/module/plugins/hoster/MegaRapidoNet.py b/module/plugins/hoster/MegaRapidoNet.py
index 6676a565d..573586639 100644
--- a/module/plugins/hoster/MegaRapidoNet.py
+++ b/module/plugins/hoster/MegaRapidoNet.py
@@ -23,7 +23,7 @@ def random_with_n_digits(n):
class MegaRapidoNet(MultiHoster):
__name__ = "MegaRapidoNet"
__type__ = "hoster"
- __version__ = "0.04"
+ __version__ = "0.05"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?\w+\.megarapido\.net/\?file=\w+'
@@ -42,15 +42,15 @@ class MegaRapidoNet(MultiHoster):
def handle_premium(self, pyfile):
self.html = self.load("http://megarapido.net/gerar.php",
- post={'rand' :random_with_N_digits(16),
- 'urllist' : pyfile.url,
- 'links' : pyfile.url,
- 'exibir' : "normal",
- 'usar' : "premium",
- 'user' : self.account.get_data(self.user).get('sid', None),
- 'autoreset': ""})
+ post={'rand' :random_with_N_digits(16),
+ 'urllist' : pyfile.url,
+ 'links' : pyfile.url,
+ 'exibir' : "normal",
+ 'usar' : "premium",
+ 'user' : self.account.get_data('sid'),
+ 'autoreset': ""})
if "desloga e loga novamente para gerar seus links" in self.html.lower():
- self.error("You have logged in at another place")
+ self.error(_("You have logged in at another place"))
return super(MegaRapidoNet, self).handle_premium(pyfile)
diff --git a/module/plugins/hoster/MegasharesCom.py b/module/plugins/hoster/MegasharesCom.py
index b6692263f..b183b882d 100644
--- a/module/plugins/hoster/MegasharesCom.py
+++ b/module/plugins/hoster/MegasharesCom.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class MegasharesCom(SimpleHoster):
__name__ = "MegasharesCom"
__type__ = "hoster"
- __version__ = "0.29"
+ __version__ = "0.32"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?(d\d{2}\.)?megashares\.com/((index\.php)?\?d\d{2}=|dl/)\w+'
@@ -46,43 +46,40 @@ class MegasharesCom(SimpleHoster):
def handle_free(self, pyfile):
if self.NO_SLOTS_PATTERN in self.html:
- self.retry(wait_time=5 * 60)
+ self.retry(wait=5 * 60)
m = re.search(self.REACTIVATE_PASSPORT_PATTERN, self.html)
- if m:
+ if m is not None:
passport_num = m.group(1)
request_uri = re.search(self.REQUEST_URI_PATTERN, self.html).group(1)
- for _i in xrange(5):
- random_num = re.search(self.REACTIVATE_NUM_PATTERN, self.html).group(1)
+ random_num = re.search(self.REACTIVATE_NUM_PATTERN, self.html).group(1)
- verifyinput = self.captcha.decrypt("http://d01.megashares.com/index.php",
- get={'secgfx': "gfx", 'random_num': random_num})
+ verifyinput = self.captcha.decrypt("http://d01.megashares.com/index.php",
+ get={'secgfx': "gfx", 'random_num': random_num})
- self.log_info(_("Reactivating passport %s: %s %s") % (passport_num, random_num, verifyinput))
+ self.log_info(_("Reactivating passport %s: %s %s") % (passport_num, random_num, verifyinput))
- res = self.load("http://d01.megashares.com%s" % request_uri,
- get={'rs' : "check_passport_renewal",
- 'rsargs[]': verifyinput,
- 'rsargs[]': random_num,
- 'rsargs[]': passport_num,
- 'rsargs[]': "replace_sec_pprenewal",
- 'rsrnd[]' : str(int(time.time() * 1000))})
+ res = self.load("http://d01.megashares.com%s" % request_uri,
+ get={'rs' : "check_passport_renewal",
+ 'rsargs[]': verifyinput,
+ 'rsargs[]': random_num,
+ 'rsargs[]': passport_num,
+ 'rsargs[]': "replace_sec_pprenewal",
+ 'rsrnd[]' : str(int(time.time() * 1000))})
- if 'Thank you for reactivating your passport.' in res:
- self.captcha.correct()
- self.retry()
- else:
- self.captcha.invalid()
+ if 'Thank you for reactivating your passport' in res:
+ self.captcha.correct()
+ self.restart(premium=True)
else:
- self.fail(_("Failed to reactivate passport"))
+ self.retry_captcha(msg=_("Failed to reactivate passport"))
m = re.search(self.PASSPORT_RENEW_PATTERN, self.html)
- if m:
+ if m is not None:
time = [int(x) for x in m.groups()]
renew = time[0] + (time[1] * 60) + (time[2] * 60)
self.log_debug("Waiting %d seconds for a new passport" % renew)
- self.retry(wait_time=renew, reason=_("Passport renewal"))
+ self.retry(wait=renew, msg=_("Passport renewal"))
#: Check traffic left on passport
m = re.search(self.PASSPORT_LEFT_PATTERN, self.html, re.M | re.S)
@@ -94,13 +91,12 @@ class MegasharesCom(SimpleHoster):
self.log_info(_("Data left: %s %s (%d MB needed)") % (m.group(2), m.group(3), self.pyfile.size / 1048576))
if not data_left:
- self.retry(wait_time=600, reason=_("Passport renewal"))
+ self.retry(wait=600, msg=_("Passport renewal"))
self.handle_download(False)
def handle_download(self, premium=False):
- #: Find download link
m = re.search(self.LINK_PATTERN % (1 if premium else 2), self.html)
msg = _('%s download URL' % ('Premium' if premium else 'Free'))
if m is None:
diff --git a/module/plugins/hoster/MultishareCz.py b/module/plugins/hoster/MultishareCz.py
index 6b69fa9c2..1124dadce 100644
--- a/module/plugins/hoster/MultishareCz.py
+++ b/module/plugins/hoster/MultishareCz.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class MultishareCz(SimpleHoster):
__name__ = "MultishareCz"
__type__ = "hoster"
- __version__ = "0.42"
+ __version__ = "0.43"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?multishare\.cz/stahnout/(?P<ID>\d+)'
@@ -42,7 +42,7 @@ class MultishareCz(SimpleHoster):
self.check_info()
- if not self.check_traffic_left():
+ if not self.check_traffic():
self.fail(_("Not enough credit left to download file"))
self.download("http://dl%d.mms.multishare.cz/html/mms_process.php" % round(random.random() * 10000 * random.random()),
diff --git a/module/plugins/hoster/MyfastfileCom.py b/module/plugins/hoster/MyfastfileCom.py
index bbd678ba0..ff28d5dfd 100644
--- a/module/plugins/hoster/MyfastfileCom.py
+++ b/module/plugins/hoster/MyfastfileCom.py
@@ -9,7 +9,7 @@ from module.plugins.internal.MultiHoster import MultiHoster, create_getInfo
class MyfastfileCom(MultiHoster):
__name__ = "MyfastfileCom"
__type__ = "hoster"
- __version__ = "0.10"
+ __version__ = "0.11"
__status__ = "testing"
__pattern__ = r'http://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/dl/'
@@ -27,7 +27,8 @@ class MyfastfileCom(MultiHoster):
def handle_premium(self, pyfile):
self.html = self.load('http://myfastfile.com/api.php',
- get={'user': self.user, 'pass': self.account.get_info(self.user)['login']['password'],
+ get={'user': self.account.user,
+ 'pass': self.account.get_login('password'),
'link': pyfile.url})
self.log_debug("JSON data: " + self.html)
diff --git a/module/plugins/hoster/MystoreTo.py b/module/plugins/hoster/MystoreTo.py
index e4432f491..b23ca10bd 100644
--- a/module/plugins/hoster/MystoreTo.py
+++ b/module/plugins/hoster/MystoreTo.py
@@ -19,7 +19,7 @@ class MystoreTo(SimpleHoster):
__description__ = """Mystore.to hoster plugin"""
__license__ = "GPLv3"
- __authors__ = [("zapp-brannigan", "")]
+ __authors__ = [("zapp-brannigan", "fuerst.reinje@web.de")]
NAME_PATTERN = r'<h1>(?P<N>.+?)<'
diff --git a/module/plugins/hoster/NarodRu.py b/module/plugins/hoster/NarodRu.py
index b0d4a4960..bea04c9cd 100644
--- a/module/plugins/hoster/NarodRu.py
+++ b/module/plugins/hoster/NarodRu.py
@@ -34,33 +34,25 @@ class NarodRu(SimpleHoster):
def handle_free(self, pyfile):
- for _i in xrange(5):
- self.html = self.load('http://narod.ru/disk/getcapchaxml/?rnd=%d' % int(random.random() * 777))
+ self.html = self.load('http://narod.ru/disk/getcapchaxml/?rnd=%d' % int(random.random() * 777))
- m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m is None:
- self.error(_("Captcha"))
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m is None:
+ self.error(_("Captcha"))
- post_data = {'action': "sendcapcha"}
- captcha_url, post_data['key'] = m.groups()
- post_data['rep'] = self.captcha.decrypt(captcha_url)
+ post_data = {'action': "sendcapcha"}
+ captcha_url, post_data['key'] = m.groups()
+ post_data['rep'] = self.captcha.decrypt(captcha_url)
- self.html = self.load(pyfile.url, post=post_data)
+ self.html = self.load(pyfile.url, post=post_data)
- m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m:
- self.link = urlparse.urljoin("http://narod.ru", m.group(1))
- self.captcha.correct()
- break
+ m = re.search(self.LINK_FREE_PATTERN, self.html)
+ if m is not None:
+ self.captcha.correct()
+ self.link = urlparse.urljoin("http://narod.ru/", m.group(1))
- elif u'<b class="error-msg"><strong>ОшОблОсь?</strong>' in self.html:
- self.captcha.invalid()
-
- else:
- self.error(_("Download link"))
-
- else:
- self.fail(_("No valid captcha code entered"))
+ elif u'<b class="error-msg"><strong>ОшОблОсь?</strong>' in self.html:
+ self.retry_captcha()
getInfo = create_getInfo(NarodRu)
diff --git a/module/plugins/hoster/NoPremiumPl.py b/module/plugins/hoster/NoPremiumPl.py
index 9e2a5a93c..8657d4527 100644
--- a/module/plugins/hoster/NoPremiumPl.py
+++ b/module/plugins/hoster/NoPremiumPl.py
@@ -7,7 +7,7 @@ from module.plugins.internal.MultiHoster import MultiHoster
class NoPremiumPl(MultiHoster):
__name__ = "NoPremiumPl"
__type__ = "hoster"
- __version__ = "0.04"
+ __version__ = "0.05"
__status__ = "testing"
__pattern__ = r'https?://direct\.nopremium\.pl.+'
@@ -39,7 +39,7 @@ class NoPremiumPl(MultiHoster):
def prepare(self):
super(NoPremiumPl, self).prepare()
- data = self.account.get_data(self.user)
+ data = self.account.get_data()
self.usr = data['usr']
self.pwd = data['pwd']
@@ -66,14 +66,14 @@ class NoPremiumPl(MultiHoster):
data = self.run_file_query(pyfile.url, 'fileinfo')
except Exception:
- self.log_debug("runFileQuery error")
+ self.log_debug("Query error #1")
self.temp_offline()
try:
parsed = json_loads(data)
except Exception:
- self.log_debug("loads error")
+ self.log_debug("Data not found")
self.temp_offline()
self.log_debug(parsed)
@@ -84,10 +84,8 @@ class NoPremiumPl(MultiHoster):
self.fail(self.ERROR_CODES[parsed['errno']] % self.__name__)
else:
#: Error code isn't yet added to plugin
- self.fail(
- parsed['errstring']
- or _("Unknown error (code: %s)") % parsed['errno']
- )
+ self.fail(parsed['errstring'] or
+ _("Unknown error (code: %s)") % parsed['errno'])
if "sdownload" in parsed:
if parsed['sdownload'] == "1":
@@ -102,5 +100,5 @@ class NoPremiumPl(MultiHoster):
self.link = self.run_file_query(pyfile.url, 'filedownload')
except Exception:
- self.log_debug("runFileQuery error #2")
+ self.log_debug("Query error #2")
self.temp_offline()
diff --git a/module/plugins/hoster/NosuploadCom.py b/module/plugins/hoster/NosuploadCom.py
index 7de26f3fb..45521eebf 100644
--- a/module/plugins/hoster/NosuploadCom.py
+++ b/module/plugins/hoster/NosuploadCom.py
@@ -25,18 +25,18 @@ class NosuploadCom(XFSHoster):
def get_download_link(self):
- #: stage1: press the "Free Download" button
+ #: Stage1: press the "Free Download" button
data = self.get_post_parameters()
self.html = self.load(self.pyfile.url, post=data)
- #: stage2: wait some time and press the "Download File" button
+ #: Stage2: wait some time and press the "Download File" button
data = self.get_post_parameters()
wait_time = re.search(self.WAIT_PATTERN, self.html, re.M | re.S).group(1)
self.log_debug("Hoster told us to wait %s seconds" % wait_time)
self.wait(wait_time)
self.html = self.load(self.pyfile.url, post=data)
- #: stage3: get the download link
+ #: Stage3: get the download link
return re.search(self.LINK_PATTERN, self.html, re.S).group(1)
diff --git a/module/plugins/hoster/NowDownloadSx.py b/module/plugins/hoster/NowDownloadSx.py
index 876a7bcb5..73b0efeaa 100644
--- a/module/plugins/hoster/NowDownloadSx.py
+++ b/module/plugins/hoster/NowDownloadSx.py
@@ -3,7 +3,6 @@
import re
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-from module.utils import fixup
class NowDownloadSx(SimpleHoster):
@@ -29,7 +28,7 @@ class NowDownloadSx(SimpleHoster):
WAIT_PATTERN = r'\.countdown\(\{until: \+(\d+),'
LINK_FREE_PATTERN = r'(http://s\d+(?:\.coolcdn\.info|\.mighycdndelivery\.com)/nowdownload/.+?)["\']'
- NAME_REPLACEMENTS = [("&#?\w+;", fixup), (r'<.*?>', '')]
+ NAME_REPLACEMENTS = [(r'<.*?>', '')]
def setup(self):
@@ -45,7 +44,7 @@ class NowDownloadSx(SimpleHoster):
self.error()
m = re.search(self.WAIT_PATTERN, self.html)
- if m:
+ if m is not None:
wait = int(m.group(1))
else:
wait = 60
@@ -57,10 +56,8 @@ class NowDownloadSx(SimpleHoster):
self.html = self.load(baseurl + str(continuelink.group(1)))
m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m is None:
- self.error(_("Download link not found"))
-
- self.link = m.group(1)
+ if m is not None:
+ self.link = m.group(1)
getInfo = create_getInfo(NowDownloadSx)
diff --git a/module/plugins/hoster/NowVideoSx.py b/module/plugins/hoster/NowVideoSx.py
index c1f369f2a..b919d74ab 100644
--- a/module/plugins/hoster/NowVideoSx.py
+++ b/module/plugins/hoster/NowVideoSx.py
@@ -37,10 +37,8 @@ class NowVideoSx(SimpleHoster):
self.html = self.load("http://www.nowvideo.sx/mobile/video.php", get={'id': self.info['pattern']['ID']})
m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m is None:
- self.error(_("Free download link not found"))
-
- self.link = m.group(1)
+ if m is not None:
+ self.link = m.group(1)
getInfo = create_getInfo(NowVideoSx)
diff --git a/module/plugins/hoster/OboomCom.py b/module/plugins/hoster/OboomCom.py
index 8420c6f02..77cf6b68f 100644
--- a/module/plugins/hoster/OboomCom.py
+++ b/module/plugins/hoster/OboomCom.py
@@ -13,7 +13,7 @@ from module.plugins.captcha.ReCaptcha import ReCaptcha
class OboomCom(Hoster):
__name__ = "OboomCom"
__type__ = "hoster"
- __version__ = "0.36"
+ __version__ = "0.38"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?oboom\.com/(?:#(?:id=|/)?)?(?P<ID>\w{8})'
@@ -58,7 +58,7 @@ class OboomCom(Hoster):
def get_session_token(self):
if self.premium:
- accountInfo = self.account.get_data(self.user, True)
+ accountInfo = self.account.get_data()
if "session" in accountInfo:
self.session_token = accountInfo['session']
else:
@@ -74,41 +74,36 @@ class OboomCom(Hoster):
def solve_captcha(self):
recaptcha = ReCaptcha(self)
+ response, challenge = recaptcha.challenge(self.RECAPTCHA_KEY)
- for _i in xrange(5):
- response, challenge = recaptcha.challenge(self.RECAPTCHA_KEY)
- apiUrl = "http://www.oboom.com/1.0/download/ticket"
- params = {'recaptcha_challenge_field': challenge,
- 'recaptcha_response_field': response,
- 'download_id': self.file_id,
- 'token': self.session_token}
- result = self.load_url(apiUrl, params)
+ apiUrl = "http://www.oboom.com/1.0/download/ticket"
+ params = {'recaptcha_challenge_field': challenge,
+ 'recaptcha_response_field': response,
+ 'download_id': self.file_id,
+ 'token': self.session_token}
- if result[0] == 200:
- self.download_token = result[1]
- self.download_auth = result[2]
- self.captcha.correct()
- self.wait(30)
- break
-
- elif result[0] == 400:
- if result[1] == "incorrect-captcha-sol":
- self.captcha.invalid()
- elif result[1] == "captcha-timeout":
- self.captcha.invalid()
- elif result[1] == "forbidden":
- self.retry(5, 15 * 60, _("Service unavailable"))
-
- elif result[0] == 403:
+ result = self.load_url(apiUrl, params)
+
+ if result[0] == 200:
+ self.download_token = result[1]
+ self.download_auth = result[2]
+ self.captcha.correct()
+ self.wait(30)
+
+ else:
+ if result[0] == 403:
if result[1] == -1: #: Another download is running
self.set_wait(15 * 60)
else:
self.set_wait(result[1], True)
+
self.wait()
self.retry(5)
- else:
- self.captcha.invalid()
- self.fail(_("Received invalid captcha 5 times"))
+
+ elif result[0] == 400 and result[1] == "forbidden":
+ self.retry(5, 15 * 60, _("Service unavailable"))
+
+ self.retry_captcha()
def get_fileInfo(self, token, fileId):
@@ -141,6 +136,6 @@ class OboomCom(Hoster):
self.download_domain = result[1]
self.download_ticket = result[2]
elif result[0] == 421:
- self.retry(wait_time=result[2] + 60, reason=_("Connection limit exceeded"))
+ self.retry(wait=result[2] + 60, msg=_("Connection limit exceeded"))
else:
self.fail(_("Could not retrieve download ticket. Error code: %s") % result[0])
diff --git a/module/plugins/hoster/OneFichierCom.py b/module/plugins/hoster/OneFichierCom.py
index c564dc677..f525e5b33 100644
--- a/module/plugins/hoster/OneFichierCom.py
+++ b/module/plugins/hoster/OneFichierCom.py
@@ -2,13 +2,14 @@
import re
+from module.network.RequestFactory import getURL as get_url
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class OneFichierCom(SimpleHoster):
__name__ = "OneFichierCom"
__type__ = "hoster"
- __version__ = "0.86"
+ __version__ = "0.90"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(?:(?P<ID1>\w+)\.)?(?P<HOST>1fichier\.com|alterupload\.com|cjoint\.net|d(es)?fichiers\.com|dl4free\.com|megadl\.fr|mesfichiers\.org|piecejointe\.net|pjointe\.com|tenvoi\.com)(?:/\?(?P<ID2>\w+))?'
@@ -28,7 +29,9 @@ class OneFichierCom(SimpleHoster):
COOKIES = [("1fichier.com", "LG", "en")]
- NAME_PATTERN = r'>FileName :</td>\s*<td.*>(?P<N>.+?)<'
+ DIRECT_LINK = True
+
+ NAME_PATTERN = r'>File\s*Name :</td>\s*<td.*>(?P<N>.+?)<'
SIZE_PATTERN = r'>Size :</td>\s*<td.*>(?P<S>[\d.,]+) (?P<U>[\w^_]+)'
OFFLINE_PATTERN = r'File not found !\s*<'
@@ -40,12 +43,66 @@ class OneFichierCom(SimpleHoster):
self.resume_download = True
+ @classmethod
+ def get_info(cls, url="", html=""):
+ redirect = url
+ for i in xrange(10):
+ try:
+ headers = dict(re.findall(r"(?P<name>.+?): (?P<value>.+?)\r?\n", get_url(redirect, just_header=True).lower()))
+ if 'location' in headers and headers['location']:
+ redirect = headers['location']
+ else:
+ if 'content-type' in headers and headers['content-type'] == "application/octet-stream":
+ if "filename=" in headers.get('content-disposition'):
+ name = dict(_i.split("=") for _i in map(str.strip, headers['content-disposition'].split(";"))[1:])['filename'].strip("\"'")
+ else:
+ name = url
+
+ info = {'name' : name,
+ 'size' : long(headers.get('content-length')),
+ 'status': 3,
+ 'url' : url}
+
+ else:
+ info = super(OneFichierCom, cls).get_info(url, html)
+
+ break
+
+ except Exception, e:
+ info = {'status' : 8,
+ 'error' : e.message}
+
+ else:
+ info = {'status' : 8,
+ 'error' : _("Too many redirects")}
+
+ return info
+
+
+ def handle_direct(self, pyfile):
+ redirect = pyfile.url
+ for i in xrange(self.get_config("maxredirs", plugin="UserAgentSwitcher")):
+
+ headers = self.load(redirect, just_header=True)
+ if 'location' in headers and headers['location']:
+ self.log_debug("Redirect #%d to: %s" % (i, redirect))
+ redirect = headers['location']
+ else:
+ if 'content-type' in headers and headers['content-type'] == "application/octet-stream":
+ self.link = pyfile.url
+ break
+ else:
+ self.fail(_("Too many redirects"))
+
+
def handle_free(self, pyfile):
+ self.check_errors()
+
id = self.info['pattern']['ID1'] or self.info['pattern']['ID2']
url, inputs = self.parse_html_form('action="https://1fichier.com/\?%s' % id)
if not url:
- self.fail(_("Download link not found"))
+ return
if "pass" in inputs:
inputs['pass'] = self.get_password()
diff --git a/module/plugins/hoster/OpenloadIo.py b/module/plugins/hoster/OpenloadIo.py
index c46462344..6213a9c09 100644
--- a/module/plugins/hoster/OpenloadIo.py
+++ b/module/plugins/hoster/OpenloadIo.py
@@ -1,31 +1,74 @@
# -*- coding: utf-8 -*-
+import json
+import re
+
+from module.network.RequestFactory import getURL
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class OpenloadIo(SimpleHoster):
__name__ = "OpenloadIo"
__type__ = "hoster"
- __version__ = "0.04"
+ __version__ = "0.07"
__status__ = "testing"
- __pattern__ = r'https?://(?:www\.)?openload\.io/f/[\w_-]{11}'
+ __pattern__ = r'https?://(?:www\.)?openload\.(?:co|io)/f/([\w-_]+)'
- __description__ = """Openload.io hoster plugin"""
+ __description__ = """Openload.co hoster plugin"""
__license__ = "GPLv3"
__authors__ = [(None, None)]
- NAME_PATTERN = r'<span id="filename">(?P<N>.+?)</'
- SIZE_PATTERN = r'<span class="count">(?P<S>[\d.,]+) (?P<U>[\w^_]+)<'
- OFFLINE_PATTERN = r">(We can't find the file you are looking for)"
+ # The API reference, that this implementation uses is available at https://openload.co/api
+ API_URL = 'https://api.openload.co/1'
+
+ _FILE_ID_PATTERN = '/f/([\w-_]+)'
+
+ _DOWNLOAD_TICKET_URI_PATTERN = '/file/dlticket?file={0}'
+ _DOWNLOAD_FILE_URI_PATTERN = '/file/dl?file={0}&ticket={1}'
+ _FILE_INFO_URI_PATTERN = '/file/info?file={0}'
+
+
+ @classmethod
+ def _load_json(cls, uri):
+ return json.loads(getURL(cls.API_URL + uri))
+
+
+ @classmethod
+ def get_info(cls, url="", html=""):
+ file_id = re.findall(cls._FILE_ID_PATTERN, url, re.I)
+ if not file_id:
+ return super(OpenloadIo, cls).get_info(url)
- LINK_FREE_PATTERN = r'id="real\w*download"><a href="(https?://[\w\.]+\.openload\.io/dl/.*?)"'
+ file_id = file_id[0]
+ info_json = cls._load_json(cls._FILE_INFO_URI_PATTERN.format(file_id))
+ file_info = info_json['result'][file_id]
+
+ return {'name' : file_info['name'],
+ 'size' : file_info['size'],
+ 'status': 3 if url.strip() else 8,
+ 'url' : url}
def setup(self):
- self.multiDL = True
+ self.multiDL = True
self.chunk_limit = 1
+ def handle_free(self, pyfile):
+ # If the link is being handled here, then it matches the file_id_pattern,
+ # therefore, we can call [0] safely.
+ file_id = re.findall(self._FILE_ID_PATTERN, pyfile.url, re.I)[0]
+
+ ticket_json = self._load_json(self._DOWNLOAD_TICKET_URI_PATTERN.format(file_id))
+
+ self.wait(ticket_json['result']['wait_time'])
+
+ ticket = ticket_json['result']['ticket']
+
+ download_json = self._load_json(self._DOWNLOAD_FILE_URI_PATTERN.format(file_id, ticket))
+ self.link = download_json['result']['url']
+
+
getInfo = create_getInfo(OpenloadIo)
diff --git a/module/plugins/hoster/OverLoadMe.py b/module/plugins/hoster/OverLoadMe.py
index 0b5bab6a5..a2bbfc701 100644
--- a/module/plugins/hoster/OverLoadMe.py
+++ b/module/plugins/hoster/OverLoadMe.py
@@ -11,7 +11,7 @@ from module.utils import parseFileSize as parse_size
class OverLoadMe(MultiHoster):
__name__ = "OverLoadMe"
__type__ = "hoster"
- __version__ = "0.13"
+ __version__ = "0.14"
__status__ = "testing"
__pattern__ = r'https?://.*overload\.me/.+'
@@ -28,7 +28,7 @@ class OverLoadMe(MultiHoster):
def handle_premium(self, pyfile):
- data = self.account.get_data(self.user)
+ data = self.account.get_data()
page = self.load("https://api.over-load.me/getdownload.php",
get={'auth': data['password'],
'link': pyfile.url})
diff --git a/module/plugins/hoster/PornhostCom.py b/module/plugins/hoster/PornhostCom.py
index 8b0a80c7f..e9d199a2e 100644
--- a/module/plugins/hoster/PornhostCom.py
+++ b/module/plugins/hoster/PornhostCom.py
@@ -49,7 +49,7 @@ class PornhostCom(Hoster):
url = re.search(r'"http://file\d+\.pornhost\.com/\d+/.*?"',
self.html) #@TODO: fix this one since it doesn't match
- return url.group(1).strip()
+ return url.group(1)
def get_file_name(self):
diff --git a/module/plugins/hoster/PornhubCom.py b/module/plugins/hoster/PornhubCom.py
index 5345566a1..ce6badedd 100644
--- a/module/plugins/hoster/PornhubCom.py
+++ b/module/plugins/hoster/PornhubCom.py
@@ -67,7 +67,7 @@ class PornhubCom(Hoster):
self.download_html()
m = re.search(r'<title.+?>([^<]+) - ', self.html)
- if m:
+ if m is not None:
name = m.group(1)
else:
matches = re.findall('<h1>(.*?)</h1>', self.html)
diff --git a/module/plugins/hoster/PremiumTo.py b/module/plugins/hoster/PremiumTo.py
index ec02bb12d..8186c6224 100644
--- a/module/plugins/hoster/PremiumTo.py
+++ b/module/plugins/hoster/PremiumTo.py
@@ -11,7 +11,7 @@ from module.utils import fs_encode
class PremiumTo(MultiHoster):
__name__ = "PremiumTo"
__type__ = "hoster"
- __version__ = "0.25"
+ __version__ = "0.26"
__status__ = "testing"
__pattern__ = r'^unmatchable$'
@@ -37,8 +37,8 @@ class PremiumTo(MultiHoster):
disposition=True)
- def check_file(self):
- if self.check_download({'nopremium': "No premium account available"}):
+ def check_download(self):
+ if self.check_file({'nopremium': "No premium account available"}):
self.retry(60, 5 * 60, "No premium account available")
err = ""
@@ -52,7 +52,7 @@ class PremiumTo(MultiHoster):
if err:
self.fail(err)
- return super(PremiumTo, self).check_file()
+ return super(PremiumTo, self).check_download()
getInfo = create_getInfo(PremiumTo)
diff --git a/module/plugins/hoster/PremiumizeMe.py b/module/plugins/hoster/PremiumizeMe.py
index d968eccec..16c252dc1 100644
--- a/module/plugins/hoster/PremiumizeMe.py
+++ b/module/plugins/hoster/PremiumizeMe.py
@@ -7,7 +7,7 @@ from module.plugins.internal.MultiHoster import MultiHoster, create_getInfo
class PremiumizeMe(MultiHoster):
__name__ = "PremiumizeMe"
__type__ = "hoster"
- __version__ = "0.20"
+ __version__ = "0.21"
__status__ = "testing"
__pattern__ = r'^unmatchable$' #: Since we want to allow the user to specify the list of hoster to use we let MultiHoster.activate
@@ -44,11 +44,17 @@ class PremiumizeMe(MultiHoster):
status = data['status']
if status == 200:
+ if 'filename' in data['result']:
+ self.pyfile.name = data['result']['filename']
+
+ if 'filesize' in data['result']:
+ self.pyfile.size = data['result']['filesize']
+
self.link = data['result']['location']
return
elif status == 400:
- self.fail(_("Invalid link"))
+ self.fail(_("Invalid url"))
elif status == 404:
self.offline()
diff --git a/module/plugins/hoster/QuickshareCz.py b/module/plugins/hoster/QuickshareCz.py
index 4311a82aa..62240667c 100644
--- a/module/plugins/hoster/QuickshareCz.py
+++ b/module/plugins/hoster/QuickshareCz.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class QuickshareCz(SimpleHoster):
__name__ = "QuickshareCz"
__type__ = "hoster"
- __version__ = "0.57"
+ __version__ = "0.58"
__status__ = "testing"
__pattern__ = r'http://(?:[^/]*\.)?quickshare\.cz/stahnout-soubor/.+'
@@ -39,7 +39,7 @@ class QuickshareCz(SimpleHoster):
if 'UU_prihlasen' in self.jsvars:
if self.jsvars['UU_prihlasen'] == "0":
self.log_warning(_("User not logged in"))
- self.relogin(self.user)
+ self.relogin()
self.retry()
elif float(self.jsvars['UU_kredit']) < float(self.jsvars['kredit_odecet']):
self.log_warning(_("Not enough credit left"))
@@ -50,7 +50,7 @@ class QuickshareCz(SimpleHoster):
else:
self.handle_free(pyfile)
- if self.check_download({'error': re.compile(r"\AChyba!")}, max_size=100):
+ if self.check_file({'error': re.compile(r"\AChyba!")}, max_size=100):
self.fail(_("File not m or plugin defect"))
@@ -69,12 +69,12 @@ class QuickshareCz(SimpleHoster):
if m is None:
self.fail(_("File not found"))
- self.link = m.group(1).rstrip() #@TODO: Remove .rstrip() in 0.4.10
+ self.link = m.group(1)
self.log_debug("FREE URL2:" + self.link)
#: Check errors
m = re.search(r'/chyba/(\d+)', self.link)
- if m:
+ if m is not None:
if m.group(1) == "1":
self.retry(60, 2 * 60, "This IP is already downloading")
elif m.group(1) == "2":
diff --git a/module/plugins/hoster/RPNetBiz.py b/module/plugins/hoster/RPNetBiz.py
index 62e6bee4e..cbe3e2a52 100644
--- a/module/plugins/hoster/RPNetBiz.py
+++ b/module/plugins/hoster/RPNetBiz.py
@@ -28,7 +28,6 @@ class RPNetBiz(MultiHoster):
def handle_premium(self, pyfile):
user, info = self.account.select()
- #: Get the download link
res = self.load("https://premium.rpnet.biz/client_api.php",
get={'username': user,
'password': info['login']['password'],
@@ -44,10 +43,10 @@ class RPNetBiz(MultiHoster):
self.wait(30) #: Wait for 30 seconds
#: Lets query the server again asking for the status on the link,
#: We need to keep doing this until we reach 100
- max_tries = 30
+ attemps = 30
my_try = 0
- while (my_try <= max_tries):
- self.log_debug("Try: %d ; Max Tries: %d" % (my_try, max_tries))
+ while (my_try <= attemps):
+ self.log_debug("Try: %d ; Max Tries: %d" % (my_try, attemps))
res = self.load("https://premium.rpnet.biz/client_api.php",
get={'username': user,
'password': info['login']['password'],
@@ -66,7 +65,7 @@ class RPNetBiz(MultiHoster):
self.wait(30)
my_try += 1
- if my_try > max_tries: #: We went over the limit!
+ if my_try > attemps: #: We went over the limit!
self.fail(_("Waited for about 15 minutes for download to finish but failed"))
if 'generated' in link_status:
diff --git a/module/plugins/hoster/RapideoPl.py b/module/plugins/hoster/RapideoPl.py
index e1a0d278f..a43440e61 100644
--- a/module/plugins/hoster/RapideoPl.py
+++ b/module/plugins/hoster/RapideoPl.py
@@ -7,7 +7,7 @@ from module.plugins.internal.MultiHoster import MultiHoster
class RapideoPl(MultiHoster):
__name__ = "RapideoPl"
__type__ = "hoster"
- __version__ = "0.04"
+ __version__ = "0.05"
__status__ = "testing"
__pattern__ = r'^unmatchable$'
@@ -39,7 +39,7 @@ class RapideoPl(MultiHoster):
def prepare(self):
super(RapideoPl, self).prepare()
- data = self.account.get_data(self.user)
+ data = self.account.get_data()
self.usr = data['usr']
self.pwd = data['pwd']
@@ -84,10 +84,8 @@ class RapideoPl(MultiHoster):
self.fail(self.ERROR_CODES[parsed['errno']] % self.__name__)
else:
#: Error code isn't yet added to plugin
- self.fail(
- parsed['errstring']
- or _("Unknown error (code: %s)") % parsed['errno']
- )
+ self.fail(parsed['errstring'] or
+ _("Unknown error (code: %s)") % parsed['errno'])
if "sdownload" in parsed:
if parsed['sdownload'] == "1":
diff --git a/module/plugins/hoster/RapidgatorNet.py b/module/plugins/hoster/RapidgatorNet.py
index 636ea1bcc..711f33e87 100644
--- a/module/plugins/hoster/RapidgatorNet.py
+++ b/module/plugins/hoster/RapidgatorNet.py
@@ -14,7 +14,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class RapidgatorNet(SimpleHoster):
__name__ = "RapidgatorNet"
__type__ = "hoster"
- __version__ = "0.35"
+ __version__ = "0.36"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?(rapidgator\.net|rg\.to)/file/\w+'
@@ -51,7 +51,7 @@ class RapidgatorNet(SimpleHoster):
def setup(self):
if self.account:
- self.sid = self.account.get_data(self.user).get('sid', None)
+ self.sid = self.account.get_data('sid')
else:
self.sid = None
@@ -81,12 +81,12 @@ class RapidgatorNet(SimpleHoster):
return json['response']
elif status == 423:
- self.account.empty(self.user)
+ self.account.empty()
self.retry()
else:
- self.account.relogin(self.user)
- self.retry(wait_time=60)
+ self.account.relogin()
+ self.retry(wait=60)
def handle_premium(self, pyfile):
@@ -122,29 +122,25 @@ class RapidgatorNet(SimpleHoster):
url = "http://rapidgator.net%s" % jsvars.get('captchaUrl', '/download/captcha')
self.html = self.load(url)
- for _i in xrange(5):
- m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m:
- self.link = m.group(1)
- break
- else:
- captcha = self.handle_captcha()
+ m = re.search(self.LINK_FREE_PATTERN, self.html)
+ if m is not None:
+ self.link = m.group(1)
+ else:
+ captcha = self.handle_captcha()
- if not captcha:
- self.error(_("Captcha pattern not found"))
+ if not captcha:
+ self.error(_("Captcha pattern not found"))
- response, challenge = captcha.challenge()
+ response, challenge = captcha.challenge()
- self.html = self.load(url, post={'DownloadCaptchaForm[captcha]': "",
- 'adcopy_challenge' : challenge,
- 'adcopy_response' : response})
+ self.html = self.load(url, post={'DownloadCaptchaForm[captcha]': "",
+ 'adcopy_challenge' : challenge,
+ 'adcopy_response' : response})
- if "The verification code is incorrect" in self.html:
- self.captcha.invalid()
- else:
- self.captcha.correct()
- else:
- self.error(_("Download link"))
+ if "The verification code is incorrect" in self.html:
+ self.retry_captcha()
+ else:
+ self.captcha.correct()
def handle_captcha(self):
diff --git a/module/plugins/hoster/RapiduNet.py b/module/plugins/hoster/RapiduNet.py
index 267f41f36..99c877226 100644
--- a/module/plugins/hoster/RapiduNet.py
+++ b/module/plugins/hoster/RapiduNet.py
@@ -20,7 +20,7 @@ class RapiduNet(SimpleHoster):
__description__ = """Rapidu.net hoster plugin"""
__license__ = "GPLv3"
- __authors__ = [("prOq", "")]
+ __authors__ = [("prOq", None)]
COOKIES = [("rapidu.net", "rapidu_lang", "en")]
diff --git a/module/plugins/hoster/RehostTo.py b/module/plugins/hoster/RehostTo.py
index 6f0645e9f..af8ba3fd9 100644
--- a/module/plugins/hoster/RehostTo.py
+++ b/module/plugins/hoster/RehostTo.py
@@ -8,7 +8,7 @@ from module.plugins.internal.MultiHoster import MultiHoster, create_getInfo
class RehostTo(MultiHoster):
__name__ = "RehostTo"
__type__ = "hoster"
- __version__ = "0.23"
+ __version__ = "0.24"
__status__ = "testing"
__pattern__ = r'https?://.*rehost\.to\..+'
@@ -23,7 +23,7 @@ class RehostTo(MultiHoster):
def handle_premium(self, pyfile):
self.download("http://rehost.to/process_download.php",
get={'user': "cookie",
- 'pass': self.account.get_data(self.user)['session'],
+ 'pass': self.account.get_data('session'),
'dl' : pyfile.url},
disposition=True)
diff --git a/module/plugins/hoster/SendspaceCom.py b/module/plugins/hoster/SendspaceCom.py
index 13dd20b7c..ece048ed9 100644
--- a/module/plugins/hoster/SendspaceCom.py
+++ b/module/plugins/hoster/SendspaceCom.py
@@ -30,32 +30,31 @@ class SendspaceCom(SimpleHoster):
def handle_free(self, pyfile):
- params = {}
- for _i in xrange(3):
- m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m:
- if 'captcha_hash' in params:
- self.captcha.correct()
- self.link = m.group(1)
- break
+ m = re.search(self.LINK_FREE_PATTERN, self.html)
+ if m is not None:
+ self.link = m.group(1)
+ else:
m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m:
- if 'captcha_hash' in params:
- self.captcha.invalid()
+ if m is None:
+ params = {'download': "Regular Download"}
+ else:
captcha_url1 = "http://www.sendspace.com/" + m.group(1)
m = re.search(self.USER_CAPTCHA_PATTERN, self.html)
captcha_url2 = "http://www.sendspace.com/" + m.group(1)
params = {'captcha_hash': m.group(2),
'captcha_submit': 'Verify',
'captcha_answer': self.captcha.decrypt(captcha_url1) + " " + self.captcha.decrypt(captcha_url2)}
- else:
- params = {'download': "Regular Download"}
self.log_debug(params)
+
self.html = self.load(pyfile.url, post=params)
- else:
- self.fail(_("Download link not found"))
+
+ m = re.search(self.LINK_FREE_PATTERN, self.html)
+ if m is None:
+ self.retry_captcha()
+ else:
+ self.link = m.group(1)
getInfo = create_getInfo(SendspaceCom)
diff --git a/module/plugins/hoster/Share4WebCom.py b/module/plugins/hoster/Share4WebCom.py
index 3f128be5e..898e12927 100644
--- a/module/plugins/hoster/Share4WebCom.py
+++ b/module/plugins/hoster/Share4WebCom.py
@@ -7,7 +7,7 @@ from module.plugins.internal.SimpleHoster import create_getInfo
class Share4WebCom(UnibytesCom):
__name__ = "Share4WebCom"
__type__ = "hoster"
- __version__ = "0.12"
+ __version__ = "0.13"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?share4web\.com/get/\w+'
@@ -17,7 +17,7 @@ class Share4WebCom(UnibytesCom):
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- HOSTER_DOMAIN = "share4web.com"
+ PLUGIN_DOMAIN = "share4web.com"
getInfo = create_getInfo(Share4WebCom)
diff --git a/module/plugins/hoster/ShareonlineBiz.py b/module/plugins/hoster/ShareonlineBiz.py
index b5af3ea35..2223068e5 100644
--- a/module/plugins/hoster/ShareonlineBiz.py
+++ b/module/plugins/hoster/ShareonlineBiz.py
@@ -3,7 +3,6 @@
import re
import time
import urllib
-import urlparse
from module.network.RequestFactory import getURL as get_url
from module.plugins.captcha.ReCaptcha import ReCaptcha
@@ -13,7 +12,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class ShareonlineBiz(SimpleHoster):
__name__ = "ShareonlineBiz"
__type__ = "hoster"
- __version__ = "0.55"
+ __version__ = "0.58"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(share-online\.biz|egoshare\.com)/(download\.php\?id=|dl/)(?P<ID>\w+)'
@@ -68,25 +67,20 @@ class ShareonlineBiz(SimpleHoster):
def handle_captcha(self):
recaptcha = ReCaptcha(self)
-
- for _i in xrange(5):
- response, challenge = recaptcha.challenge(self.RECAPTCHA_KEY)
-
- m = re.search(r'var wait=(\d+);', self.html)
- self.set_wait(int(m.group(1)) if m else 30)
-
- res = self.load("%s/free/captcha/%d" % (self.pyfile.url, int(time.time() * 1000)),
- post={'dl_free' : "1",
- 'recaptcha_challenge_field': challenge,
- 'recaptcha_response_field' : response})
- if not res == "0":
- self.captcha.correct()
- return res
- else:
- self.captcha.invalid()
+ response, challenge = recaptcha.challenge(self.RECAPTCHA_KEY)
+
+ m = re.search(r'var wait=(\d+);', self.html)
+ self.set_wait(int(m.group(1)) if m else 30)
+
+ res = self.load("%s/free/captcha/%d" % (self.pyfile.url, int(time.time() * 1000)),
+ post={'dl_free' : "1",
+ 'recaptcha_challenge_field': challenge,
+ 'recaptcha_response_field' : response})
+ if res != "0":
+ self.captcha.correct()
+ return res
else:
- self.captcha.invalid()
- self.fail(_("No valid captcha solution received"))
+ self.retry_captcha()
def handle_free(self, pyfile):
@@ -101,30 +95,28 @@ class ShareonlineBiz(SimpleHoster):
self.link = res.decode('base64')
if not self.link.startswith("http://"):
- self.error(_("Wrong download url"))
+ self.error(_("Invalid url"))
self.wait()
- def check_file(self):
- check = self.check_download({'cookie': re.compile(r'<div id="dl_failure"'),
+ def check_download(self):
+ check = self.check_file({'cookie': re.compile(r'<div id="dl_failure"'),
'fail' : re.compile(r"<title>Share-Online")})
if check == "cookie":
- self.captcha.invalid()
- self.retry(5, 60, _("Cookie failure"))
+ self.retry_captcha(5, 60, _("Cookie failure"))
elif check == "fail":
- self.captcha.invalid()
- self.retry(5, 5 * 60, _("Download failed"))
+ self.retry_captcha(5, 5 * 60, _("Download failed"))
- return super(ShareonlineBiz, self).check_file()
+ return super(ShareonlineBiz, self).check_download()
def handle_premium(self, pyfile): #: Should be working better loading (account) api internally
html = self.load("https://api.share-online.biz/account.php",
- get={'username': self.user,
- 'password': self.account.get_info(self.user)['login']['password'],
+ get={'username': self.account.user,
+ 'password': self.account.get_login('password'),
'act' : "download",
'lid' : self.info['fileid']})
@@ -136,7 +128,7 @@ class ShareonlineBiz(SimpleHoster):
self.log_debug(dlinfo)
- if not dlinfo['status'] == "online":
+ if dlinfo['status'] != "online":
self.offline()
else:
pyfile.name = dlinfo['name']
@@ -160,6 +152,7 @@ class ShareonlineBiz(SimpleHoster):
try:
self.log_error(errmsg, re.search(self.ERROR_PATTERN, self.html).group(1))
+
except Exception:
self.log_error(_("Unknown error occurred"), errmsg)
@@ -170,18 +163,18 @@ class ShareonlineBiz(SimpleHoster):
self.fail(_("Premium account needed"))
elif errmsg in ("expired", "server"):
- self.retry(wait_time=600, reason=errmsg)
+ self.retry(wait=600, msg=errmsg)
elif errmsg == "full":
self.retry(10, 600, _("Server is full"))
elif 'slot' in errmsg:
- self.wantReconnect = True
- self.retry(24, 3600, errmsg)
+ self.wait(3600, reconnect=True)
+ self.restart(errmsg, premium=True)
else:
- self.wantReconnect = True
- self.retry(wait_time=60, reason=errmsg)
+ self.wait(60, reconnect=True)
+ self.restart(errmsg, premium=True)
getInfo = create_getInfo(ShareonlineBiz)
diff --git a/module/plugins/hoster/ShareplaceCom.py b/module/plugins/hoster/ShareplaceCom.py
index 11aef0c90..6b4cfed2b 100644
--- a/module/plugins/hoster/ShareplaceCom.py
+++ b/module/plugins/hoster/ShareplaceCom.py
@@ -40,7 +40,7 @@ class ShareplaceCom(Hoster):
#: var zzipitime = 15
m = re.search(r'var zzipitime = (\d+);', self.html)
- if m:
+ if m is not None:
sec = int(m.group(1))
else:
sec = 0
diff --git a/module/plugins/hoster/SimplyPremiumCom.py b/module/plugins/hoster/SimplyPremiumCom.py
index be1578bfb..8e3890fb8 100644
--- a/module/plugins/hoster/SimplyPremiumCom.py
+++ b/module/plugins/hoster/SimplyPremiumCom.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import seconds_to_midnight
class SimplyPremiumCom(MultiHoster):
__name__ = "SimplyPremiumCom"
__type__ = "hoster"
- __version__ = "0.10"
+ __version__ = "0.12"
__status__ = "testing"
__pattern__ = r'https?://.+simply-premium\.com'
@@ -28,7 +28,7 @@ class SimplyPremiumCom(MultiHoster):
def check_errors(self):
if '<valid>0</valid>' in self.html or (
"You are not allowed to download from this host" in self.html and self.premium):
- self.account.relogin(self.user)
+ self.account.relogin()
self.retry()
elif "NOTFOUND" in self.html:
@@ -40,7 +40,7 @@ class SimplyPremiumCom(MultiHoster):
elif "trafficlimit" in self.html:
self.log_warning(_("Reached daily limit for this host"))
- self.retry(wait_time=seconds_to_midnight(gmt=2), reason="Daily limit for this host reached")
+ self.retry(wait=seconds_to_midnight(), msg="Daily limit for this host reached")
elif "hostererror" in self.html:
self.log_warning(_("Hoster temporarily unavailable, waiting 1 minute and retry"))
diff --git a/module/plugins/hoster/SimplydebridCom.py b/module/plugins/hoster/SimplydebridCom.py
index 829609228..d26439d68 100644
--- a/module/plugins/hoster/SimplydebridCom.py
+++ b/module/plugins/hoster/SimplydebridCom.py
@@ -8,7 +8,7 @@ from module.plugins.internal.MultiHoster import MultiHoster, create_getInfo, rep
class SimplydebridCom(MultiHoster):
__name__ = "SimplydebridCom"
__type__ = "hoster"
- __version__ = "0.20"
+ __version__ = "0.21"
__status__ = "testing"
__pattern__ = r'http://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/sd\.php'
@@ -41,11 +41,11 @@ class SimplydebridCom(MultiHoster):
self.wait(5)
- def check_file(self):
- if self.check_download({'error': "No address associated with hostname"}):
+ def check_download(self):
+ if self.check_file({'error': "No address associated with hostname"}):
self.retry(24, 3 * 60, _("Bad file downloaded"))
- return super(SimplydebridCom, self).check_file()
+ return super(SimplydebridCom, self).check_download()
getInfo = create_getInfo(SimplydebridCom)
diff --git a/module/plugins/hoster/SizedriveCom.py b/module/plugins/hoster/SizedriveCom.py
index 8bfe46e86..d0db9985b 100644
--- a/module/plugins/hoster/SizedriveCom.py
+++ b/module/plugins/hoster/SizedriveCom.py
@@ -35,7 +35,7 @@ class SizedriveCom(SimpleHoster):
post={'id': self.info['pattern']['ID']})
m = re.search(r'<span id="boton_download" ><a href="(.+?)"', self.html)
- if m:
+ if m is not None:
self.link = m.group(1)
diff --git a/module/plugins/hoster/SmoozedCom.py b/module/plugins/hoster/SmoozedCom.py
index 33d098a00..e864bb2c0 100644
--- a/module/plugins/hoster/SmoozedCom.py
+++ b/module/plugins/hoster/SmoozedCom.py
@@ -7,7 +7,7 @@ from module.plugins.internal.MultiHoster import MultiHoster
class SmoozedCom(MultiHoster):
__name__ = "SmoozedCom"
__type__ = "hoster"
- __version__ = "0.08"
+ __version__ = "0.09"
__status__ = "testing"
__pattern__ = r'^unmatchable$' #: Since we want to allow the user to specify the list of hoster to use we let MultiHoster.activate
@@ -16,7 +16,7 @@ class SmoozedCom(MultiHoster):
__description__ = """Smoozed.com hoster plugin"""
__license__ = "GPLv3"
- __authors__ = [("", "")]
+ __authors__ = [(None, None)]
FILE_ERRORS = [("Error", r'{"state":"error"}'),
@@ -36,7 +36,7 @@ class SmoozedCom(MultiHoster):
pyfile.name = ".".join(temp)
#: Check the link
- get_data = {'session_key': self.account.get_data(self.user)['session'],
+ get_data = {'session_key': self.account.get_data('session'),
'url' : pyfile.url}
data = json_loads(self.load("http://www2.smoozed.com/api/check", get=get_data))
diff --git a/module/plugins/hoster/SpeedyshareCom.py b/module/plugins/hoster/SpeedyshareCom.py
index 7d7a60f04..4a71c179d 100644
--- a/module/plugins/hoster/SpeedyshareCom.py
+++ b/module/plugins/hoster/SpeedyshareCom.py
@@ -4,7 +4,6 @@
# http://speedy.sh/ep2qY/Zapp-Brannigan.jpg
import re
-import urlparse
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
diff --git a/module/plugins/hoster/TurbobitNet.py b/module/plugins/hoster/TurbobitNet.py
index d323a214b..d20d1cadd 100644
--- a/module/plugins/hoster/TurbobitNet.py
+++ b/module/plugins/hoster/TurbobitNet.py
@@ -10,13 +10,14 @@ import urllib
from Crypto.Cipher import ARC4
from module.plugins.captcha.ReCaptcha import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp
+from module.plugins.internal.Plugin import timestamp
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class TurbobitNet(SimpleHoster):
__name__ = "TurbobitNet"
__type__ = "hoster"
- __version__ = "0.21"
+ __version__ = "0.22"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?turbobit\.net/(?:download/free/)?(?P<ID>\w+)'
@@ -56,64 +57,64 @@ class TurbobitNet(SimpleHoster):
self.req.http.c.setopt(pycurl.HTTPHEADER, ["X-Requested-With:"])
m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m:
+ if m is not None:
self.link = m.group(1)
def solve_captcha(self):
- for _i in xrange(5):
- m = re.search(self.LIMIT_WAIT_PATTERN, self.html)
- if m:
- wait_time = int(m.group(1))
- self.wait(wait_time, wait_time > 60)
- self.retry()
+ m = re.search(self.LIMIT_WAIT_PATTERN, self.html)
+ if m is not None:
+ wait_time = int(m.group(1))
+ self.wait(wait_time, wait_time > 60)
+ self.retry()
- action, inputs = self.parse_html_form("action='#'")
- if not inputs:
- self.error(_("Captcha form not found"))
- self.log_debug(inputs)
+ action, inputs = self.parse_html_form("action='#'")
+ if not inputs:
+ self.error(_("Captcha form not found"))
- if inputs['captcha_type'] == "recaptcha":
- recaptcha = ReCaptcha(self)
- inputs['recaptcha_response_field'], inputs['recaptcha_challenge_field'] = recaptcha.challenge()
- else:
- m = re.search(self.CAPTCHA_PATTERN, self.html)
- if m is None:
- self.error(_("captcha"))
- captcha_url = m.group(1)
- inputs['captcha_response'] = self.captcha.decrypt(captcha_url)
+ self.log_debug(inputs)
- self.log_debug(inputs)
- self.html = self.load(self.url, post=inputs)
+ if inputs['captcha_type'] == "recaptcha":
+ recaptcha = ReCaptcha(self)
+ inputs['recaptcha_response_field'], inputs['recaptcha_challenge_field'] = recaptcha.challenge()
+ else:
+ m = re.search(self.CAPTCHA_PATTERN, self.html)
+ if m is None:
+ self.error(_("Captcha pattern not found"))
+ captcha_url = m.group(1)
+ inputs['captcha_response'] = self.captcha.decrypt(captcha_url)
- if '<div class="captcha-error">Incorrect, try again!<' in self.html:
- self.captcha.invalid()
- else:
- self.captcha.correct()
- break
+ self.log_debug(inputs)
+
+ self.html = self.load(self.url, post=inputs)
+
+ if '<div class="captcha-error">Incorrect, try again' in self.html:
+ self.retry_captcha()
else:
- self.fail(_("Invalid captcha"))
+ self.captcha.correct()
def get_rt_update(self):
rtUpdate = self.retrieve("rtUpdate")
- if not rtUpdate:
- if self.retrieve("version") is not self.__version__ \
- or int(self.retrieve("timestamp", 0)) + 86400000 < timestamp():
- #: that's right, we are even using jdownloader updates
- rtUpdate = self.load("http://update0.jdownloader.org/pluginstuff/tbupdate.js")
- rtUpdate = self.decrypt(rtUpdate.splitlines()[1])
- #: But we still need to fix the syntax to work with other engines than rhino
- rtUpdate = re.sub(r'for each\(var (\w+) in(\[[^\]]+\])\)\{',
- r'zza=\2;for(var zzi=0;zzi<zza.length;zzi++){\1=zza[zzi];', rtUpdate)
- rtUpdate = re.sub(r"for\((\w+)=", r"for(var \1=", rtUpdate)
-
- self.store("rtUpdate", rtUpdate)
- self.store("timestamp", timestamp())
- self.store("version", self.__version__)
- else:
- self.log_error(_("Unable to download, wait for update..."))
- self.temp_offline()
+ if rtUpdate:
+ return rtUpdate
+
+ if self.retrieve("version") is not self.__version__ or \
+ int(self.retrieve("timestamp", 0)) + 86400000 < timestamp():
+ #: that's right, we are even using jdownloader updates
+ rtUpdate = self.load("http://update0.jdownloader.org/pluginstuff/tbupdate.js")
+ rtUpdate = self.decrypt(rtUpdate.splitlines()[1])
+ #: But we still need to fix the syntax to work with other engines than rhino
+ rtUpdate = re.sub(r'for each\(var (\w+) in(\[[^\]]+\])\)\{',
+ r'zza=\2;for(var zzi=0;zzi<zza.length;zzi++){\1=zza[zzi];', rtUpdate)
+ rtUpdate = re.sub(r"for\((\w+)=", r"for(var \1=", rtUpdate)
+
+ self.store("rtUpdate", rtUpdate)
+ self.store("timestamp", timestamp())
+ self.store("version", self.__version__)
+ else:
+ self.log_error(_("Unable to download, wait for update..."))
+ self.temp_offline()
return rtUpdate
@@ -122,7 +123,7 @@ class TurbobitNet(SimpleHoster):
self.req.http.lastURL = self.url
m = re.search("(/\w+/timeout\.js\?\w+=)([^\"\'<>]+)", self.html)
- if m:
+ if m is not None:
url = "http://turbobit.net%s%s" % m.groups()
else:
url = "http://turbobit.net/files/timeout.js?ver=%s" % "".join(random.choice('0123456789ABCDEF') for _i in xrange(32))
diff --git a/module/plugins/hoster/UlozTo.py b/module/plugins/hoster/UlozTo.py
index b402433a4..cc07770d4 100644
--- a/module/plugins/hoster/UlozTo.py
+++ b/module/plugins/hoster/UlozTo.py
@@ -15,7 +15,7 @@ def convert_decimal_prefix(m):
class UlozTo(SimpleHoster):
__name__ = "UlozTo"
__type__ = "hoster"
- __version__ = "1.13"
+ __version__ = "1.16"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj\.cz|zachowajto\.pl)/(?:live/)?(?P<ID>\w+/[^/?]*)'
@@ -26,8 +26,7 @@ class UlozTo(SimpleHoster):
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- INFO_PATTERN = r'<p>File <strong>(?P<N>[^<]+)</strong> is password protected</p>'
- NAME_PATTERN = r'<title>(?P<N>[^<]+) \| Uloz\.to</title>'
+ NAME_PATTERN = r'(<p>File <strong>|<title>)(?P<N>.+?)(<| \|)'
SIZE_PATTERN = r'<span id="fileSize">.*?(?P<S>[\d.,]+\s[kMG]?B)</span>'
OFFLINE_PATTERN = r'<title>404 - Page not found</title>|<h1 class="h1">File (has been deleted|was banned)</h1>'
@@ -53,7 +52,7 @@ class UlozTo(SimpleHoster):
if not action or not inputs:
self.error(_("Free download form not found"))
- self.log_debug("inputs.keys = " + str(inputs.keys()))
+ self.log_debug("inputs.keys = %s" % inputs.keys())
#: Get and decrypt captcha
if all(key in inputs for key in ("captcha_value", "captcha_id", "captcha_key")):
#: Old version - last seen 9.12.2013
@@ -68,8 +67,10 @@ class UlozTo(SimpleHoster):
#: New version - better to get new parameters (like captcha reload) because of image url - since 6.12.2013
self.log_debug('Using "new" version')
- xapca = self.load("http://www.ulozto.net/reloadXapca.php", get={'rnd': str(int(time.time()))})
- self.log_debug("xapca = " + str(xapca))
+ xapca = self.load("http://www.ulozto.net/reloadXapca.php",
+ get={'rnd': str(int(time.time()))})
+ xapca = xapca.replace('sound":"', 'sound":"http:').replace('image":"', 'image":"http:')
+ self.log_debug("xapca = %s" % xapca)
data = json_loads(xapca)
captcha_value = self.captcha.decrypt(str(data['image']))
@@ -109,7 +110,7 @@ class UlozTo(SimpleHoster):
post={'password': password, 'password_send': 'Send'})
if self.PASSWD_PATTERN in self.html:
- self.fail(_("Incorrect password"))
+ self.fail(_("Wrong password"))
else:
self.fail(_("No password found"))
@@ -119,9 +120,9 @@ class UlozTo(SimpleHoster):
return super(UlozTo, self).check_errors()
- def check_file(self):
- check = self.check_download({
- 'wrong_captcha': re.compile(r'<ul class="error">\s*<li>Error rewriting the text.</li>'),
+ def check_download(self):
+ check = self.check_file({
+ 'wrong_captcha': ">An error ocurred while verifying the user",
'offline' : re.compile(self.OFFLINE_PATTERN),
'passwd' : self.PASSWD_PATTERN,
'server_error' : 'src="http://img.ulozto.cz/error403/vykricnik.jpg"', #: Paralell dl, server overload etc.
@@ -129,8 +130,7 @@ class UlozTo(SimpleHoster):
})
if check == "wrong_captcha":
- self.captcha.invalid()
- self.retry(reason=_("Wrong captcha code"))
+ self.retry_captcha()
elif check == "offline":
self.offline()
@@ -147,7 +147,7 @@ class UlozTo(SimpleHoster):
elif check == "not_found":
self.fail(_("Server error, file not downloadable"))
- return super(UlozTo, self).check_file()
+ return super(UlozTo, self).check_download()
getInfo = create_getInfo(UlozTo)
diff --git a/module/plugins/hoster/UloziskoSk.py b/module/plugins/hoster/UloziskoSk.py
index 7cbcb4d40..5bbbb1f7c 100644
--- a/module/plugins/hoster/UloziskoSk.py
+++ b/module/plugins/hoster/UloziskoSk.py
@@ -35,7 +35,7 @@ class UloziskoSk(SimpleHoster):
self.get_fileInfo()
m = re.search(self.IMG_PATTERN, self.html)
- if m:
+ if m is not None:
self.link = "http://ulozisko.sk" + m.group(1)
else:
self.handle_free(pyfile)
@@ -58,7 +58,7 @@ class UloziskoSk(SimpleHoster):
if m is None:
self.error(_("CAPTCHA_PATTERN not found"))
- captcha_url = urlparse.urljoin("http://www.ulozisko.sk", m.group(1))
+ captcha_url = urlparse.urljoin("http://www.ulozisko.sk/", m.group(1))
captcha = self.captcha.decrypt(captcha_url, cookies=True)
self.log_debug("CAPTCHA_URL:" + captcha_url + ' CAPTCHA:' + captcha)
diff --git a/module/plugins/hoster/UnibytesCom.py b/module/plugins/hoster/UnibytesCom.py
index ac2589f47..50006dd27 100644
--- a/module/plugins/hoster/UnibytesCom.py
+++ b/module/plugins/hoster/UnibytesCom.py
@@ -10,7 +10,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class UnibytesCom(SimpleHoster):
__name__ = "UnibytesCom"
__type__ = "hoster"
- __version__ = "0.14"
+ __version__ = "0.15"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?unibytes\.com/[\w .-]{11}B'
@@ -21,7 +21,7 @@ class UnibytesCom(SimpleHoster):
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- HOSTER_DOMAIN = "unibytes.com"
+ PLUGIN_DOMAIN = "unibytes.com"
INFO_PATTERN = r'<span[^>]*?id="fileName".*?>(?P<N>[^>]+)</span>\s*\((?P<S>\d.*?)\)'
@@ -30,7 +30,7 @@ class UnibytesCom(SimpleHoster):
def handle_free(self, pyfile):
- domain = "http://www.%s/" % self.HOSTER_DOMAIN
+ domain = "http://www.%s/" % self.PLUGIN_DOMAIN
action, post_data = self.parse_html_form('id="startForm"')
self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 0)
@@ -40,7 +40,7 @@ class UnibytesCom(SimpleHoster):
self.html = self.load(urlparse.urljoin(domain, action), post=post_data)
m = re.search(r'location:\s*(\S+)', self.req.http.header, re.I)
- if m:
+ if m is not None:
self.link = m.group(1)
break
@@ -50,12 +50,12 @@ class UnibytesCom(SimpleHoster):
if post_data['step'] == "last":
m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m:
- self.link = m.group(1)
+ if m is not None:
self.captcha.correct()
+ self.link = m.group(1)
break
else:
- self.captcha.invalid()
+ self.retry_captcha()
last_step = post_data['step']
action, post_data = self.parse_html_form('id="stepForm"')
@@ -65,7 +65,7 @@ class UnibytesCom(SimpleHoster):
self.wait(m.group(1) if m else 60, False)
elif last_step in ("captcha", "last"):
- post_data['captcha'] = self.captcha.decrypt(urlparse.urljoin(domain, "/captcha.jpg"))
+ post_data['captcha'] = self.captcha.decrypt(urlparse.urljoin(domain, "captcha.jpg"))
else:
self.fail(_("No valid captcha code entered"))
diff --git a/module/plugins/hoster/UpleaCom.py b/module/plugins/hoster/UpleaCom.py
index db9517f42..9c422ce01 100644
--- a/module/plugins/hoster/UpleaCom.py
+++ b/module/plugins/hoster/UpleaCom.py
@@ -9,7 +9,7 @@ from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo
class UpleaCom(XFSHoster):
__name__ = "UpleaCom"
__type__ = "hoster"
- __version__ = "0.12"
+ __version__ = "0.13"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?uplea\.com/dl/\w{15}'
@@ -20,7 +20,7 @@ class UpleaCom(XFSHoster):
("GammaC0de", None)]
- HOSTER_DOMAIN = "uplea.com"
+ PLUGIN_DOMAIN = "uplea.com"
SIZE_REPLACEMENTS = [('ko','KB'), ('mo','MB'), ('go','GB'), ('Ko','KB'), ('Mo','MB'), ('Go','GB')]
@@ -49,7 +49,7 @@ class UpleaCom(XFSHoster):
self.html = self.load(urlparse.urljoin("http://uplea.com/", m.group(1)))
m = re.search(self.WAIT_PATTERN, self.html)
- if m:
+ if m is not None:
self.log_debug("Waiting %s seconds" % m.group(1))
self.wait(m.group(1), True)
self.retry()
diff --git a/module/plugins/hoster/UploadableCh.py b/module/plugins/hoster/UploadableCh.py
index 88d79e9ba..a3d54e8ef 100644
--- a/module/plugins/hoster/UploadableCh.py
+++ b/module/plugins/hoster/UploadableCh.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class UploadableCh(SimpleHoster):
__name__ = "UploadableCh"
__type__ = "hoster"
- __version__ = "0.12"
+ __version__ = "0.13"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?uploadable\.ch/file/(?P<ID>\w+)'
@@ -65,13 +65,13 @@ class UploadableCh(SimpleHoster):
self.download(pyfile.url, post={'download': "normal"}, disposition=True)
- def check_file(self):
- if self.check_download({'wait': re.compile("Please wait for")}):
+ def check_download(self):
+ if self.check_file({'wait': re.compile("Please wait for")}):
self.log_info(_("Downloadlimit reached, please wait or reconnect"))
self.wait(60 * 60, True)
self.retry()
- return super(UploadableCh, self).check_file()
+ return super(UploadableCh, self).check_download()
getInfo = create_getInfo(UploadableCh)
diff --git a/module/plugins/hoster/UploadedTo.py b/module/plugins/hoster/UploadedTo.py
index c90f2bb0f..a3b9fbc2f 100644
--- a/module/plugins/hoster/UploadedTo.py
+++ b/module/plugins/hoster/UploadedTo.py
@@ -2,7 +2,6 @@
import re
import time
-import urlparse
from module.network.RequestFactory import getURL as get_url
from module.plugins.captcha.ReCaptcha import ReCaptcha
@@ -12,7 +11,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class UploadedTo(SimpleHoster):
__name__ = "UploadedTo"
__type__ = "hoster"
- __version__ = "0.96"
+ __version__ = "0.97"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(uploaded\.(to|net)|ul\.to)(/file/|/?\?id=|.*?&id=|/)(?P<ID>\w+)'
@@ -31,6 +30,7 @@ class UploadedTo(SimpleHoster):
OFFLINE_PATTERN = r'>Page not found'
TEMP_OFFLINE_PATTERN = r'<title>uploaded\.net - Maintenance'
+ PREMIUM_ONLY_PATTERN = r'This file exceeds the max\. filesize which can be downloaded by free users'
LINK_FREE_PATTERN = r"url:\s*'(.+?)'"
LINK_PREMIUM_PATTERN = r'<div class="tfree".*\s*<form method="post" action="(.+?)"'
@@ -77,6 +77,7 @@ class UploadedTo(SimpleHoster):
self.html = self.load("http://uploaded.net/io/ticket/captcha/%s" % self.info['pattern']['ID'],
post={'recaptcha_challenge_field': challenge,
'recaptcha_response_field' : response})
+ self.check_errors()
super(UploadedTo, self).handle_free(pyfile)
self.check_errors()
diff --git a/module/plugins/hoster/UploadheroCom.py b/module/plugins/hoster/UploadheroCom.py
index 2af0f32fc..517ed293a 100644
--- a/module/plugins/hoster/UploadheroCom.py
+++ b/module/plugins/hoster/UploadheroCom.py
@@ -44,21 +44,21 @@ class UploadheroCom(SimpleHoster):
if m is None:
self.error(_("Captcha not found"))
- captcha = self.captcha.decrypt(urlparse.urljoin("http://uploadhero.co", m.group(1)))
+ captcha = self.captcha.decrypt(urlparse.urljoin("http://uploadhero.co/", m.group(1)))
self.html = self.load(pyfile.url,
get={'code': captcha})
m = re.search(self.LINK_FREE_PATTERN, self.html)
- if m:
+ if m is not None:
self.link = m.group(1) or m.group(2)
self.wait(50)
def check_errors(self):
m = re.search(self.IP_BLOCKED_PATTERN, self.html)
- if m:
- self.html = self.load(urlparse.urljoin("http://uploadhero.co", m.group(1)))
+ if m is not None:
+ self.html = self.load(urlparse.urljoin("http://uploadhero.co/", m.group(1)))
m = re.search(self.IP_WAIT_PATTERN, self.html)
wait_time = (int(m.group(1)) * 60 + int(m.group(2))) if m else 5 * 60
diff --git a/module/plugins/hoster/UploadingCom.py b/module/plugins/hoster/UploadingCom.py
index 36f0c766e..c8f8a8169 100644
--- a/module/plugins/hoster/UploadingCom.py
+++ b/module/plugins/hoster/UploadingCom.py
@@ -4,14 +4,14 @@ import pycurl
import re
from module.common.json_layer import json_loads
-from module.plugins.internal.Plugin import encode
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp
+from module.plugins.internal.Plugin import encode, timestamp
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class UploadingCom(SimpleHoster):
__name__ = "UploadingCom"
__type__ = "hoster"
- __version__ = "0.43"
+ __version__ = "0.44"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?uploading\.com/files/(?:get/)?(?P<ID>\w+)'
@@ -61,7 +61,7 @@ class UploadingCom(SimpleHoster):
def handle_free(self, pyfile):
m = re.search('<h2>((Daily )?Download Limit)</h2>', self.html)
- if m:
+ if m is not None:
pyfile.error = encode(m.group(1))
self.log_warning(pyfile.error)
self.retry(6, (6 * 60 if m.group(2) else 15) * 60, pyfile.error)
@@ -88,7 +88,7 @@ class UploadingCom(SimpleHoster):
self.html = self.load(url)
m = re.search(r'<form id="file_form" action="(.*?)"', self.html)
- if m:
+ if m is not None:
url = m.group(1)
else:
self.error(_("No URL"))
diff --git a/module/plugins/hoster/UpstoreNet.py b/module/plugins/hoster/UpstoreNet.py
index 12c667efb..caa12e8af 100644
--- a/module/plugins/hoster/UpstoreNet.py
+++ b/module/plugins/hoster/UpstoreNet.py
@@ -62,13 +62,11 @@ class UpstoreNet(SimpleHoster):
#: STAGE 3: get direct link
m = re.search(self.LINK_FREE_PATTERN, self.html, re.S)
- if m:
+ if m is not None:
break
- if m is None:
- self.error(_("Download link not found"))
-
- self.link = m.group(1)
+ if m is not None:
+ self.link = m.group(1)
getInfo = create_getInfo(UpstoreNet)
diff --git a/module/plugins/hoster/UptoboxCom.py b/module/plugins/hoster/UptoboxCom.py
index d6baa3990..4f29b24b7 100644
--- a/module/plugins/hoster/UptoboxCom.py
+++ b/module/plugins/hoster/UptoboxCom.py
@@ -6,7 +6,7 @@ from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo
class UptoboxCom(XFSHoster):
__name__ = "UptoboxCom"
__type__ = "hoster"
- __version__ = "0.21"
+ __version__ = "0.22"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(uptobox|uptostream)\.com/\w{12}'
@@ -22,6 +22,8 @@ class UptoboxCom(XFSHoster):
LINK_PATTERN = r'"(https?://\w+\.uptobox\.com/d/.*?)"'
+ DL_LIMIT_PATTERN = r'>You have to wait (.+) to launch a new download<'
+
def setup(self):
self.multiDL = True
diff --git a/module/plugins/hoster/UserscloudCom.py b/module/plugins/hoster/UserscloudCom.py
new file mode 100644
index 000000000..ebaed4859
--- /dev/null
+++ b/module/plugins/hoster/UserscloudCom.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class UserscloudCom(SimpleHoster):
+ __name__ = "UserscloudCom"
+ __type__ = "hoster"
+ __version__ = "0.01"
+ __status__ = "testing"
+
+ __pattern__ = r'https?://(?:www\.)?userscloud\.com/\w{12}'
+
+ __description__ = """Userscloud.com hoster plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("GammaC0de", None)]
+
+
+ NAME_PATTERN = r'<h2 class="strong margin-none">(?P<N>.+?)<'
+ SIZE_PATTERN = r'<div class="ribbon">(?P<S>[\d.,]+) (?P<U>[\w^_]+)<'
+ OFFLINE_PATTERN = r'The file you are trying to download is no longer available'
+
+
+ def setup(self):
+ self.multiDL = True
+ self.resume_download = False
+ self.chunk_limit = 1
+
+
+ def handle_free(self, pyfile):
+ self.download(pyfile.url,
+ post=dict(re.findall(r'<input type="hidden" name="(.+?)" value="(.*?)">', self.html)))
+
+
+getInfo = create_getInfo(UserscloudCom)
diff --git a/module/plugins/hoster/VeohCom.py b/module/plugins/hoster/VeohCom.py
index 7d46ee335..ba18fd529 100644
--- a/module/plugins/hoster/VeohCom.py
+++ b/module/plugins/hoster/VeohCom.py
@@ -42,7 +42,7 @@ class VeohCom(SimpleHoster):
for q in quality:
pattern = r'"fullPreviewHash%sPath":"(.+?)"' % q
m = re.search(pattern, self.html)
- if m:
+ if m is not None:
pyfile.name += ".mp4"
self.link = m.group(1).replace("\\", "")
return
diff --git a/module/plugins/hoster/WebshareCz.py b/module/plugins/hoster/WebshareCz.py
index 0a89363f8..a11b59492 100644
--- a/module/plugins/hoster/WebshareCz.py
+++ b/module/plugins/hoster/WebshareCz.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class WebshareCz(SimpleHoster):
__name__ = "WebshareCz"
__type__ = "hoster"
- __version__ = "0.19"
+ __version__ = "0.20"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(en\.)?webshare\.cz/(?:#/)?file/(?P<ID>\w+)'
@@ -41,7 +41,7 @@ class WebshareCz(SimpleHoster):
def handle_free(self, pyfile):
- wst = self.account.get_data(self.user).get('wst', None) if self.account else None
+ wst = self.account.get_data('wst') if self.account else None
api_data = get_url("https://webshare.cz/api/file_link/",
post={'ident': self.info['pattern']['ID'], 'wst': wst})
@@ -49,7 +49,7 @@ class WebshareCz(SimpleHoster):
self.log_debug("API data: " + api_data)
m = re.search('<link>(.+)</link>', api_data)
- if m:
+ if m is not None:
self.link = m.group(1)
diff --git a/module/plugins/hoster/XFileSharingPro.py b/module/plugins/hoster/XFileSharingPro.py
index 8ede709de..c7d8a7761 100644
--- a/module/plugins/hoster/XFileSharingPro.py
+++ b/module/plugins/hoster/XFileSharingPro.py
@@ -8,7 +8,7 @@ from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo
class XFileSharingPro(XFSHoster):
__name__ = "XFileSharingPro"
__type__ = "hoster"
- __version__ = "0.53"
+ __version__ = "0.54"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(?:\w+\.)*?(?P<DOMAIN>(?:[\d.]+|[\w\-^_]{3,}(?:\.[a-zA-Z]{2,}){1,2})(?:\:\d+)?)/(?:embed-)?\w{12}(?:\W|$)'
@@ -24,25 +24,25 @@ class XFileSharingPro(XFSHoster):
def _log(self, level, plugintype, pluginname, messages):
return super(XFileSharingPro, self)._log(level,
plugintype,
- "%s: %s" % (pluginname, self.HOSTER_NAME),
+ "%s: %s" % (pluginname, self.PLUGIN_NAME),
messages)
def init(self):
self.__pattern__ = self.pyload.pluginManager.hosterPlugins[self.__name__]['pattern']
- self.HOSTER_DOMAIN = re.match(self.__pattern__, self.pyfile.url).group("DOMAIN").lower()
- self.HOSTER_NAME = "".join(part.capitalize() for part in re.split(r'(\.|\d+|\-)', self.HOSTER_DOMAIN) if part != '.')
+ self.PLUGIN_DOMAIN = re.match(self.__pattern__, self.pyfile.url).group("DOMAIN").lower()
+ self.PLUGIN_NAME = "".join(part.capitalize() for part in re.split(r'(\.|\d+|\-)', self.PLUGIN_DOMAIN) if part != '.')
def _setup(self):
- account_name = self.__name__ if self.account.HOSTER_DOMAIN is None else self.HOSTER_NAME
+ account_name = self.__name__ if self.account.PLUGIN_DOMAIN is None else self.PLUGIN_NAME
self.chunk_limit = 1
self.multiDL = True
if self.account:
- self.req = self.pyload.requestFactory.getRequest(accountname, self.user)
- self.premium = self.account.is_premium(self.user)
+ self.req = self.pyload.requestFactory.getRequest(accountname, self.account.user)
+ self.premium = self.account.premium
self.resume_download = self.premium
else:
self.req = self.pyload.requestFactory.getRequest(account_name)
@@ -55,19 +55,19 @@ class XFileSharingPro(XFSHoster):
self.req.close()
if not self.account:
- self.account = self.pyload.accountManager.getAccountPlugin(self.HOSTER_NAME)
+ self.account = self.pyload.accountManager.getAccountPlugin(self.PLUGIN_NAME)
if not self.account:
self.account = self.pyload.accountManager.getAccountPlugin(self.__name__)
if self.account:
- if not self.account.HOSTER_DOMAIN:
- self.account.HOSTER_DOMAIN = self.HOSTER_DOMAIN
+ if not self.account.PLUGIN_DOMAIN:
+ self.account.PLUGIN_DOMAIN = self.PLUGIN_DOMAIN
- if not self.user:
- self.user = self.account.select()[0]
+ if not self.account.user: #@TODO: Move to `Account` in 0.4.10
+ self.account.user = self.account.select()[0]
- if not self.user or not self.account.is_logged(self.user, True):
+ if not self.account.logged:
self.account = False
diff --git a/module/plugins/hoster/XHamsterCom.py b/module/plugins/hoster/XHamsterCom.py
index 8df1a441f..576451644 100644
--- a/module/plugins/hoster/XHamsterCom.py
+++ b/module/plugins/hoster/XHamsterCom.py
@@ -79,6 +79,7 @@ class XHamsterCom(Hoster):
file_url = re.search(r"<a href=\"" + srv_url + "(.+?)\"", self.html)
if file_url is None:
self.error(_("file_url not found"))
+
file_url = file_url.group(1)
long_url = srv_url + file_url
self.log_debug("long_url = " + long_url)
diff --git a/module/plugins/hoster/Xdcc.py b/module/plugins/hoster/Xdcc.py
index aba66ee94..098143751 100644
--- a/module/plugins/hoster/Xdcc.py
+++ b/module/plugins/hoster/Xdcc.py
@@ -172,10 +172,10 @@ class Xdcc(Hoster):
retry = time.time() + 300
if "you must be on a known channel to request a pack" in msg['text']:
- self.fail(_("Wrong channel"))
+ self.fail(_("Invalid channel"))
m = re.match('\x01DCC SEND (.*?) (\d+) (\d+)(?: (\d+))?\x01', msg['text'])
- if m:
+ if m is not None:
done = True
#: Get connection data
diff --git a/module/plugins/hoster/YadiSk.py b/module/plugins/hoster/YadiSk.py
index a907cd282..354ba1b4c 100644
--- a/module/plugins/hoster/YadiSk.py
+++ b/module/plugins/hoster/YadiSk.py
@@ -34,7 +34,7 @@ class YadiSk(SimpleHoster):
info ['idclient'] += random.choice('0123456abcdef')
m = re.search(r'<script id="models-client" type="application/json">(.+?)</script>', html)
- if m:
+ if m is not None:
api_data = json_loads(m.group(1))
try:
for sect in api_data:
diff --git a/module/plugins/hoster/YibaishiwuCom.py b/module/plugins/hoster/YibaishiwuCom.py
index e0e90a311..b68e87ba6 100644
--- a/module/plugins/hoster/YibaishiwuCom.py
+++ b/module/plugins/hoster/YibaishiwuCom.py
@@ -37,7 +37,7 @@ class YibaishiwuCom(SimpleHoster):
self.log_debug(('FREEUSER' if m.group(2) == "download" else 'GUEST') + ' URL', url)
- res = json_loads(self.load(urlparse.urljoin("http://115.com", url), decode=False))
+ res = json_loads(self.load(urlparse.urljoin("http://115.com/", url), decode=False))
if "urls" in res:
mirrors = res['urls']
@@ -52,8 +52,9 @@ class YibaishiwuCom(SimpleHoster):
self.link = mr['url'].replace("\\", "")
self.log_debug("Trying URL: " + self.link)
break
+
except Exception:
- continue
+ pass
else:
self.fail(_("No working link found"))
diff --git a/module/plugins/hoster/YourfilesTo.py b/module/plugins/hoster/YourfilesTo.py
index a75bbcc94..cdf69afbe 100644
--- a/module/plugins/hoster/YourfilesTo.py
+++ b/module/plugins/hoster/YourfilesTo.py
@@ -41,7 +41,7 @@ class YourfilesTo(Hoster):
#: var zzipitime = 15
m = re.search(r'var zzipitime = (\d+);', self.html)
- if m:
+ if m is not None:
sec = int(m.group(1))
else:
sec = 0
diff --git a/module/plugins/hoster/YoutubeCom.py b/module/plugins/hoster/YoutubeCom.py
index 865eeef2e..5c7c13962 100644
--- a/module/plugins/hoster/YoutubeCom.py
+++ b/module/plugins/hoster/YoutubeCom.py
@@ -6,37 +6,17 @@ import subprocess
import urllib
from module.plugins.internal.Hoster import Hoster
-from module.plugins.internal.Plugin import replace_patterns
+from module.plugins.internal.Plugin import replace_patterns, which
from module.utils import html_unescape
-def which(program):
- """
- Works exactly like the unix command which
- Courtesy of http://stackoverflow.com/a/377028/675646
- """
- isExe = lambda x: os.path.isfile(x) and os.access(x, os.X_OK)
-
- fpath, fname = os.path.split(program)
-
- if fpath:
- if isExe(program):
- return program
- else:
- for path in os.environ['PATH'].split(os.pathsep):
- path = path.strip('"')
- exe_file = os.path.join(path, program)
- if isExe(exe_file):
- return exe_file
-
-
class YoutubeCom(Hoster):
__name__ = "YoutubeCom"
__type__ = "hoster"
- __version__ = "0.44"
+ __version__ = "0.46"
__status__ = "testing"
- __pattern__ = r'https?://(?:[^/]*\.)?(youtube\.com|youtu\.be)/watch\?(?:.*&)?v=.+'
+ __pattern__ = r'https?://(?:[^/]*\.)?(youtu\.be/|youtube\.com/watch\?(?:.*&)?v=)\w+'
__config__ = [("quality", "sd;hd;fullhd;240p;360p;480p;720p;1080p;3072p", "Quality Setting" , "hd" ),
("fmt" , "int" , "FMT/ITAG Number (0 for auto)", 0 ),
(".mp4" , "bool" , "Allow .mp4" , True ),
@@ -51,10 +31,10 @@ class YoutubeCom(Hoster):
("zoidberg", "zoidberg@mujmail.cz")]
- URL_REPLACEMENTS = [(r'youtu\.be/', 'youtube.com/')]
+ URL_REPLACEMENTS = [(r'youtu\.be/', 'youtube.com/watch?v=')]
#: Invalid characters that must be removed from the file name
- invalidChars = u'\u2605:?><"|\\'
+ invalid_chars = u'\u2605:?><"|\\'
#: name, width, height, quality ranking, 3D
formats = {5 : (".flv" , 400 , 240 , 1 , False),
diff --git a/module/plugins/hoster/ZeveraCom.py b/module/plugins/hoster/ZeveraCom.py
index ff3a43e6d..9f3fea189 100644
--- a/module/plugins/hoster/ZeveraCom.py
+++ b/module/plugins/hoster/ZeveraCom.py
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
import re
-import urlparse
from module.plugins.internal.MultiHoster import MultiHoster, create_getInfo
@@ -9,7 +8,7 @@ from module.plugins.internal.MultiHoster import MultiHoster, create_getInfo
class ZeveraCom(MultiHoster):
__name__ = "ZeveraCom"
__type__ = "hoster"
- __version__ = "0.32"
+ __version__ = "0.33"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)zevera\.com/(getFiles\.ashx|Members/download\.ashx)\?.*ourl=.+'
@@ -26,7 +25,7 @@ class ZeveraCom(MultiHoster):
def handle_premium(self, pyfile):
- self.link = "https://%s/getFiles.ashx?ourl=%s" % (self.account.HOSTER_DOMAIN, pyfile.url)
+ self.link = "https://%s/getFiles.ashx?ourl=%s" % (self.account.PLUGIN_DOMAIN, pyfile.url)
getInfo = create_getInfo(ZeveraCom)
diff --git a/module/plugins/hoster/ZippyshareCom.py b/module/plugins/hoster/ZippyshareCom.py
index 1b29948ce..221ec8c42 100644
--- a/module/plugins/hoster/ZippyshareCom.py
+++ b/module/plugins/hoster/ZippyshareCom.py
@@ -12,7 +12,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class ZippyshareCom(SimpleHoster):
__name__ = "ZippyshareCom"
__type__ = "hoster"
- __version__ = "0.82"
+ __version__ = "0.83"
__status__ = "testing"
__pattern__ = r'http://www\d{0,3}\.zippyshare\.com/v(/|iew\.jsp.*key=)(?P<KEY>[\w^_]+)'
@@ -52,7 +52,7 @@ class ZippyshareCom(SimpleHoster):
self.error(e)
else:
- self.link = self.get_link()
+ self.link = self.fixurl(self.get_link())
if self.link and pyfile.name == "file.html":
pyfile.name = urllib.unquote(self.link.split('/')[-1])