diff options
Diffstat (limited to 'pyload/plugins/hoster')
91 files changed, 959 insertions, 69 deletions
diff --git a/pyload/plugins/hoster/AlldebridCom.py b/pyload/plugins/hoster/AlldebridCom.py index 7a7831204..7e5adf8ba 100644 --- a/pyload/plugins/hoster/AlldebridCom.py +++ b/pyload/plugins/hoster/AlldebridCom.py @@ -6,7 +6,7 @@ from random import randrange  from urllib import unquote  from pyload.utils import json_loads -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import parseFileSize diff --git a/pyload/plugins/hoster/BasePlugin.py b/pyload/plugins/hoster/BasePlugin.py index 761ee720c..dd8540578 100644 --- a/pyload/plugins/hoster/BasePlugin.py +++ b/pyload/plugins/hoster/BasePlugin.py @@ -6,7 +6,7 @@ from urllib import unquote  from urlparse import urlparse  from pyload.network.HTTPRequest import BadHeader -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import html_unescape, remove_chars diff --git a/pyload/plugins/hoster/BillionuploadsCom.py b/pyload/plugins/hoster/BillionuploadsCom.py index b20ace0f1..d5d8c6c0f 100644 --- a/pyload/plugins/hoster/BillionuploadsCom.py +++ b/pyload/plugins/hoster/BillionuploadsCom.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class BillionuploadsCom(XFSHoster): diff --git a/pyload/plugins/hoster/CramitIn.py b/pyload/plugins/hoster/CramitIn.py index 4f1ad1ff1..2d2c0cbbc 100644 --- a/pyload/plugins/hoster/CramitIn.py +++ b/pyload/plugins/hoster/CramitIn.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class CramitIn(XFSHoster): diff --git a/pyload/plugins/hoster/DailymotionCom.py b/pyload/plugins/hoster/DailymotionCom.py index 4fb0b2222..4b3af6e8f 100644 --- a/pyload/plugins/hoster/DailymotionCom.py +++ b/pyload/plugins/hoster/DailymotionCom.py @@ -5,7 +5,7 @@ import re  from pyload.datatypes.PyFile import statusMap  from pyload.utils import json_loads  from pyload.network.RequestFactory import getURL -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  def getInfo(urls): diff --git a/pyload/plugins/hoster/DebridItaliaCom.py b/pyload/plugins/hoster/DebridItaliaCom.py index 1b6b1b030..81cf0b830 100644 --- a/pyload/plugins/hoster/DebridItaliaCom.py +++ b/pyload/plugins/hoster/DebridItaliaCom.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class DebridItaliaCom(Hoster): diff --git a/pyload/plugins/hoster/EasybytezCom.py b/pyload/plugins/hoster/EasybytezCom.py index 3103d403f..b233e52ee 100644 --- a/pyload/plugins/hoster/EasybytezCom.py +++ b/pyload/plugins/hoster/EasybytezCom.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class EasybytezCom(XFSHoster): diff --git a/pyload/plugins/hoster/EnteruploadCom.py b/pyload/plugins/hoster/EnteruploadCom.py new file mode 100644 index 000000000..c535d6f48 --- /dev/null +++ b/pyload/plugins/hoster/EnteruploadCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class EnteruploadCom(DeadHoster): +    __name__    = "EnteruploadCom" +    __type__    = "hoster" +    __version__ = "0.02" + +    __pattern__ = r'http://(?:www\.)?enterupload\.com/\w+' + +    __description__ = """EnterUpload.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("zoidberg", "zoidberg@mujmail.cz")] + + +getInfo = create_getInfo(EnteruploadCom) diff --git a/pyload/plugins/hoster/FastixRu.py b/pyload/plugins/hoster/FastixRu.py index 2e01dc216..0e353f362 100644 --- a/pyload/plugins/hoster/FastixRu.py +++ b/pyload/plugins/hoster/FastixRu.py @@ -6,7 +6,7 @@ from random import randrange  from urllib import unquote  from pyload.utils import json_loads -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class FastixRu(Hoster): diff --git a/pyload/plugins/hoster/FileParadoxIn.py b/pyload/plugins/hoster/FileParadoxIn.py index 7ed0e9b7a..174aa7211 100644 --- a/pyload/plugins/hoster/FileParadoxIn.py +++ b/pyload/plugins/hoster/FileParadoxIn.py @@ -2,7 +2,7 @@  import re -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class FileParadoxIn(XFSHoster): diff --git a/pyload/plugins/hoster/FileSharkPl.py b/pyload/plugins/hoster/FileSharkPl.py new file mode 100644 index 000000000..99cb4b51b --- /dev/null +++ b/pyload/plugins/hoster/FileSharkPl.py @@ -0,0 +1,137 @@ +# -*- coding: utf-8 -*- + +import re + +from urlparse import urljoin + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class FileSharkPl(SimpleHoster): +    __name__    = "FileSharkPl" +    __type__    = "hoster" +    __version__ = "0.01" + +    __pattern__ = r'http://(?:www\.)?fileshark\.pl/pobierz/\d{6}/\w{5}' + +    __description__ = """FileShark.pl hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("prOq", None), +                       ("Walter Purcaro", "vuolter@gmail.com")] + + +    NAME_PATTERN = r'<h2 class="name-file">(?P<N>.+)</h2>' +    SIZE_PATTERN = r'<p class="size-file">(.*?)<strong>(?P<S>\d+\.?\d*)\s(?P<U>\w+)</strong></p>' + +    OFFLINE_PATTERN = '(P|p)lik zosta. (usuni.ty|przeniesiony)' + +    DOWNLOAD_ALERT = r'<p class="lead text-center alert alert-warning">(.*?)</p>' +    IP_BLOCKED_PATTERN = 'Strona jest dost.pna wy..cznie dla u.ytkownik.w znajduj.cych si. na terenie Polski' +    DOWNLOAD_SLOTS_ERROR_PATTERN = r'Osi.gni.to maksymaln. liczb. .ci.ganych jednocze.nie plik.w\.' + +    DOWNLOAD_URL_FREE = r'<a href="(.*?)" class="btn-upload-free">' +    DOWNLOAD_URL_PREMIUM = r'<a href="(.*?)" class="btn-upload-premium">' + +    SECONDS_PATTERN = r'var timeToDownload = (\d+);' + +    CAPTCHA_IMG_PATTERN = '<img src="data:image/jpeg;base64,(.*?)" title="captcha"' +    CAPTCHA_TOKEN_PATTERN = r'name="form\[_token\]" value="(.*?)" />' + + +    def setup(self): +        self.resumeDownload = True +        if self.premium: +            self.multiDL = True +            self.limitDL = 20 +        else: +            self.multiDL = False + + +    def prepare(self): +        super(FileSharkPl, self).prepare() + +        m = re.search(self.DOWNLOAD_ALERT, self.html): +        if m: +            return + +        alert = m.group(1) + +        if re.match(self.IP_BLOCKED_PATTERN, alert): +            self.fail(_("Only connections from Polish IP are allowed")) +        elif re.match(self.DOWNLOAD_SLOTS_ERROR_PATTERN, alert): +            self.logInfo(_("No free download slots available")) +            self.retry(10, 30 * 60, _("Still no free download slots available")) +        else: +            self.logInfo(alert) +            self.retry(10, 10 * 60, _("Try again later")) + + +    #@NOTE: handlePremium method was never been tested +    def handlePremium(self): +        self.logDebug("Premium accounts support in experimental modus!") +        m = re.search(self.DOWNLOAD_URL_PREMIUM, self.html) +        file_url = urljoin("http://fileshark.pl", m.group(1)) + +        self.download(file_url, disposition=True) +        self.checkDownload() + + +    def handleFree(self): +        m = re.search(self.DOWNLOAD_URL_FREE, self.html) +        if m is None: +            self.error(_("Download url not found")) + +        file_url = urljoin("http://fileshark.pl", m.group(1)) + +        m = re.search(self.SECONDS_PATTERN, self.html) +        if m: +            seconds = int(m.group(1)) +            self.logDebug("Wait %s seconds" % seconds) +            self.wait(seconds + 2) + +        action, inputs = self.parseHtmlForm('action=""') +        m = re.search(self.CAPTCHA_TOKEN_PATTERN, self.html) +        if m is None: +            self.retry(reason=_("Captcha form not found")) + +        inputs['form[_token]'] = m.group(1) + +        m = re.search(self.CAPTCHA_IMG_PATTERN, self.html) +        if m is None: +            self.retry(reason=_("Captcha image not found")) + +        tmp_load = self.load +        self.load = self.decode64  #: injects decode64 inside decryptCaptcha + +        inputs['form[captcha]'] = self.decryptCaptcha(m.group(1), imgtype='jpeg') +        inputs['form[start]'] = "" + +        self.load = tmp_load + +        self.download(file_url, post=inputs, cookies=True, disposition=True) +        self.checkDownload() + + +    def checkDownload(self): +        check = super(FileSharkPl, self).checkDownload({ +            'wrong_captcha': re.compile(r'<label for="form_captcha" generated="true" class="error">(.*?)</label>'), +            'wait_pattern': re.compile(self.SECONDS_PATTERN), +            'DL-found': re.compile('<a href="(.*)">') +        }) + +        if check == "DL-found": +            self.correctCaptcha() + +        elif check == "wrong_captcha": +            self.invalidCaptcha() +            self.retry(10, 1, _("Wrong captcha solution")) + +        elif check == "wait_pattern": +            self.retry() + + +    def decode64(self, data, *args, **kwargs): +        return data.decode("base64") + + +getInfo = create_getInfo(FileSharkPl) diff --git a/pyload/plugins/hoster/FileomCom.py b/pyload/plugins/hoster/FileomCom.py index 2b6fd34db..128039c2e 100644 --- a/pyload/plugins/hoster/FileomCom.py +++ b/pyload/plugins/hoster/FileomCom.py @@ -3,7 +3,7 @@  # Test links:  # http://fileom.com/gycaytyzdw3g/random.bin.html -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class FileomCom(XFSHoster): diff --git a/pyload/plugins/hoster/FilerioCom.py b/pyload/plugins/hoster/FilerioCom.py index 52906fc67..f4582b876 100644 --- a/pyload/plugins/hoster/FilerioCom.py +++ b/pyload/plugins/hoster/FilerioCom.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class FilerioCom(XFSHoster): diff --git a/pyload/plugins/hoster/FilesMailRu.py b/pyload/plugins/hoster/FilesMailRu.py index c92cd0b0c..1c7c8059e 100644 --- a/pyload/plugins/hoster/FilesMailRu.py +++ b/pyload/plugins/hoster/FilesMailRu.py @@ -3,7 +3,7 @@  import re  from pyload.network.RequestFactory import getURL -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.plugins.Plugin import chunks diff --git a/pyload/plugins/hoster/FileserveCom.py b/pyload/plugins/hoster/FileserveCom.py index 88da94c46..f486d9f56 100644 --- a/pyload/plugins/hoster/FileserveCom.py +++ b/pyload/plugins/hoster/FileserveCom.py @@ -4,7 +4,7 @@ import re  from pyload.utils import json_loads  from pyload.network.RequestFactory import getURL -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.plugins.Plugin import chunks  from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight  from pyload.plugins.internal.CaptchaService import ReCaptcha diff --git a/pyload/plugins/hoster/FileshareInUa.py b/pyload/plugins/hoster/FileshareInUa.py index 08e10dccb..8bb1a72c5 100644 --- a/pyload/plugins/hoster/FileshareInUa.py +++ b/pyload/plugins/hoster/FileshareInUa.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo  class FileshareInUa(DeadHoster): diff --git a/pyload/plugins/hoster/FilesonicCom.py b/pyload/plugins/hoster/FilesonicCom.py new file mode 100644 index 000000000..323983169 --- /dev/null +++ b/pyload/plugins/hoster/FilesonicCom.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class FilesonicCom(DeadHoster): +    __name__    = "FilesonicCom" +    __type__    = "hoster" +    __version__ = "0.35" + +    __pattern__ = r'http://(?:www\.)?filesonic\.com/file/\w+' + +    __description__ = """Filesonic.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("jeix", "jeix@hasnomail.de"), +                       ("paulking", None)] + + +getInfo = create_getInfo(FilesonicCom) diff --git a/pyload/plugins/hoster/FiredriveCom.py b/pyload/plugins/hoster/FiredriveCom.py index 0e3a4e847..3c7ec25f2 100644 --- a/pyload/plugins/hoster/FiredriveCom.py +++ b/pyload/plugins/hoster/FiredriveCom.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo  class FiredriveCom(DeadHoster): diff --git a/pyload/plugins/hoster/FreakshareCom.py b/pyload/plugins/hoster/FreakshareCom.py index 1759df04a..bd31a5752 100644 --- a/pyload/plugins/hoster/FreakshareCom.py +++ b/pyload/plugins/hoster/FreakshareCom.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight  from pyload.plugins.internal.CaptchaService import ReCaptcha diff --git a/pyload/plugins/hoster/FreeWayMe.py b/pyload/plugins/hoster/FreeWayMe.py index 219333055..128f54958 100644 --- a/pyload/plugins/hoster/FreeWayMe.py +++ b/pyload/plugins/hoster/FreeWayMe.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class FreeWayMe(Hoster): diff --git a/pyload/plugins/hoster/Ftp.py b/pyload/plugins/hoster/Ftp.py index a846d2b5f..2baec064b 100644 --- a/pyload/plugins/hoster/Ftp.py +++ b/pyload/plugins/hoster/Ftp.py @@ -6,7 +6,7 @@ import re  from urllib import quote, unquote  from urlparse import urlparse -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class Ftp(Hoster): diff --git a/pyload/plugins/hoster/GamefrontCom.py b/pyload/plugins/hoster/GamefrontCom.py index f502d9af4..195c6037e 100644 --- a/pyload/plugins/hoster/GamefrontCom.py +++ b/pyload/plugins/hoster/GamefrontCom.py @@ -3,7 +3,7 @@  import re  from pyload.network.RequestFactory import getURL -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import parseFileSize diff --git a/pyload/plugins/hoster/HugefilesNet.py b/pyload/plugins/hoster/HugefilesNet.py index cbbce119f..e955d53cc 100644 --- a/pyload/plugins/hoster/HugefilesNet.py +++ b/pyload/plugins/hoster/HugefilesNet.py @@ -3,7 +3,7 @@  # Test links:  # http://hugefiles.net/prthf9ya4w6s -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class HugefilesNet(XFSHoster): diff --git a/pyload/plugins/hoster/HundredEightyUploadCom.py b/pyload/plugins/hoster/HundredEightyUploadCom.py index 48e0c3d8c..717344efa 100644 --- a/pyload/plugins/hoster/HundredEightyUploadCom.py +++ b/pyload/plugins/hoster/HundredEightyUploadCom.py @@ -3,7 +3,7 @@  # Test links:  # http://180upload.com/js9qdm6kjnrs -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class HundredEightyUploadCom(XFSHoster): diff --git a/pyload/plugins/hoster/JunocloudMe.py b/pyload/plugins/hoster/JunocloudMe.py new file mode 100644 index 000000000..dc5620e0e --- /dev/null +++ b/pyload/plugins/hoster/JunocloudMe.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo + + +class JunocloudMe(XFSHoster): +    __name__    = "JunocloudMe" +    __type__    = "hoster" +    __version__ = "0.03" + +    __pattern__ = r'http://(?:\w+\.)?junocloud\.me/\w{12}' + +    __description__ = """Junocloud.me hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("guidobelix", "guidobelix@hotmail.it")] + + +    HOSTER_DOMAIN = "junocloud.me" + +    URL_REPLACEMENTS = [(r'/(?:embed-)?(\w{12}).*', r'/\1'), (r'//www\.', "//dl3.")] + +    NAME_PATTERN = r'<p class="request_file">http://junocloud.me/w{12}/(?P<N>.+?)</p>' +    SIZE_PATTERN = r'<p class="request_filesize">Size: (?P<S>[\d.,]+) (?P<U>[\w^_]+)</p>' + +    OFFLINE_PATTERN = r'>No such file with this filename<' +    TEMP_OFFLINE_PATTERN = r'The page may have been renamed, removed or be temporarily unavailable.<' + + +getInfo = create_getInfo(JunocloudMe) diff --git a/pyload/plugins/hoster/Keep2shareCc.py b/pyload/plugins/hoster/Keep2shareCc.py new file mode 100644 index 000000000..6fc521107 --- /dev/null +++ b/pyload/plugins/hoster/Keep2shareCc.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- + +import re + +from urlparse import urlparse, urljoin + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class Keep2shareCc(SimpleHoster): +    __name__    = "Keep2shareCc" +    __type__    = "hoster" +    __version__ = "0.15" + +    __pattern__ = r'https?://(?:www\.)?(keep2share|k2s|keep2s)\.cc/file/(?P<ID>\w+)' + +    __description__ = """Keep2share.cc hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("stickell", "l.stickell@yahoo.it"), +                       ("Walter Purcaro", "vuolter@gmail.com")] + + +    NAME_PATTERN = r'File: <span>(?P<N>.+)</span>' +    SIZE_PATTERN = r'Size: (?P<S>[^<]+)</div>' +    OFFLINE_PATTERN = r'File not found or deleted|Sorry, this file is blocked or deleted|Error 404' + +    LINK_PATTERN = r'To download this file with slow speed, use <a href="([^"]+)">this link</a>' +    CAPTCHA_PATTERN = r'src="(/file/captcha\.html.+?)"' +    WAIT_PATTERN = r'Please wait ([\d:]+) to download this file' +    MULTIDL_ERROR = r'Free account does not allow to download more than one file at the same time' + + +    def handleFree(self): +        self.sanitize_url() +        self.html = self.load(self.pyfile.url) + +        self.fid = re.search(r'<input type="hidden" name="slow_id" value="([^"]+)">', self.html).group(1) +        self.html = self.load(self.pyfile.url, post={'yt0': '', 'slow_id': self.fid}) + +        if ">Downloading is not possible" in self.html: +            self.fail("Free user can't download large files") + +        m = re.search(r"function download\(\){.*window\.location\.href = '([^']+)';", self.html, re.S) +        if m:  # Direct mode +            self.startDownload(m.group(1)) +        else: +            self.handleCaptcha() + +            self.wait(30) + +            self.html = self.load(self.pyfile.url, post={'uniqueId': self.fid, 'free': 1}) + +            m = re.search(self.WAIT_PATTERN, self.html) +            if m: +                self.logDebug("Hoster told us to wait for %s" % m.group(1)) +                # string to time convert courtesy of https://stackoverflow.com/questions/10663720 +                ftr = [3600, 60, 1] +                wait_time = sum([a * b for a, b in zip(ftr, map(int, m.group(1).split(':')))]) +                self.wait(wait_time, True) +                self.retry() + +            m = re.search(self.MULTIDL_ERROR, self.html) +            if m: +                # if someone is already downloading on our line, wait 30min and retry +                self.logDebug("Already downloading, waiting for 30 minutes") +                self.wait(30 * 60, True) +                self.retry() + +            m = re.search(self.LINK_PATTERN, self.html) +            if m is None: +                self.error(_("LINK_PATTERN not found")) +            self.startDownload(m.group(1)) + + +    def handleCaptcha(self): +        recaptcha = ReCaptcha(self) + +        for _i in xrange(5): +            post_data = {'free': 1, +                         'freeDownloadRequest': 1, +                         'uniqueId': self.fid, +                         'yt0': ''} + +            m = re.search(self.CAPTCHA_PATTERN, self.html) +            if m: +                captcha_url = urljoin(self.base_url, m.group(1)) +                post_data['CaptchaForm[code]'] = self.decryptCaptcha(captcha_url) +            else: +                challenge, response = recaptcha.challenge() +                post_data.update({'recaptcha_challenge_field': challenge, +                                  'recaptcha_response_field': response}) + +            self.html = self.load(self.pyfile.url, post=post_data) + +            if 'recaptcha' not in self.html: +                self.correctCaptcha() +                break +            else: +                self.invalidCaptcha() +        else: +            self.fail(_("All captcha attempts failed")) + + +    def startDownload(self, url): +        d = urljoin(self.base_url, url) +        self.download(d, disposition=True) + + +    def sanitize_url(self): +        header = self.load(self.pyfile.url, just_header=True) +        if 'location' in header: +            self.pyfile.url = header['location'] +        p = urlparse(self.pyfile.url) +        self.base_url = "%s://%s" % (p.scheme, p.hostname) + + +getInfo = create_getInfo(Keep2shareCc) diff --git a/pyload/plugins/hoster/KickloadCom.py b/pyload/plugins/hoster/KickloadCom.py new file mode 100644 index 000000000..88c84390c --- /dev/null +++ b/pyload/plugins/hoster/KickloadCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class KickloadCom(DeadHoster): +    __name__    = "KickloadCom" +    __type__    = "hoster" +    __version__ = "0.21" + +    __pattern__ = r'http://(?:www\.)?kickload\.com/get/.+' + +    __description__ = """Kickload.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("mkaay", "mkaay@mkaay.de")] + + +getInfo = create_getInfo(KickloadCom) diff --git a/pyload/plugins/hoster/LinksnappyCom.py b/pyload/plugins/hoster/LinksnappyCom.py index c37006ac2..d7991ff3c 100644 --- a/pyload/plugins/hoster/LinksnappyCom.py +++ b/pyload/plugins/hoster/LinksnappyCom.py @@ -5,7 +5,7 @@ import re  from urlparse import urlsplit  from pyload.utils import json_loads, json_dumps -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class LinksnappyCom(Hoster): diff --git a/pyload/plugins/hoster/LomafileCom.py b/pyload/plugins/hoster/LomafileCom.py index a7ce39d37..2c4bd37a2 100644 --- a/pyload/plugins/hoster/LomafileCom.py +++ b/pyload/plugins/hoster/LomafileCom.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class LomafileCom(XFSHoster): diff --git a/pyload/plugins/hoster/MegaCoNz.py b/pyload/plugins/hoster/MegaCoNz.py new file mode 100644 index 000000000..f09a5cdd5 --- /dev/null +++ b/pyload/plugins/hoster/MegaCoNz.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- + +import random +import re + +from array import array +from base64 import standard_b64decode +from os import remove + +from Crypto.Cipher import AES +from Crypto.Util import Counter +from pycurl import SSL_CIPHER_LIST + +from pyload.utils import json_loads, json_dumps +from pyload.plugins.internal.Hoster import Hoster + + +class MegaCoNz(Hoster): +    __name__    = "MegaCoNz" +    __type__    = "hoster" +    __version__ = "0.16" + +    __pattern__ = r'https?://(\w+\.)?mega\.co\.nz/#!([\w!-]+)' + +    __description__ = """Mega.co.nz hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("RaNaN", "ranan@pyload.org")] + + +    API_URL = "https://g.api.mega.co.nz/cs?id=%d" +    FILE_SUFFIX = ".crypted" + + +    def b64_decode(self, data): +        data = data.replace("-", "+").replace("_", "/") +        return standard_b64decode(data + '=' * (-len(data) % 4)) + + +    def getCipherKey(self, key): +        """ Construct the cipher key from the given data """ +        a = array("I", key) +        key_array = array("I", [a[0] ^ a[4], a[1] ^ a[5], a[2] ^ a[6], a[3] ^ a[7]]) +        return key_array + + +    def callApi(self, **kwargs): +        """ Dispatch a call to the api, see https://mega.co.nz/#developers """ +        # generate a session id, no idea where to obtain elsewhere +        uid = random.randint(10 << 9, 10 ** 10) + +        res = self.load(self.API_URL % uid, post=json_dumps([kwargs])) +        self.logDebug("Api Response: " + res) +        return json_loads(res) + + +    def decryptAttr(self, data, key): +        cbc = AES.new(self.getCipherKey(key), AES.MODE_CBC, "\0" * 16) +        attr = cbc.decrypt(self.b64_decode(data)) +        self.logDebug("Decrypted Attr: " + attr) +        if not attr.startswith("MEGA"): +            self.fail(_("Decryption failed")) + +        # Data is padded, 0-bytes must be stripped +        return json_loads(re.search(r'{.+?}', attr).group(0)) + + +    def decryptFile(self, key): +        """  Decrypts the file at lastDownload` """ + +        # upper 64 bit of counter start +        n = key[16:24] + +        # convert counter to long and shift bytes +        ctr = Counter.new(128, initial_value=long(n.encode("hex"), 16) << 64) +        cipher = AES.new(self.getCipherKey(key), AES.MODE_CTR, counter=ctr) + +        self.pyfile.setStatus("decrypting") + +        file_crypted = self.lastDownload +        file_decrypted = file_crypted.rsplit(self.FILE_SUFFIX)[0] + +        try: +            f = open(file_crypted, "rb") +            df = open(file_decrypted, "wb") +        except IOError, e: +            self.fail(str(e)) + +        # TODO: calculate CBC-MAC for checksum + +        size = 2 ** 15  # buffer size, 32k +        while True: +            buf = f.read(size) +            if not buf: +                break + +            df.write(cipher.decrypt(buf)) + +        f.close() +        df.close() +        remove(file_crypted) + +        self.lastDownload = file_decrypted + + +    def process(self, pyfile): +        key = None + +        # match is guaranteed because plugin was chosen to handle url +        node = re.match(self.__pattern__, pyfile.url).group(2) +        if "!" in node: +            node, key = node.split("!") + +        self.logDebug("File id: %s | Key: %s" % (node, key)) + +        if not key: +            self.fail(_("No file key provided in the URL")) + +        # g is for requesting a download url +        # this is similar to the calls in the mega js app, documentation is very bad +        dl = self.callApi(a="g", g=1, p=node, ssl=1)[0] + +        if "e" in dl: +            e = dl['e'] +            # ETEMPUNAVAIL (-18): Resource temporarily not available, please try again later +            if e == -18: +                self.retry() +            else: +                self.fail(_("Error code:") + e) + +        # TODO: map other error codes, e.g +        # EACCESS (-11): Access violation (e.g., trying to write to a read-only share) + +        key = self.b64_decode(key) +        attr = self.decryptAttr(dl['at'], key) + +        pyfile.name = attr['n'] + self.FILE_SUFFIX + +        self.req.http.c.setopt(SSL_CIPHER_LIST, "RC4-MD5:DEFAULT") + +        self.download(dl['g']) +        self.decryptFile(key) + +        # Everything is finished and final name can be set +        pyfile.name = attr['n'] diff --git a/pyload/plugins/hoster/MegaDebridEu.py b/pyload/plugins/hoster/MegaDebridEu.py index aaf5419e6..1354c0e3d 100644 --- a/pyload/plugins/hoster/MegaDebridEu.py +++ b/pyload/plugins/hoster/MegaDebridEu.py @@ -5,7 +5,7 @@ import re  from urllib import unquote_plus  from pyload.utils import json_loads -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class MegaDebridEu(Hoster): diff --git a/pyload/plugins/hoster/MegaRapidCz.py b/pyload/plugins/hoster/MegaRapidCz.py new file mode 100644 index 000000000..f49d0e1ec --- /dev/null +++ b/pyload/plugins/hoster/MegaRapidCz.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import HTTPHEADER + +from pyload.network.RequestFactory import getRequest +from pyload.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo + + +def getInfo(urls): +    h = getRequest() +    h.c.setopt(HTTPHEADER, +               ["Accept: text/html", +                "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"]) + +    for url in urls: +        html = h.load(url, decode=True) +        yield parseFileInfo(MegaRapidCz, url, html) + + +class MegaRapidCz(SimpleHoster): +    __name__    = "MegaRapidCz" +    __type__    = "hoster" +    __version__ = "0.54" + +    __pattern__ = r'http://(?:www\.)?(share|mega)rapid\.cz/soubor/\d+/.+' + +    __description__ = """MegaRapid.cz hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("MikyWoW", "mikywow@seznam.cz"), +                       ("zoidberg", "zoidberg@mujmail.cz"), +                       ("stickell", "l.stickell@yahoo.it"), +                       ("Walter Purcaro", "vuolter@gmail.com")] + + +    NAME_PATTERN = r'<h1[^>]*><span[^>]*>(?:<a[^>]*>)?(?P<N>[^<]+)' +    SIZE_PATTERN = r'<td class="i">Velikost:</td>\s*<td class="h"><strong>\s*(?P<S>[\d.,]+) (?P<U>[\w^_]+)</strong></td>' +    OFFLINE_PATTERN = ur'Nastala chyba 404|Soubor byl smazán' + +    FORCE_CHECK_TRAFFIC = True + +    LINK_PATTERN = r'<a href="([^"]+)" title="Stahnout">([^<]+)</a>' +    ERR_LOGIN_PATTERN = ur'<div class="error_div"><strong>Stahování je přístupné pouze přihlášeným uživatelům' +    ERR_CREDIT_PATTERN = ur'<div class="error_div"><strong>Stahování zdarma je možné jen přes náš' + + +    def setup(self): +        self.chunkLimit = 1 + + +    def handlePremium(self): +        try: +            self.html = self.load(self.pyfile.url, decode=True) +        except BadHeader, e: +            self.account.relogin(self.user) +            self.retry(wait_time=60, reason=str(e)) + +        m = re.search(self.LINK_PATTERN, self.html) +        if m: +            link = m.group(1) +            self.logDebug("Premium link: %s" % link) +            self.download(link, disposition=True) +        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")) +            else: +                self.fail(_("Download link not found")) diff --git a/pyload/plugins/hoster/MegacrypterCom.py b/pyload/plugins/hoster/MegacrypterCom.py index 4633f7d30..1ebd167f3 100644 --- a/pyload/plugins/hoster/MegacrypterCom.py +++ b/pyload/plugins/hoster/MegacrypterCom.py @@ -4,7 +4,7 @@ import re  from pyload.utils import json_loads, json_dumps -from module.plugins.hoster.MegaCoNz import MegaCoNz +from pyload.plugins.hoster.MegaCoNz import MegaCoNz  class MegacrypterCom(MegaCoNz): diff --git a/pyload/plugins/hoster/MegauploadCom.py b/pyload/plugins/hoster/MegauploadCom.py new file mode 100644 index 000000000..20700a3d0 --- /dev/null +++ b/pyload/plugins/hoster/MegauploadCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class MegauploadCom(DeadHoster): +    __name__    = "MegauploadCom" +    __type__    = "hoster" +    __version__ = "0.31" + +    __pattern__ = r'http://(?:www\.)?megaupload\.com/\?.*&?(d|v)=\w+' + +    __description__ = """Megaupload.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("spoob", "spoob@pyload.org")] + + +getInfo = create_getInfo(MegauploadCom) diff --git a/pyload/plugins/hoster/MegavideoCom.py b/pyload/plugins/hoster/MegavideoCom.py new file mode 100644 index 000000000..aa458fa2c --- /dev/null +++ b/pyload/plugins/hoster/MegavideoCom.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class MegavideoCom(DeadHoster): +    __name__    = "MegavideoCom" +    __type__    = "hoster" +    __version__ = "0.21" + +    __pattern__ = r'http://(?:www\.)?megavideo\.com/\?.*&?(d|v)=\w+' + +    __description__ = """Megavideo.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("jeix", "jeix@hasnomail.de"), +                       ("mkaay", "mkaay@mkaay.de")] + + +getInfo = create_getInfo(MegavideoCom) diff --git a/pyload/plugins/hoster/MovReelCom.py b/pyload/plugins/hoster/MovReelCom.py index cd1626f6f..39216a295 100644 --- a/pyload/plugins/hoster/MovReelCom.py +++ b/pyload/plugins/hoster/MovReelCom.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class MovReelCom(XFSHoster): diff --git a/pyload/plugins/hoster/MyfastfileCom.py b/pyload/plugins/hoster/MyfastfileCom.py index 14ed51ea7..cb1148389 100644 --- a/pyload/plugins/hoster/MyfastfileCom.py +++ b/pyload/plugins/hoster/MyfastfileCom.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import json_loads diff --git a/pyload/plugins/hoster/MyvideoDe.py b/pyload/plugins/hoster/MyvideoDe.py index 886896056..8fbd3a772 100644 --- a/pyload/plugins/hoster/MyvideoDe.py +++ b/pyload/plugins/hoster/MyvideoDe.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import html_unescape diff --git a/pyload/plugins/hoster/NahrajCz.py b/pyload/plugins/hoster/NahrajCz.py new file mode 100644 index 000000000..188e2b1e4 --- /dev/null +++ b/pyload/plugins/hoster/NahrajCz.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class NahrajCz(DeadHoster): +    __name__    = "NahrajCz" +    __type__    = "hoster" +    __version__ = "0.21" + +    __pattern__ = r'http://(?:www\.)?nahraj\.cz/content/download/.+' + +    __description__ = """Nahraj.cz hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("zoidberg", "zoidberg@mujmail.cz")] + + +getInfo = create_getInfo(NahrajCz) diff --git a/pyload/plugins/hoster/NetloadIn.py b/pyload/plugins/hoster/NetloadIn.py index 5889611bb..b517fe455 100644 --- a/pyload/plugins/hoster/NetloadIn.py +++ b/pyload/plugins/hoster/NetloadIn.py @@ -5,7 +5,7 @@ import re  from time import sleep, time  from pyload.network.RequestFactory import getURL -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.plugins.Plugin import chunks diff --git a/pyload/plugins/hoster/NosuploadCom.py b/pyload/plugins/hoster/NosuploadCom.py index b2255ca54..f70d64551 100644 --- a/pyload/plugins/hoster/NosuploadCom.py +++ b/pyload/plugins/hoster/NosuploadCom.py @@ -2,7 +2,7 @@  import re -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class NosuploadCom(XFSHoster): diff --git a/pyload/plugins/hoster/NovafileCom.py b/pyload/plugins/hoster/NovafileCom.py index 5c4dfddca..8d0677ec8 100644 --- a/pyload/plugins/hoster/NovafileCom.py +++ b/pyload/plugins/hoster/NovafileCom.py @@ -4,7 +4,7 @@  # http://novafile.com/vfun4z6o2cit  # http://novafile.com/s6zrr5wemuz4 -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class NovafileCom(XFSHoster): diff --git a/pyload/plugins/hoster/NowVideoAt.py b/pyload/plugins/hoster/NowVideoAt.py new file mode 100644 index 000000000..e17e2e256 --- /dev/null +++ b/pyload/plugins/hoster/NowVideoAt.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class NowVideoAt(SimpleHoster): +    __name__    = "NowVideoAt" +    __type__    = "hoster" +    __version__ = "0.05" + +    __pattern__ = r'http://(?:www\.)?nowvideo\.(at|ch|co|eu|sx)/(video|mobile/#/videos)/(?P<ID>\w+)' + +    __description__ = """NowVideo.at hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("Walter Purcaro", "vuolter@gmail.com")] + + +    URL_REPLACEMENTS = [(__pattern__, r'http://www.nowvideo.at/video/\g<ID>')] + +    NAME_PATTERN = r'<h4>(?P<N>.+?)<' +    OFFLINE_PATTERN = r'>This file no longer exists' + +    LINK_FREE_PATTERN = r'<source src="(.+?)"' +    LINK_PREMIUM_PATTERN = r'<div id="content_player" >\s*<a href="(.+?)"' + + +    def setup(self): +        self.multiDL = True +        self.resumeDownload = True + + +    def handleFree(self): +        self.html = self.load("http://www.nowvideo.at/mobile/video.php", get={'id': self.info['ID']}) + +        m = re.search(self.LINK_FREE_PATTERN, self.html) +        if m is None: +            self.error(_("Free download link not found")) + +        self.download(m.group(1)) + + +getInfo = create_getInfo(NowVideoAt) diff --git a/pyload/plugins/hoster/OboomCom.py b/pyload/plugins/hoster/OboomCom.py index fcd73bf05..db2c0597b 100644 --- a/pyload/plugins/hoster/OboomCom.py +++ b/pyload/plugins/hoster/OboomCom.py @@ -6,7 +6,7 @@  import re  from pyload.utils import json_loads -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.plugins.internal.CaptchaService import ReCaptcha diff --git a/pyload/plugins/hoster/OronCom.py b/pyload/plugins/hoster/OronCom.py new file mode 100644 index 000000000..22d6e65b3 --- /dev/null +++ b/pyload/plugins/hoster/OronCom.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class OronCom(DeadHoster): +    __name__    = "OronCom" +    __type__    = "hoster" +    __version__ = "0.14" + +    __pattern__ = r'https?://(?:www\.)?oron\.com/\w{12}' + +    __description__ = """Oron.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("chrox", "chrox@pyload.org"), +                       ("DHMH", "DHMH@pyload.org")] + + +getInfo = create_getInfo(OronCom) diff --git a/pyload/plugins/hoster/OverLoadMe.py b/pyload/plugins/hoster/OverLoadMe.py index 1cea276f9..3d07db489 100644 --- a/pyload/plugins/hoster/OverLoadMe.py +++ b/pyload/plugins/hoster/OverLoadMe.py @@ -6,7 +6,7 @@ from random import randrange  from urllib import unquote  from pyload.utils import json_loads -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import parseFileSize diff --git a/pyload/plugins/hoster/PandaplaNet.py b/pyload/plugins/hoster/PandaplaNet.py new file mode 100644 index 000000000..f3124aaae --- /dev/null +++ b/pyload/plugins/hoster/PandaplaNet.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class PandaplaNet(DeadHoster): +    __name__    = "PandaplaNet" +    __type__    = "hoster" +    __version__ = "0.03" + +    __pattern__ = r'http://(?:www\.)?pandapla\.net/\w{12}' + +    __description__ = """Pandapla.net hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("t4skforce", "t4skforce1337[AT]gmail[DOT]com")] + + +getInfo = create_getInfo(PandaplaNet) diff --git a/pyload/plugins/hoster/PornhostCom.py b/pyload/plugins/hoster/PornhostCom.py index d83b61c10..7fd337485 100644 --- a/pyload/plugins/hoster/PornhostCom.py +++ b/pyload/plugins/hoster/PornhostCom.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class PornhostCom(Hoster): diff --git a/pyload/plugins/hoster/PornhubCom.py b/pyload/plugins/hoster/PornhubCom.py index d6cbdfede..d89d24029 100644 --- a/pyload/plugins/hoster/PornhubCom.py +++ b/pyload/plugins/hoster/PornhubCom.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class PornhubCom(Hoster): diff --git a/pyload/plugins/hoster/PremiumTo.py b/pyload/plugins/hoster/PremiumTo.py index 680b0b25d..305b6d1d1 100644 --- a/pyload/plugins/hoster/PremiumTo.py +++ b/pyload/plugins/hoster/PremiumTo.py @@ -4,7 +4,7 @@ from os import remove  from os.path import exists  from urllib import quote -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import fs_encode diff --git a/pyload/plugins/hoster/PremiumizeMe.py b/pyload/plugins/hoster/PremiumizeMe.py index 9eab5888c..177edb1a0 100644 --- a/pyload/plugins/hoster/PremiumizeMe.py +++ b/pyload/plugins/hoster/PremiumizeMe.py @@ -1,7 +1,7 @@  # -*- coding: utf-8 -*-  from pyload.utils import json_loads -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class PremiumizeMe(Hoster): diff --git a/pyload/plugins/hoster/PrzeklejPl.py b/pyload/plugins/hoster/PrzeklejPl.py new file mode 100644 index 000000000..5e6056adb --- /dev/null +++ b/pyload/plugins/hoster/PrzeklejPl.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class PrzeklejPl(DeadHoster): +    __name__    = "PrzeklejPl" +    __type__    = "hoster" +    __version__ = "0.11" + +    __pattern__ = r'http://(?:www\.)?przeklej\.pl/plik/.+' + +    __description__ = """Przeklej.pl hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("zoidberg", "zoidberg@mujmail.cz")] + + +getInfo = create_getInfo(PrzeklejPl) diff --git a/pyload/plugins/hoster/RPNetBiz.py b/pyload/plugins/hoster/RPNetBiz.py index 30c6773bd..b2a89f48a 100644 --- a/pyload/plugins/hoster/RPNetBiz.py +++ b/pyload/plugins/hoster/RPNetBiz.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import json_loads diff --git a/pyload/plugins/hoster/RapidfileshareNet.py b/pyload/plugins/hoster/RapidfileshareNet.py new file mode 100644 index 000000000..849ac2b68 --- /dev/null +++ b/pyload/plugins/hoster/RapidfileshareNet.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo + + +class RapidfileshareNet(XFSHoster): +    __name__    = "RapidfileshareNet" +    __type__    = "hoster" +    __version__ = "0.02" + +    __pattern__ = r'http://(?:www\.)?rapidfileshare\.net/\w{12}' + +    __description__ = """Rapidfileshare.net hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("guidobelix", "guidobelix@hotmail.it")] + + +    HOSTER_DOMAIN = "rapidfileshare.net" + +    NAME_PATTERN = r'<input type="hidden" name="fname" value="(?P<N>.+?)">' +    SIZE_PATTERN = r'>http://www.rapidfileshare.net/\w+?</font> \((?P<S>[\d.,]+) (?P<U>[\w^_]+)\)</font>' + +    OFFLINE_PATTERN = r'>No such file with this filename' +    TEMP_OFFLINE_PATTERN = r'The page may have been renamed, removed or be temporarily unavailable.<' + + +    def handlePremium(self): +        self.fail(_("Premium download not implemented")) + + +getInfo = create_getInfo(RapidfileshareNet) diff --git a/pyload/plugins/hoster/RapidshareCom.py b/pyload/plugins/hoster/RapidshareCom.py index 4b8633fef..97823ba96 100644 --- a/pyload/plugins/hoster/RapidshareCom.py +++ b/pyload/plugins/hoster/RapidshareCom.py @@ -3,7 +3,7 @@  import re  from pyload.network.RequestFactory import getURL -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  def getInfo(urls): diff --git a/pyload/plugins/hoster/RarefileNet.py b/pyload/plugins/hoster/RarefileNet.py index cd60ec65e..fb54f6431 100644 --- a/pyload/plugins/hoster/RarefileNet.py +++ b/pyload/plugins/hoster/RarefileNet.py @@ -2,7 +2,7 @@  import re -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  from pyload.utils import html_unescape diff --git a/pyload/plugins/hoster/RealdebridCom.py b/pyload/plugins/hoster/RealdebridCom.py index f839dc613..2ca9970e0 100644 --- a/pyload/plugins/hoster/RealdebridCom.py +++ b/pyload/plugins/hoster/RealdebridCom.py @@ -7,7 +7,7 @@ from urllib import quote, unquote  from time import time  from pyload.utils import json_loads -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import parseFileSize diff --git a/pyload/plugins/hoster/RedtubeCom.py b/pyload/plugins/hoster/RedtubeCom.py index 50c6ba9e3..b1272f68d 100644 --- a/pyload/plugins/hoster/RedtubeCom.py +++ b/pyload/plugins/hoster/RedtubeCom.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import html_unescape diff --git a/pyload/plugins/hoster/RehostTo.py b/pyload/plugins/hoster/RehostTo.py index 08c43ad16..d9855c796 100644 --- a/pyload/plugins/hoster/RehostTo.py +++ b/pyload/plugins/hoster/RehostTo.py @@ -2,7 +2,7 @@  from urllib import quote, unquote -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class RehostTo(Hoster): diff --git a/pyload/plugins/hoster/RyushareCom.py b/pyload/plugins/hoster/RyushareCom.py index f41e4bfbf..ab6bf1017 100644 --- a/pyload/plugins/hoster/RyushareCom.py +++ b/pyload/plugins/hoster/RyushareCom.py @@ -5,7 +5,7 @@  import re -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  from pyload.plugins.internal.CaptchaService import SolveMedia diff --git a/pyload/plugins/hoster/SecureUploadEu.py b/pyload/plugins/hoster/SecureUploadEu.py index 64e6456a9..6939e4f6d 100644 --- a/pyload/plugins/hoster/SecureUploadEu.py +++ b/pyload/plugins/hoster/SecureUploadEu.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class SecureUploadEu(XFSHoster): diff --git a/pyload/plugins/hoster/SendmywayCom.py b/pyload/plugins/hoster/SendmywayCom.py index 4254922fc..cb82fb19d 100644 --- a/pyload/plugins/hoster/SendmywayCom.py +++ b/pyload/plugins/hoster/SendmywayCom.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class SendmywayCom(XFSHoster): diff --git a/pyload/plugins/hoster/ShareonlineBiz.py b/pyload/plugins/hoster/ShareonlineBiz.py index 73d598cb9..0769cfe17 100644 --- a/pyload/plugins/hoster/ShareonlineBiz.py +++ b/pyload/plugins/hoster/ShareonlineBiz.py @@ -5,7 +5,7 @@ import re  from time import time  from pyload.network.RequestFactory import getURL -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.plugins.Plugin import chunks  from pyload.plugins.internal.CaptchaService import ReCaptcha diff --git a/pyload/plugins/hoster/ShareplaceCom.py b/pyload/plugins/hoster/ShareplaceCom.py index 60d93698a..6e11de05c 100644 --- a/pyload/plugins/hoster/ShareplaceCom.py +++ b/pyload/plugins/hoster/ShareplaceCom.py @@ -4,7 +4,7 @@ import re  from urllib import unquote -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class ShareplaceCom(Hoster): diff --git a/pyload/plugins/hoster/SharingmatrixCom.py b/pyload/plugins/hoster/SharingmatrixCom.py new file mode 100644 index 000000000..7459c12b6 --- /dev/null +++ b/pyload/plugins/hoster/SharingmatrixCom.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class SharingmatrixCom(DeadHoster): +    __name__    = "SharingmatrixCom" +    __type__    = "hoster" +    __version__ = "0.01" + +    __pattern__ = r'http://(?:www\.)?sharingmatrix\.com/file/\w+' + +    __description__ = """Sharingmatrix.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("jeix", "jeix@hasnomail.de"), +                       ("paulking", None)] + + +getInfo = create_getInfo(SharingmatrixCom) diff --git a/pyload/plugins/hoster/SimplyPremiumCom.py b/pyload/plugins/hoster/SimplyPremiumCom.py index 0840bc8a2..bb431a5dd 100644 --- a/pyload/plugins/hoster/SimplyPremiumCom.py +++ b/pyload/plugins/hoster/SimplyPremiumCom.py @@ -4,7 +4,7 @@ import re  from datetime import datetime, timedelta -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight diff --git a/pyload/plugins/hoster/SimplydebridCom.py b/pyload/plugins/hoster/SimplydebridCom.py index f34f15ab2..5092be32a 100644 --- a/pyload/plugins/hoster/SimplydebridCom.py +++ b/pyload/plugins/hoster/SimplydebridCom.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class SimplydebridCom(Hoster): diff --git a/pyload/plugins/hoster/SockshareCom.py b/pyload/plugins/hoster/SockshareCom.py index aabb8dcd1..d28041893 100644 --- a/pyload/plugins/hoster/SockshareCom.py +++ b/pyload/plugins/hoster/SockshareCom.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo  class SockshareCom(DeadHoster): diff --git a/pyload/plugins/hoster/SoundcloudCom.py b/pyload/plugins/hoster/SoundcloudCom.py index 601ac774c..284f6ffbf 100644 --- a/pyload/plugins/hoster/SoundcloudCom.py +++ b/pyload/plugins/hoster/SoundcloudCom.py @@ -3,7 +3,7 @@  import pycurl  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class SoundcloudCom(Hoster): diff --git a/pyload/plugins/hoster/StorageTo.py b/pyload/plugins/hoster/StorageTo.py new file mode 100644 index 000000000..5ba0c145b --- /dev/null +++ b/pyload/plugins/hoster/StorageTo.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class StorageTo(DeadHoster): +    __name__    = "StorageTo" +    __type__    = "hoster" +    __version__ = "0.01" + +    __pattern__ = r'http://(?:www\.)?storage\.to/get/.+' + +    __description__ = """Storage.to hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("mkaay", "mkaay@mkaay.de")] + + +getInfo = create_getInfo(StorageTo) diff --git a/pyload/plugins/hoster/StreamCz.py b/pyload/plugins/hoster/StreamCz.py index 1c1b7f204..c9d00863e 100644 --- a/pyload/plugins/hoster/StreamCz.py +++ b/pyload/plugins/hoster/StreamCz.py @@ -3,7 +3,7 @@  import re  from pyload.network.RequestFactory import getURL -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  def getInfo(urls): diff --git a/pyload/plugins/hoster/StreamcloudEu.py b/pyload/plugins/hoster/StreamcloudEu.py index 4f854a99d..5ae617095 100644 --- a/pyload/plugins/hoster/StreamcloudEu.py +++ b/pyload/plugins/hoster/StreamcloudEu.py @@ -2,7 +2,7 @@  import re -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class StreamcloudEu(XFSHoster): diff --git a/pyload/plugins/hoster/TusfilesNet.py b/pyload/plugins/hoster/TusfilesNet.py index 8c80455b4..3b4d7f92c 100644 --- a/pyload/plugins/hoster/TusfilesNet.py +++ b/pyload/plugins/hoster/TusfilesNet.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class TusfilesNet(XFSHoster): diff --git a/pyload/plugins/hoster/UnrestrictLi.py b/pyload/plugins/hoster/UnrestrictLi.py index e807cda98..583a9f4a9 100644 --- a/pyload/plugins/hoster/UnrestrictLi.py +++ b/pyload/plugins/hoster/UnrestrictLi.py @@ -5,7 +5,7 @@ import re  from datetime import datetime, timedelta  from pyload.utils import json_loads -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  def secondsToMidnight(gmt=0): diff --git a/pyload/plugins/hoster/UpleaCom.py b/pyload/plugins/hoster/UpleaCom.py new file mode 100644 index 000000000..7a7dd4870 --- /dev/null +++ b/pyload/plugins/hoster/UpleaCom.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- + +import re + +from urlparse import urljoin + +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo + + +class UpleaCom(XFSHoster): +    __name__    = "UpleaCom" +    __type__    = "hoster" +    __version__ = "0.04" + +    __pattern__ = r'https?://(?:www\.)?uplea\.com/dl/\w{15}' + +    __description__ = """Uplea.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("Redleon", None)] + + +    HOSTER_DOMAIN = "uplea.com" + +    NAME_PATTERN = r'class="agmd size18">(?P<N>.+?)<' +    SIZE_PATTERN = r'size14">(?P<S>[\d.,]+) (?P<U>[\w^_])</span>' + +    OFFLINE_PATTERN = r'>You followed an invalid or expired link' + +    LINK_PATTERN = r'"(http?://\w+\.uplea\.com/anonym/.*?)"' +    WAIT_PATTERN = r'timeText:([\d.]+),' +    VARS_PATTERN = r'class="cel_tbl_step1_foot">\s<a href="(/step/.+)">' + + +    def setup(self): +        self.multiDL = False +        self.chunkLimit = 1 +        self.resumeDownload = True + + +    def handleFree(self): +        m = re.search(self.VARS_PATTERN, self.html) +        if m is None: +            self.error("VARS_PATTERN not found") + +        self.html = self.load(urljoin("http://uplea.com/", m.groups(1))) + +        m = re.search(self.WAIT_PATTERN, self.html) +        if m: +            self.wait(m.group(1), True) +            self.retry() + +        m = re.search(self.LINK_PATTERN, self.html) +        if m is None: +            self.error("LINK_PATTERN not found") + +        self.wait(15) +        self.download(m.group(1), disposition=True) + + +getInfo = create_getInfo(UpleaCom) diff --git a/pyload/plugins/hoster/UploadboxCom.py b/pyload/plugins/hoster/UploadboxCom.py new file mode 100644 index 000000000..89a525c67 --- /dev/null +++ b/pyload/plugins/hoster/UploadboxCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class UploadboxCom(DeadHoster): +    __name__    = "Uploadbox" +    __type__    = "hoster" +    __version__ = "0.05" + +    __pattern__ = r'http://(?:www\.)?uploadbox\.com/files/.+' + +    __description__ = """UploadBox.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("zoidberg", "zoidberg@mujmail.cz")] + + +getInfo = create_getInfo(UploadboxCom) diff --git a/pyload/plugins/hoster/UploadedTo.py b/pyload/plugins/hoster/UploadedTo.py index 17e3a4a0f..c39df66ea 100644 --- a/pyload/plugins/hoster/UploadedTo.py +++ b/pyload/plugins/hoster/UploadedTo.py @@ -9,7 +9,7 @@ import re  from time import sleep  from pyload.network.RequestFactory import getURL -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.plugins.Plugin import chunks  from pyload.plugins.internal.CaptchaService import ReCaptcha  from pyload.utils import html_unescape, parseFileSize diff --git a/pyload/plugins/hoster/UploadhereCom.py b/pyload/plugins/hoster/UploadhereCom.py new file mode 100644 index 000000000..ba02ea07c --- /dev/null +++ b/pyload/plugins/hoster/UploadhereCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class UploadhereCom(DeadHoster): +    __name__    = "UploadhereCom" +    __type__    = "hoster" +    __version__ = "0.12" + +    __pattern__ = r'http://(?:www\.)?uploadhere\.com/\w{10}' + +    __description__ = """Uploadhere.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("zoidberg", "zoidberg@mujmail.cz")] + + +getInfo = create_getInfo(UploadhereCom) diff --git a/pyload/plugins/hoster/UploadkingCom.py b/pyload/plugins/hoster/UploadkingCom.py new file mode 100644 index 000000000..e9c536819 --- /dev/null +++ b/pyload/plugins/hoster/UploadkingCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class UploadkingCom(DeadHoster): +    __name__    = "UploadkingCom" +    __type__    = "hoster" +    __version__ = "0.14" + +    __pattern__ = r'http://(?:www\.)?uploadking\.com/\w{10}' + +    __description__ = """UploadKing.com hoster plugin""" +    __license__     = "GPLv3" +    __authors__     = [("zoidberg", "zoidberg@mujmail.cz")] + + +getInfo = create_getInfo(UploadkingCom) diff --git a/pyload/plugins/hoster/UptoboxCom.py b/pyload/plugins/hoster/UptoboxCom.py index eeddb96b6..5aaa73286 100644 --- a/pyload/plugins/hoster/UptoboxCom.py +++ b/pyload/plugins/hoster/UptoboxCom.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class UptoboxCom(XFSHoster): diff --git a/pyload/plugins/hoster/VeehdCom.py b/pyload/plugins/hoster/VeehdCom.py index 440993a67..326d0a18e 100644 --- a/pyload/plugins/hoster/VeehdCom.py +++ b/pyload/plugins/hoster/VeehdCom.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class VeehdCom(Hoster): diff --git a/pyload/plugins/hoster/VidPlayNet.py b/pyload/plugins/hoster/VidPlayNet.py index 76af05edd..3a5198973 100644 --- a/pyload/plugins/hoster/VidPlayNet.py +++ b/pyload/plugins/hoster/VidPlayNet.py @@ -3,7 +3,7 @@  # Test links:  # BigBuckBunny_320x180.mp4 - 61.7 Mb - http://vidplay.net/38lkev0h3jv0 -from module.plugins.internal.XFSHoster import XFSHoster, create_getInfo +from pyload.plugins.internal.XFSHoster import XFSHoster, create_getInfo  class VidPlayNet(XFSHoster): diff --git a/pyload/plugins/hoster/WebshareCz.py b/pyload/plugins/hoster/WebshareCz.py index fcdfd55bf..bb41fbd26 100644 --- a/pyload/plugins/hoster/WebshareCz.py +++ b/pyload/plugins/hoster/WebshareCz.py @@ -2,7 +2,7 @@  import re -from module.network.RequestFactory import getURL +from pyload.network.RequestFactory import getURL  from pyload.plugins.internal.SimpleHoster import SimpleHoster diff --git a/pyload/plugins/hoster/XHamsterCom.py b/pyload/plugins/hoster/XHamsterCom.py index acbcc2192..503022ec9 100644 --- a/pyload/plugins/hoster/XHamsterCom.py +++ b/pyload/plugins/hoster/XHamsterCom.py @@ -5,7 +5,7 @@ import re  from urllib import unquote  from pyload.utils import json_loads -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  def clean_json(json_expr): diff --git a/pyload/plugins/hoster/XVideosCom.py b/pyload/plugins/hoster/XVideosCom.py index 4fb288e51..9ab9e4484 100644 --- a/pyload/plugins/hoster/XVideosCom.py +++ b/pyload/plugins/hoster/XVideosCom.py @@ -4,7 +4,7 @@ import re  from urllib import unquote -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class XVideosCom(Hoster): diff --git a/pyload/plugins/hoster/Xdcc.py b/pyload/plugins/hoster/Xdcc.py index dc0cbc27a..de750ee58 100644 --- a/pyload/plugins/hoster/Xdcc.py +++ b/pyload/plugins/hoster/Xdcc.py @@ -10,7 +10,7 @@ from os import makedirs  from os.path import exists, join  from select import select -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.utils import safe_join diff --git a/pyload/plugins/hoster/YoupornCom.py b/pyload/plugins/hoster/YoupornCom.py index 46c7ebfcb..6063e6816 100644 --- a/pyload/plugins/hoster/YoupornCom.py +++ b/pyload/plugins/hoster/YoupornCom.py @@ -2,7 +2,7 @@  import re -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class YoupornCom(Hoster): diff --git a/pyload/plugins/hoster/YourfilesTo.py b/pyload/plugins/hoster/YourfilesTo.py index 9e21144b7..7cb94a2df 100644 --- a/pyload/plugins/hoster/YourfilesTo.py +++ b/pyload/plugins/hoster/YourfilesTo.py @@ -4,7 +4,7 @@ import re  from urllib import unquote -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class YourfilesTo(Hoster): diff --git a/pyload/plugins/hoster/YoutubeCom.py b/pyload/plugins/hoster/YoutubeCom.py index 0246d0997..7fdf848c1 100644 --- a/pyload/plugins/hoster/YoutubeCom.py +++ b/pyload/plugins/hoster/YoutubeCom.py @@ -6,7 +6,7 @@ import subprocess  from urllib import unquote -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  from pyload.plugins.internal.SimpleHoster import replace_patterns  from pyload.utils import html_unescape diff --git a/pyload/plugins/hoster/ZDF.py b/pyload/plugins/hoster/ZDF.py index 9d2ad446b..53939ae6c 100644 --- a/pyload/plugins/hoster/ZDF.py +++ b/pyload/plugins/hoster/ZDF.py @@ -4,7 +4,7 @@ import re  from xml.etree.ElementTree import fromstring -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  # Based on zdfm by Roland Beermann (http://github.com/enkore/zdfm/) diff --git a/pyload/plugins/hoster/ZeveraCom.py b/pyload/plugins/hoster/ZeveraCom.py index 769602964..c0c10215d 100644 --- a/pyload/plugins/hoster/ZeveraCom.py +++ b/pyload/plugins/hoster/ZeveraCom.py @@ -1,6 +1,6 @@  # -*- coding: utf-8 -*- -from pyload.plugins.base.Hoster import Hoster +from pyload.plugins.internal.Hoster import Hoster  class ZeveraCom(Hoster):  | 
