summaryrefslogtreecommitdiffstats
path: root/module/plugins/hoster
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hoster')
-rw-r--r--module/plugins/hoster/ExtabitCom.py5
-rw-r--r--module/plugins/hoster/FileserveCom.py5
-rw-r--r--module/plugins/hoster/FreakshareCom.py4
-rw-r--r--module/plugins/hoster/HighWayMe.py4
-rw-r--r--module/plugins/hoster/Keep2ShareCc.py20
-rw-r--r--module/plugins/hoster/LetitbitNet.py5
-rw-r--r--module/plugins/hoster/LinksnappyCom.py7
-rw-r--r--module/plugins/hoster/NitroflareCom.py1
-rw-r--r--module/plugins/hoster/OneFichierCom.py35
-rw-r--r--module/plugins/hoster/RyushareCom.py2
-rw-r--r--module/plugins/hoster/ShareonlineBiz.py2
-rw-r--r--module/plugins/hoster/UgouploadNet.py56
-rw-r--r--module/plugins/hoster/UpleaCom.py12
-rw-r--r--module/plugins/hoster/UpstoreNet.py36
14 files changed, 144 insertions, 50 deletions
diff --git a/module/plugins/hoster/ExtabitCom.py b/module/plugins/hoster/ExtabitCom.py
index 328714229..c573cca1a 100644
--- a/module/plugins/hoster/ExtabitCom.py
+++ b/module/plugins/hoster/ExtabitCom.py
@@ -5,13 +5,14 @@ import re
from module.plugins.internal.utils import json
from module.plugins.captcha.ReCaptcha import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, seconds_to_midnight
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from module.plugins.internal.utils import seconds_to_midnight
class ExtabitCom(SimpleHoster):
__name__ = "ExtabitCom"
__type__ = "hoster"
- __version__ = "0.70"
+ __version__ = "0.71"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?extabit\.com/(file|go|fid)/(?P<ID>\w+)'
diff --git a/module/plugins/hoster/FileserveCom.py b/module/plugins/hoster/FileserveCom.py
index d30559646..97041c434 100644
--- a/module/plugins/hoster/FileserveCom.py
+++ b/module/plugins/hoster/FileserveCom.py
@@ -5,8 +5,7 @@ import re
from module.network.RequestFactory import getURL as get_url
from module.plugins.captcha.ReCaptcha import ReCaptcha
from module.plugins.internal.Hoster import Hoster
-from module.plugins.internal.SimpleHoster import seconds_to_midnight
-from module.plugins.internal.utils import chunks, json, parse_size
+from module.plugins.internal.utils import chunks, json, parse_size, seconds_to_midnight
def check_file(plugin, urls):
@@ -32,7 +31,7 @@ def check_file(plugin, urls):
class FileserveCom(Hoster):
__name__ = "FileserveCom"
__type__ = "hoster"
- __version__ = "0.64"
+ __version__ = "0.65"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?fileserve\.com/file/(?P<ID>[^/]+)'
diff --git a/module/plugins/hoster/FreakshareCom.py b/module/plugins/hoster/FreakshareCom.py
index 3881e53e7..e1366913e 100644
--- a/module/plugins/hoster/FreakshareCom.py
+++ b/module/plugins/hoster/FreakshareCom.py
@@ -4,13 +4,13 @@ import re
from module.plugins.internal.Hoster import Hoster
from module.plugins.captcha.ReCaptcha import ReCaptcha
-from module.plugins.internal.SimpleHoster import seconds_to_midnight
+from module.plugins.internal.utils import seconds_to_midnight
class FreakshareCom(Hoster):
__name__ = "FreakshareCom"
__type__ = "hoster"
- __version__ = "0.46"
+ __version__ = "0.47"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?freakshare\.(net|com)/files/\S*?/'
diff --git a/module/plugins/hoster/HighWayMe.py b/module/plugins/hoster/HighWayMe.py
index 6c66dce3e..178c11daf 100644
--- a/module/plugins/hoster/HighWayMe.py
+++ b/module/plugins/hoster/HighWayMe.py
@@ -3,13 +3,13 @@
import re
from module.plugins.internal.MultiHoster import MultiHoster, create_getInfo
-from module.plugins.internal.SimpleHoster import seconds_to_midnight
+from module.plugins.internal.utils import seconds_to_midnight
class HighWayMe(MultiHoster):
__name__ = "HighWayMe"
__type__ = "hoster"
- __version__ = "0.17"
+ __version__ = "0.18"
__status__ = "testing"
__pattern__ = r'https?://.+high-way\.my'
diff --git a/module/plugins/hoster/Keep2ShareCc.py b/module/plugins/hoster/Keep2ShareCc.py
index c927ea11c..1dba9713a 100644
--- a/module/plugins/hoster/Keep2ShareCc.py
+++ b/module/plugins/hoster/Keep2ShareCc.py
@@ -11,7 +11,7 @@ class Keep2ShareCc(SimpleHoster):
__name__ = "Keep2ShareCc"
__type__ = "hoster"
__version__ = "0.28"
- __status__ = "broken"
+ __status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(keep2share|k2s|keep2s)\.cc/file/(?P<ID>\w+)'
__config__ = [("activated" , "bool", "Activated" , True),
@@ -34,8 +34,9 @@ class Keep2ShareCc(SimpleHoster):
OFFLINE_PATTERN = r'File not found or deleted|Sorry, this file is blocked or deleted|Error 404'
TEMP_OFFLINE_PATTERN = r'Downloading blocked due to'
- LINK_FREE_PATTERN = r'"(.+?url.html\?file=.+?)"|window\.location\.href = \'(.+?)\';'
+ LINK_FREE_PATTERN = r'"([^"]+?url.html\?file=.+?)"|window\.location\.href = \'(.+?)\';'
LINK_PREMIUM_PATTERN = r'window\.location\.href = \'(.+?)\';'
+ UNIQUE_ID_PATTERN = r"data: {uniqueId: '(?P<uID>\w+)', free: 1}"
CAPTCHA_PATTERN = r'src="(/file/captcha\.html.+?)"'
@@ -68,6 +69,7 @@ class Keep2ShareCc(SimpleHoster):
self.retry(wait=wait_time, msg="Please wait to download this file")
self.info.pop('error', None)
+ # super(Keep2ShareCc, self).check_errors()
def handle_free(self, pyfile):
@@ -83,13 +85,22 @@ class Keep2ShareCc(SimpleHoster):
if m is None:
self.handle_captcha()
self.wait(31)
- self.data = self.load(pyfile.url)
+ # get the uniqueId from the html code
+ m = re.search(self.UNIQUE_ID_PATTERN, self.data)
+ if m is None:
+ self.error(_("Unique-ID pattern not found"))
+ self.data = self.load(pyfile.url, post={'uniqueId': m.group('uID'), 'free': '1'})
m = re.search(self.LINK_FREE_PATTERN, self.data)
if m is None:
self.error(_("Free download link not found"))
- self.link = m.group(1)
+ # if group 1 did not match, check group 2
+ if m.group(1) is not None:
+ self.link = m.group(1)
+ else:
+ self.link = m.group(2)
+ self.log_debug("download link: %s" % self.link)
def handle_captcha(self):
@@ -121,3 +132,4 @@ class Keep2ShareCc(SimpleHoster):
getInfo = create_getInfo(Keep2ShareCc)
+
diff --git a/module/plugins/hoster/LetitbitNet.py b/module/plugins/hoster/LetitbitNet.py
index 95b938c6a..2d50651bd 100644
--- a/module/plugins/hoster/LetitbitNet.py
+++ b/module/plugins/hoster/LetitbitNet.py
@@ -12,7 +12,8 @@ import urlparse
from module.plugins.internal.utils import json
from module.network.RequestFactory import getURL as get_url
from module.plugins.captcha.ReCaptcha import ReCaptcha
-from module.plugins.internal.SimpleHoster import SimpleHoster, seconds_to_midnight
+from module.plugins.internal.SimpleHoster import SimpleHoster
+from module.plugins.internal.utils import seconds_to_midnight
def api_response(url):
@@ -35,7 +36,7 @@ def get_info(urls):
class LetitbitNet(SimpleHoster):
__name__ = "LetitbitNet"
__type__ = "hoster"
- __version__ = "0.35"
+ __version__ = "0.36"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(letitbit|shareflare)\.net/download/.+'
diff --git a/module/plugins/hoster/LinksnappyCom.py b/module/plugins/hoster/LinksnappyCom.py
index a57f0f830..9ac1053c2 100644
--- a/module/plugins/hoster/LinksnappyCom.py
+++ b/module/plugins/hoster/LinksnappyCom.py
@@ -10,7 +10,7 @@ from module.plugins.internal.utils import json
class LinksnappyCom(MultiHoster):
__name__ = "LinksnappyCom"
__type__ = "hoster"
- __version__ = "0.14"
+ __version__ = "0.15"
__status__ = "testing"
__pattern__ = r'https?://(?:[^/]+\.)?linksnappy\.com'
@@ -23,7 +23,8 @@ class LinksnappyCom(MultiHoster):
__description__ = """Linksnappy.com multi-hoster plugin"""
__license__ = "GPLv3"
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __authors__ = [("stickell", "l.stickell@yahoo.it"),
+ ("Bilal Ghouri", None )]
def handle_premium(self, pyfile):
@@ -33,7 +34,7 @@ class LinksnappyCom(MultiHoster):
'username': self.account.user,
'password': self.account.get_login('password')})
- r = self.load("http://linksnappy.com/api/linkgen",
+ r = self.load("https://linksnappy.com/api/linkgen",
post={'genLinks': json_params})
self.log_debug("JSON data: " + r)
diff --git a/module/plugins/hoster/NitroflareCom.py b/module/plugins/hoster/NitroflareCom.py
index 7970ae460..9ca6ab187 100644
--- a/module/plugins/hoster/NitroflareCom.py
+++ b/module/plugins/hoster/NitroflareCom.py
@@ -29,6 +29,7 @@ class NitroflareCom(SimpleHoster):
OFFLINE_PATTERN = r'>File doesn\'t exist'
LINK_PREMIUM_PATTERN = LINK_FREE_PATTERN = r'(https?://[\w\-]+\.nitroflare\.com/.+?)"'
+ DIRECT_LINK = False
RECAPTCHA_KEY = "6Lenx_USAAAAAF5L1pmTWvWcH73dipAEzNnmNLgy"
PREMIUM_ONLY_PATTERN = r'This file is available with Premium only'
diff --git a/module/plugins/hoster/OneFichierCom.py b/module/plugins/hoster/OneFichierCom.py
index b657fe484..ef6f49da3 100644
--- a/module/plugins/hoster/OneFichierCom.py
+++ b/module/plugins/hoster/OneFichierCom.py
@@ -9,10 +9,10 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class OneFichierCom(SimpleHoster):
__name__ = "OneFichierCom"
__type__ = "hoster"
- __version__ = "0.95"
+ __version__ = "0.97"
__status__ = "testing"
- __pattern__ = r'https?://(?:www\.)?(?:\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)(?:/\?\w+)?'
+ __pattern__ = r'https?://(?:www\.)?(?:\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)(?:/\?\w+)?'
__config__ = [("activated" , "bool", "Activated" , True),
("use_premium" , "bool", "Use premium account if available" , True),
("fallback" , "bool", "Fallback to free download if premium fails" , True),
@@ -28,22 +28,24 @@ class OneFichierCom(SimpleHoster):
("stickell", "l.stickell@yahoo.it"),
("Elrick69", "elrick69[AT]rocketmail[DOT]com"),
("Walter Purcaro", "vuolter@gmail.com"),
- ("Ludovic Lehmann", "ludo.lehmann@gmail.com")]
+ ("Ludovic Lehmann", "ludo.lehmann@gmail.com"),
+ ("GammaC0de", "nitzo2001[AT]yahoo[DOT]com")]
+ DISPOSITION = False #@TODO: Remove disposition in 0.4.10
URL_REPLACEMENTS = [("https:", "http:")] #@TODO: Remove in 0.4.10
- COOKIES = [("1fichier.com", "LG", "en")]
+ COOKIES = [("1fichier.com", "LG", "en")]
- 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*<'
-
- WAIT_PATTERN = r'>You must wait \d+ minutes'
+ 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*<'
+ LINK_PATTERN = r'<a href="(.+?)".*>Click here to download the file</a>'
+ WAIT_PATTERN = r'>You must wait \d+ minutes'
def setup(self):
- self.multiDL = self.premium
+ self.multiDL = self.premium
self.resume_download = True
@@ -52,7 +54,7 @@ class OneFichierCom(SimpleHoster):
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()))
+ headers = dict((k.lower(), v) for k,v in re.findall(r"(?P<name>.+?): (?P<value>.+?)\r?\n", get_url(redirect, just_header=True)))
if 'location' in headers and headers['location']:
redirect = headers['location']
else:
@@ -94,13 +96,16 @@ class OneFichierCom(SimpleHoster):
if "pass" in inputs:
inputs['pass'] = self.get_password()
- inputs['submit'] = "Download"
+ inputs['dl_no_ssl'] = "on"
+
+ self.data=self.load(url, post=inputs)
- self.download(url, post=inputs)
+ m = re.search(self.LINK_PATTERN, self.data)
+ if m:
+ self.link = m.group(1)
def handle_premium(self, pyfile):
- self.download(pyfile.url, post={'did': 0, 'dl_no_ssl': "on"})
+ self.download(pyfile.url, post={'did': 0, 'dl_no_ssl': "on"}, disposition=False) #@TODO: Remove disposition in 0.4.10
-getInfo = create_getInfo(OneFichierCom)
diff --git a/module/plugins/hoster/RyushareCom.py b/module/plugins/hoster/RyushareCom.py
index 79822877d..392b18348 100644
--- a/module/plugins/hoster/RyushareCom.py
+++ b/module/plugins/hoster/RyushareCom.py
@@ -6,7 +6,7 @@ from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo
class RyushareCom(DeadHoster):
__name__ = "RyushareCom"
__type__ = "hoster"
- __version__ = "0.17"
+ __version__ = "0.30"
__status__ = "stable"
__pattern__ = r'http://(?:www\.)?ryushare\.com/\w+'
diff --git a/module/plugins/hoster/ShareonlineBiz.py b/module/plugins/hoster/ShareonlineBiz.py
index 24c25a43a..06c9f6cfe 100644
--- a/module/plugins/hoster/ShareonlineBiz.py
+++ b/module/plugins/hoster/ShareonlineBiz.py
@@ -12,7 +12,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class ShareonlineBiz(SimpleHoster):
__name__ = "ShareonlineBiz"
__type__ = "hoster"
- __version__ = "0.63"
+ __version__ = "0.64"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(share-online\.biz|egoshare\.com)/(download\.php\?id=|dl/)(?P<ID>\w+)'
diff --git a/module/plugins/hoster/UgouploadNet.py b/module/plugins/hoster/UgouploadNet.py
new file mode 100644
index 000000000..fec2e11d1
--- /dev/null
+++ b/module/plugins/hoster/UgouploadNet.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from module.plugins.captcha.ReCaptcha import ReCaptcha
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+
+class UgouploadNet(SimpleHoster):
+ __name__ = "UgouploadNet"
+ __type__ = "hoster"
+ __version__ = "0.02"
+ __status__ = "testing"
+
+ __pattern__ = r'https?://(?:www)?\.ugoupload\.net/\w{4}/.+'
+ __config__ = [("activated" , "bool", "Activated" , True),
+ ("use_premium" , "bool", "Use premium account if available" , True),
+ ("fallback" , "bool", "Fallback to free download if premium fails" , True),
+ ("chk_filesize", "bool", "Check file size" , True),
+ ("max_wait" , "int" , "Reconnect if waiting time is greater than minutes", 10 )]
+
+ __description__ = """ugoupload.net hoster plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("GammaC0de", "nitzo2001[AT]yahoo[DOT]com")]
+
+
+ NAME_PATTERN = r'<div class="heading-1 animated".*>(.+?)</div>'
+ SIZE_PATTERN = r'\((?P<S>[\d.,]+) (?P<U>[\w^_]+)\)<br/>'
+
+ WAIT_PATTERN = r'var seconds = (\d+);'
+ LINK_FREE_PATTERN = r"<a class='btn btn-free' href='(.+?)'"
+
+ RECAPTCHA_KEY = "6LeuAc4SAAAAAOSry8eo2xW64K1sjHEKsQ5CaS10"
+
+
+ def setup(self):
+ self.resume_download = False
+ self.multiDL = False
+
+
+ def handle_free(self, pyfile):
+ if self.req.code == 404:
+ self.offline()
+
+ self.check_errors()
+
+ m = re.search(self.LINK_FREE_PATTERN, self.data)
+ if m:
+ recaptcha = ReCaptcha(self)
+ response, challenge = recaptcha.challenge(self.RECAPTCHA_KEY)
+
+ self.download(m.group(1), post={'recaptcha_challenge_field': challenge,
+ 'recaptcha_response_field': response,
+ 'submit': "Submit",
+ 'submitted': "1",
+ 'd': "1"})
diff --git a/module/plugins/hoster/UpleaCom.py b/module/plugins/hoster/UpleaCom.py
index d1656556b..c552adc0f 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.15"
+ __version__ = "0.16"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?uplea\.com/dl/\w{15}'
@@ -36,7 +36,7 @@ class UpleaCom(XFSHoster):
LINK_PATTERN = r'"(https?://\w+\.uplea\.com/anonym/.*?)"'
PREMIUM_ONLY_PATTERN = r'You need to have a Premium subscription to download this file'
- WAIT_PATTERN = r'timeText: ?([\d.]+),'
+ WAIT_PATTERN = r'timeText: ?(\d+),'
STEP_PATTERN = r'<a href="(/step/.+)">'
@@ -54,8 +54,7 @@ class UpleaCom(XFSHoster):
self.data = self.load(urlparse.urljoin("http://uplea.com/", m.group(1)))
m = re.search(self.WAIT_PATTERN, self.data)
- if m is not None:
- self.log_debug("Waiting %s seconds" % m.group(1))
+ if m:
self.wait(m.group(1), True)
self.retry()
@@ -64,7 +63,10 @@ class UpleaCom(XFSHoster):
self.error(_("LINK_PATTERN not found"))
self.link = m.group(1)
- self.wait(15)
+
+ m = re.search(r".ulCounter\({'timer':(\d+)}\)", self.data)
+ if m:
+ self.wait(m.group(1))
getInfo = create_getInfo(UpleaCom)
diff --git a/module/plugins/hoster/UpstoreNet.py b/module/plugins/hoster/UpstoreNet.py
index c863dff9d..4fcf6dcfa 100644
--- a/module/plugins/hoster/UpstoreNet.py
+++ b/module/plugins/hoster/UpstoreNet.py
@@ -9,16 +9,10 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class UpstoreNet(SimpleHoster):
__name__ = "UpstoreNet"
__type__ = "hoster"
- __version__ = "0.09"
+ __version__ = "0.10"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?upstore\.net/'
- __config__ = [("activated" , "bool", "Activated" , True),
- ("use_premium" , "bool", "Use premium account if available" , True),
- ("fallback" , "bool", "Fallback to free download if premium fails" , True),
- ("chk_filesize", "bool", "Check file size" , True),
- ("max_wait" , "int" , "Reconnect if waiting time is greater than minutes", 10 )]
-
__description__ = """Upstore.Net File Download Hoster"""
__license__ = "GPLv3"
__authors__ = [("igel", "igelkun@myopera.com")]
@@ -27,9 +21,12 @@ class UpstoreNet(SimpleHoster):
INFO_PATTERN = r'<div class="comment">.*?</div>\s*\n<h2 style="margin:0">(?P<N>.*?)</h2>\s*\n<div class="comment">\s*\n\s*(?P<S>[\d.,]+) (?P<U>[\w^_]+)'
OFFLINE_PATTERN = r'<span class="error">File not found</span>'
+ LONG_WAIT_PATTERN = r'You should wait (\d+) min. before downloading next'
WAIT_PATTERN = r'var sec = (\d+)'
CHASH_PATTERN = r'<input type="hidden" name="hash" value="(.+?)">'
LINK_FREE_PATTERN = r'<a href="(https?://.*?)" target="_blank"><b>'
+ WRONG_CAPTCHA_PATTERN = r'Wrong captcha'
+ PREMIUM_ONLY_PATTERN = r'available only for Premium'
def handle_free(self, pyfile):
@@ -42,6 +39,7 @@ class UpstoreNet(SimpleHoster):
#: Continue to stage2
post_data = {'hash': chash, 'free': 'Slow download'}
self.data = self.load(pyfile.url, post=post_data)
+ self.check_errors()
#: STAGE 2: solv captcha and wait
#: First get the infos we need: recaptcha key and wait time
@@ -64,13 +62,31 @@ class UpstoreNet(SimpleHoster):
self.data = self.load(pyfile.url, post=post_data)
- #: STAGE 3: get direct link
+ # check whether the captcha was wrong
+ m = re.search(self.WRONG_CAPTCHA_PATTERN, self.data, re.S)
+ if m is not None:
+ continue
+
+
+ # STAGE 3: get direct link or wait time
+ m = re.search(self.LONG_WAIT_PATTERN, self.data, re.S)
+ if m is not None:
+ wait_time = 60* int(m.group(1))
+ self.wantReconnect = True
+ self.retry(wait=wait_time, reason=_("Please wait to download this file"))
+
m = re.search(self.LINK_FREE_PATTERN, self.data, re.S)
if m is not None:
+ self.link = m.group(1)
break
- if m is not None:
- self.link = m.group(1)
+ # sometimes, upstore just restarts the countdown without saying anything...
+ # in this case we'll just wait 1h and retry
+ self.wantReconnect = True
+ self.retry(wait_time=3600, reason=_("Upstore doesn't like us today"))
+
+
getInfo = create_getInfo(UpstoreNet)
+