summaryrefslogtreecommitdiffstats
path: root/module/plugins/hoster
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hoster')
-rw-r--r--module/plugins/hoster/BasePlugin.py13
-rw-r--r--module/plugins/hoster/CloudzillaTo.py6
-rw-r--r--module/plugins/hoster/CzshareCom.py2
-rw-r--r--module/plugins/hoster/EuroshareEu.py6
-rw-r--r--module/plugins/hoster/FastixRu.py14
-rw-r--r--module/plugins/hoster/FastshareCz.py4
-rw-r--r--module/plugins/hoster/FileSharkPl.py6
-rw-r--r--module/plugins/hoster/FileboomMe.py11
-rw-r--r--module/plugins/hoster/FilefactoryCom.py5
-rw-r--r--module/plugins/hoster/FilerNet.py1
-rw-r--r--module/plugins/hoster/FilesMailRu.py1
-rw-r--r--module/plugins/hoster/FileserveCom.py7
-rw-r--r--module/plugins/hoster/FourSharedCom.py1
-rw-r--r--module/plugins/hoster/Ftp.py7
-rw-r--r--module/plugins/hoster/GoogledriveCom.py6
-rw-r--r--module/plugins/hoster/HellshareCz.py2
-rw-r--r--module/plugins/hoster/HighWayMe.py4
-rw-r--r--module/plugins/hoster/Keep2ShareCc.py6
-rw-r--r--module/plugins/hoster/LuckyShareNet.py4
-rw-r--r--module/plugins/hoster/MegaRapidCz.py4
-rw-r--r--module/plugins/hoster/MegasharesCom.py6
-rw-r--r--module/plugins/hoster/NowDownloadSx.py2
-rw-r--r--module/plugins/hoster/OboomCom.py4
-rw-r--r--module/plugins/hoster/OneFichierCom.py59
-rw-r--r--module/plugins/hoster/OpenloadIo.py59
-rw-r--r--module/plugins/hoster/PremiumizeMe.py8
-rw-r--r--module/plugins/hoster/ShareonlineBiz.py12
-rw-r--r--module/plugins/hoster/SimplyPremiumCom.py4
-rw-r--r--module/plugins/hoster/SpeedyshareCom.py1
-rw-r--r--module/plugins/hoster/UlozTo.py13
-rw-r--r--module/plugins/hoster/UploadedTo.py1
-rw-r--r--module/plugins/hoster/UserscloudCom.py37
-rw-r--r--module/plugins/hoster/YibaishiwuCom.py3
-rw-r--r--module/plugins/hoster/YoutubeCom.py28
-rw-r--r--module/plugins/hoster/ZeveraCom.py1
35 files changed, 230 insertions, 118 deletions
diff --git a/module/plugins/hoster/BasePlugin.py b/module/plugins/hoster/BasePlugin.py
index 2e9ae4e48..d64834a7c 100644
--- a/module/plugins/hoster/BasePlugin.py
+++ b/module/plugins/hoster/BasePlugin.py
@@ -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
@@ -95,6 +83,7 @@ class BasePlugin(Hoster):
try:
errmsg += " | " + self.last_check.group(1).strip()
+
except Exception:
pass
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/CzshareCom.py b/module/plugins/hoster/CzshareCom.py
index 3d2de5f7f..6afd9fa2d 100644
--- a/module/plugins/hoster/CzshareCom.py
+++ b/module/plugins/hoster/CzshareCom.py
@@ -58,6 +58,7 @@ class CzshareCom(SimpleHoster):
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)
@@ -70,6 +71,7 @@ class CzshareCom(SimpleHoster):
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)
diff --git a/module/plugins/hoster/EuroshareEu.py b/module/plugins/hoster/EuroshareEu.py
index 53ac9ff06..70df8e354 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.31"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?euroshare\.(eu|sk|cz|hu|pl)/file/.+'
@@ -33,7 +33,7 @@ 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.retry(msg=_("User not logged in"))
self.link = pyfile.url.rstrip('/') + "/download/"
@@ -42,7 +42,7 @@ class EuroshareEu(SimpleHoster):
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.retry(msg=_("Access token expired"))
elif check == "json":
self.fail(self.last_check.group(1))
diff --git a/module/plugins/hoster/FastixRu.py b/module/plugins/hoster/FastixRu.py
index 0019cf3c2..f00dded3f 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.14"
__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..62cf3889b 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.33"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?fastshare\.cz/\d+/.+'
@@ -70,7 +70,7 @@ class FastshareCz(SimpleHoster):
self.retry(6, 10 * 60, _("Paralell download"))
elif check == "wrong captcha":
- self.retry(max_tries=5, reason=_("Wrong captcha"))
+ self.retry(max_tries=5, msg=_("Wrong captcha"))
elif check == "credit":
self.restart(nopremium=True)
diff --git a/module/plugins/hoster/FileSharkPl.py b/module/plugins/hoster/FileSharkPl.py
index 978861dd6..94e2d25ab 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.14"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?fileshark\.pl/pobierz/\d+/\w+'
@@ -92,13 +92,13 @@ 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[start]'] = ""
diff --git a/module/plugins/hoster/FileboomMe.py b/module/plugins/hoster/FileboomMe.py
index 3c11f1d16..4328565f4 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,7 +36,7 @@ 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:
@@ -46,7 +45,7 @@ class FileboomMe(SimpleHoster):
m = re.search(self.LINK_PATTERN, self.html)
if m:
- self.link = urljoin(pyfile.url, m.group(0))
+ self.link = urlparse.urljoin(pyfile.url, m.group(0))
else:
for _i in xrange(5):
@@ -56,7 +55,7 @@ class FileboomMe(SimpleHoster):
m = re.search(self.CAPTCHA_PATTERN, self.html)
if m:
- captcha = self.captcha.decrypt(urljoin(pyfile.url, m.group(1)))
+ captcha = self.captcha.decrypt(urlparse.urljoin(pyfile.url, m.group(1)))
self.html = self.load(post_url,
post={'CaptchaForm[code]' : captcha,
@@ -76,7 +75,7 @@ class FileboomMe(SimpleHoster):
m = re.search(self.LINK_PATTERN, self.html)
if m:
- self.link = urljoin(pyfile.url, m.group(0))
+ self.link = urlparse.urljoin(pyfile.url, m.group(0))
else:
self.captcha.invalid()
diff --git a/module/plugins/hoster/FilefactoryCom.py b/module/plugins/hoster/FilefactoryCom.py
index 325b4bb27..b13a7c793 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.58"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?filefactory\.com/(file|trafficshare/\w+)/\w+'
@@ -66,7 +65,7 @@ class FilefactoryCom(SimpleHoster):
if check == "multiple":
self.log_debug("Parallel downloads detected; waiting 15 minutes")
- self.retry(wait_time=15 * 60, reason=_("Parallel downloads"))
+ self.retry(wait_time=15 * 60, msg=_("Parallel downloads"))
elif check == "error":
self.error(_("Unknown error"))
diff --git a/module/plugins/hoster/FilerNet.py b/module/plugins/hoster/FilerNet.py
index f8c41f4d1..af755e0a6 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
diff --git a/module/plugins/hoster/FilesMailRu.py b/module/plugins/hoster/FilesMailRu.py
index a6dd56152..a1c30be7b 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
diff --git a/module/plugins/hoster/FileserveCom.py b/module/plugins/hoster/FileserveCom.py
index a74589cff..c35fab3fc 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.59"
__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_time=60, msg=_("parallelDownload"))
else:
self.fail(_("Download check returned: %s") % action['fail'])
@@ -206,7 +207,7 @@ class FileserveCom(Hoster):
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"))
+ 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..212eadb3b 100644
--- a/module/plugins/hoster/FourSharedCom.py
+++ b/module/plugins/hoster/FourSharedCom.py
@@ -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/Ftp.py b/module/plugins/hoster/Ftp.py
index 25eb44604..c9f5fa6b6 100644
--- a/module/plugins/hoster/Ftp.py
+++ b/module/plugins/hoster/Ftp.py
@@ -35,6 +35,7 @@ class Ftp(Hoster):
pyfile.name = parsed_url.path.rpartition('/')[2]
try:
pyfile.name = urllib.unquote(str(pyfile.name)).decode('utf8')
+
except Exception:
pass
@@ -63,16 +64,22 @@ class Ftp(Hoster):
if m:
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/GoogledriveCom.py b/module/plugins/hoster/GoogledriveCom.py
index 903b5361e..381bd24dc 100644
--- a/module/plugins/hoster/GoogledriveCom.py
+++ b/module/plugins/hoster/GoogledriveCom.py
@@ -44,11 +44,9 @@ class GoogledriveCom(SimpleHoster):
self.error(_("Free download link not found"))
else:
- link = html_unescape(m.group(1).decode('unicode-escape'))
- if not urlparse.urlparse(link).scheme:
- link = urlparse.urljoin("https://docs.google.com/", link)
-
+ 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:
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..f8dc27eec 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.14"
__status__ = "testing"
__pattern__ = r'https?://.+high-way\.my'
@@ -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_time=seconds_to_midnight(gmt=2), 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/Keep2ShareCc.py b/module/plugins/hoster/Keep2ShareCc.py
index bf4b157cb..b8275e84b 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.25"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(keep2share|k2s|keep2s)\.cc/file/(?P<ID>\w+)'
@@ -45,7 +45,7 @@ class Keep2ShareCc(SimpleHoster):
if m:
self.info['error'] = m.group(1)
self.wantReconnect = True
- self.retry(wait_time=30 * 60, reason=m.group(0))
+ self.retry(wait_time=30 * 60, msg=m.group(0))
m = re.search(self.ERROR_PATTERN, self.html)
if m:
@@ -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_time=wait_time, msg="Please wait to download this file")
self.info.pop('error', None)
diff --git a/module/plugins/hoster/LuckyShareNet.py b/module/plugins/hoster/LuckyShareNet.py
index 788c1aca8..5d9bf52c0 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.09"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?luckyshare\.net/(?P<ID>\d{10,})'
@@ -36,7 +36,7 @@ class LuckyShareNet(SimpleHoster):
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)
diff --git a/module/plugins/hoster/MegaRapidCz.py b/module/plugins/hoster/MegaRapidCz.py
index 13f462585..4d6d0171a 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.58"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?(share|mega)rapid\.cz/soubor/\d+/.+'
@@ -59,7 +59,7 @@ class MegaRapidCz(SimpleHoster):
else:
if re.search(self.ERR_LOGIN_PATTERN, self.html):
self.relogin(self.user)
- self.retry(wait_time=60, reason=_("User login failed"))
+ self.retry(wait_time=60, msg=_("User login failed"))
elif re.search(self.ERR_CREDIT_PATTERN, self.html):
self.fail(_("Not enough credit left"))
diff --git a/module/plugins/hoster/MegasharesCom.py b/module/plugins/hoster/MegasharesCom.py
index b6692263f..8b87dbd68 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.30"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?(d\d{2}\.)?megashares\.com/((index\.php)?\?d\d{2}=|dl/)\w+'
@@ -82,7 +82,7 @@ class MegasharesCom(SimpleHoster):
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_time=renew, msg=_("Passport renewal"))
#: Check traffic left on passport
m = re.search(self.PASSPORT_LEFT_PATTERN, self.html, re.M | re.S)
@@ -94,7 +94,7 @@ 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_time=600, msg=_("Passport renewal"))
self.handle_download(False)
diff --git a/module/plugins/hoster/NowDownloadSx.py b/module/plugins/hoster/NowDownloadSx.py
index 876a7bcb5..e03ec2789 100644
--- a/module/plugins/hoster/NowDownloadSx.py
+++ b/module/plugins/hoster/NowDownloadSx.py
@@ -29,7 +29,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):
diff --git a/module/plugins/hoster/OboomCom.py b/module/plugins/hoster/OboomCom.py
index 8420c6f02..1ee342de5 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.37"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?oboom\.com/(?:#(?:id=|/)?)?(?P<ID>\w{8})'
@@ -141,6 +141,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_time=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 cba67b26c..70229a6ef 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.88"
+ __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,6 +29,8 @@ class OneFichierCom(SimpleHoster):
COOKIES = [("1fichier.com", "LG", "en")]
+ 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,7 +43,61 @@ 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)
diff --git a/module/plugins/hoster/OpenloadIo.py b/module/plugins/hoster/OpenloadIo.py
index c46462344..f5d677bb2 100644
--- a/module/plugins/hoster/OpenloadIo.py
+++ b/module/plugins/hoster/OpenloadIo.py
@@ -1,31 +1,72 @@
# -*- coding: utf-8 -*-
+import json
+import re
+from time import sleep
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from module.network.RequestFactory import getURL
class OpenloadIo(SimpleHoster):
__name__ = "OpenloadIo"
__type__ = "hoster"
- __version__ = "0.04"
+ __version__ = "0.06"
__status__ = "testing"
- __pattern__ = r'https?://(?:www\.)?openload\.io/f/[\w_-]{11}'
+ _FILE_ID_PATTERN = '/f/([\w\-_]+)/?'
+ __pattern__ = r'https?://(?:www\.)?openload\.(?:co|io)' + _FILE_ID_PATTERN
- __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)"
-
- LINK_FREE_PATTERN = r'id="real\w*download"><a href="(https?://[\w\.]+\.openload\.io/dl/.*?)"'
+ # The API reference, that this implementation uses is available at https://openload.co/api
+ _API_BASE_URL = 'https://api.openload.co/1'
+ _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}'
def setup(self):
- self.multiDL = True
+ self.multiDL = True
self.chunk_limit = 1
+ @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)
+
+ 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 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))
+
+ wait_time = ticket_json['result']['wait_time']
+ sleep(wait_time + 0.1)
+
+ 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']
+
+
+ @classmethod
+ def _load_json(cls, uri):
+ return json.loads(
+ getURL(cls._API_BASE_URL + uri))
+
getInfo = create_getInfo(OpenloadIo)
diff --git a/module/plugins/hoster/PremiumizeMe.py b/module/plugins/hoster/PremiumizeMe.py
index d968eccec..e682a5a4c 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,6 +44,12 @@ 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
diff --git a/module/plugins/hoster/ShareonlineBiz.py b/module/plugins/hoster/ShareonlineBiz.py
index b5af3ea35..bba4bf6ad 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.56"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(share-online\.biz|egoshare\.com)/(download\.php\?id=|dl/)(?P<ID>\w+)'
@@ -79,7 +78,7 @@ class ShareonlineBiz(SimpleHoster):
post={'dl_free' : "1",
'recaptcha_challenge_field': challenge,
'recaptcha_response_field' : response})
- if not res == "0":
+ if res != "0":
self.captcha.correct()
return res
else:
@@ -136,7 +135,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 +159,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,7 +170,7 @@ class ShareonlineBiz(SimpleHoster):
self.fail(_("Premium account needed"))
elif errmsg in ("expired", "server"):
- self.retry(wait_time=600, reason=errmsg)
+ self.retry(wait_time=600, msg=errmsg)
elif errmsg == "full":
self.retry(10, 600, _("Server is full"))
@@ -181,7 +181,7 @@ class ShareonlineBiz(SimpleHoster):
else:
self.wantReconnect = True
- self.retry(wait_time=60, reason=errmsg)
+ self.retry(wait_time=60, msg=errmsg)
getInfo = create_getInfo(ShareonlineBiz)
diff --git a/module/plugins/hoster/SimplyPremiumCom.py b/module/plugins/hoster/SimplyPremiumCom.py
index be1578bfb..be9b89f24 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.11"
__status__ = "testing"
__pattern__ = r'https?://.+simply-premium\.com'
@@ -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_time=seconds_to_midnight(gmt=2), 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/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/UlozTo.py b/module/plugins/hoster/UlozTo.py
index b402433a4..ab96f65a1 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.15"
__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>'
@@ -68,7 +67,9 @@ 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()))})
+ 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 = " + str(xapca))
data = json_loads(xapca)
@@ -121,7 +122,7 @@ class UlozTo(SimpleHoster):
def check_file(self):
check = self.check_download({
- 'wrong_captcha': re.compile(r'<ul class="error">\s*<li>Error rewriting the text.</li>'),
+ '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.
@@ -130,7 +131,7 @@ class UlozTo(SimpleHoster):
if check == "wrong_captcha":
self.captcha.invalid()
- self.retry(reason=_("Wrong captcha code"))
+ self.retry(msg=_("Wrong captcha code"))
elif check == "offline":
self.offline()
diff --git a/module/plugins/hoster/UploadedTo.py b/module/plugins/hoster/UploadedTo.py
index 697f1febd..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
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/YibaishiwuCom.py b/module/plugins/hoster/YibaishiwuCom.py
index 0c1a028f8..b68e87ba6 100644
--- a/module/plugins/hoster/YibaishiwuCom.py
+++ b/module/plugins/hoster/YibaishiwuCom.py
@@ -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/YoutubeCom.py b/module/plugins/hoster/YoutubeCom.py
index 86cca7cf1..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.45"
+ __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,7 +31,7 @@ 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
invalid_chars = u'\u2605:?><"|\\'
diff --git a/module/plugins/hoster/ZeveraCom.py b/module/plugins/hoster/ZeveraCom.py
index ff3a43e6d..47286fca1 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