diff options
Diffstat (limited to 'module/plugins/decrypter/SerienjunkiesOrg.py')
| -rw-r--r-- | module/plugins/decrypter/SerienjunkiesOrg.py | 217 | 
1 files changed, 0 insertions, 217 deletions
diff --git a/module/plugins/decrypter/SerienjunkiesOrg.py b/module/plugins/decrypter/SerienjunkiesOrg.py deleted file mode 100644 index af95a9c78..000000000 --- a/module/plugins/decrypter/SerienjunkiesOrg.py +++ /dev/null @@ -1,217 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Plugin import Plugin -from module.BeautifulSoup import BeautifulSoup -from module.unescape import unescape -from module.DownloadThread import CaptchaError - -class SerienjunkiesOrg(Plugin): -    def __init__(self, parent): -        Plugin.__init__(self, parent) -        props = {} -        props['name'] = "SerienjunkiesOrg" -        props['type'] = "container" -        props['pattern'] = r"http://.*?serienjunkies.org/.*?" -        props['version'] = "0.2" -        props['description'] = """serienjunkies.org Container Plugin""" -        props['author_name'] = ("mkaay") -        props['author_mail'] = ("mkaay@mkaay.de") -        self.props = props -        self.parent = parent -        self.html = None -        self.multi_dl = False -         -        self.hosterMap = { -            "rc": "RapidshareCom", -            "ff": "FilefactoryCom", -            "ut": "UploadedTo", -            "ul": "UploadedTo", -            "nl": "NetloadIn", -            "rs": "RapidshareDe" -        } -        self.hosterMapReverse = dict((v,k) for k, v in self.hosterMap.iteritems()) -        episodePattern = re.compile("^http://download.serienjunkies.org/f-.*?.html$") -        oldStyleLink = re.compile("^http://serienjunkies.org/safe/(.*)$") -        if episodePattern.match(self.parent.url) or oldStyleLink.match(self.parent.url): -            self.decryptNow = False -        else: -            self.decryptNow = True -     -    def prepare(self, thread): -        pyfile = self.parent - -        self.want_reconnect = False - -        pyfile.status.exists = self.file_exists() - -        if not pyfile.status.exists: -            raise Exception, "File not found" -            return False - -        pyfile.status.filename = self.get_file_name() -             -        pyfile.status.waituntil = self.time_plus_wait -        pyfile.status.url = self.get_file_url() -        pyfile.status.want_reconnect = self.want_reconnect - -        thread.wait(self.parent) -         -        return True -     -    def get_file_name(self): -        showPattern = re.compile("^http://serienjunkies.org/serie/(.*)/$") -        seasonPattern = re.compile("^http://serienjunkies.org/.*?/(.*)/$") -        m = showPattern.match(self.parent.url) -        if not m: -            m = seasonPattern.match(self.parent.url) -        if m: -            return m.group(1) -        return "n/a" -     -    def getSJSrc(self, url): -        src = self.req.load(str(url)) -        if not src.find("Enter Serienjunkies") == -1: -            src = self.req.load(str(url)) -        return src -     -    def file_exists(self): -        return True -     -    def handleSeason(self, url): -        src = self.getSJSrc(url) -        soup = BeautifulSoup(src) -        post = soup.find("div", attrs={"class": "post-content"}) -        ps = post.findAll("p") -        hosterPattern = re.compile("^http://download\.serienjunkies\.org/f-.*?/([rcfultns]{2})_.*?\.html$") -        preferredHoster = self.get_config("preferredHoster").split(",") -        self.logger.debug("Preferred hoster: %s" % ", ".join(preferredHoster)) -        groups = {} -        gid = -1 -        seasonName = unescape(soup.find("a", attrs={"rel":"bookmark"}).string) -        for p in ps: -            if re.search("<strong>Dauer|<strong>Sprache|<strong>Format", str(p)): -                var = p.findAll("strong") -                opts = {"Dauer": "", "Uploader": "", "Sprache": "", "Format": "", u"Größe": ""} -                for v in var: -                    n = unescape(v.string) -                    val = v.nextSibling -                    val = val.encode("utf-8") -                    val = unescape(val) -                    val = val.replace("|", "").strip() -                    n = n.strip() -                    n = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', n) -                    val = val.strip() -                    val = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', val) -                    opts[n.strip()] = val.strip() -                gid += 1 -                groups[gid] = {} -                groups[gid]["ep"] = [] -                groups[gid]["opts"] = opts -            elif re.search("<strong>Download:", str(p)): -                links1 = p.findAll("a", attrs={"href": hosterPattern}) -                links2 = p.findAll("a", attrs={"href": re.compile("^http://serienjunkies.org/safe/.*$")}) -                for link in links1 + links2: -                    groups[gid]["ep"].append(link["href"]) -        packages = {} -        for g in groups.values(): -            links = [] -            linklist = g["ep"] -            package = "%s (%s, %s)" % (seasonName, g["opts"]["Format"], g["opts"]["Sprache"]) -            linkgroups = {} -            for link in linklist: -                key = re.sub("^http://download\.serienjunkies\.org/f-.*?/([rcfultns]{2})_", "", link) -                if not linkgroups.has_key(key): -                    linkgroups[key] = [] -                linkgroups[key].append(link) -            for group in linkgroups.values(): -                for pHoster in preferredHoster: -                    hmatch = False -                    for link in group: -                        m = hosterPattern.match(link) -                        if m: -                            if pHoster == self.hosterMap[m.group(1)]: -                                links.append(link) -                                hmatch = True -                                break -                    if hmatch: -                        break -            packages[package] = links -        return packages -     -    def handleEpisode(self, url): -        if not self.parent.core.isGUIConnected(): -            raise CaptchaError -        for i in range(3): -            src = self.getSJSrc(url) -            if not src.find("Du hast das Download-Limit überschritten! Bitte versuche es später nocheinmal.") == -1: -                self.logger.info("Downloadlimit reached") -                return False -            else: -                soup = BeautifulSoup(src) -                form = soup.find("form") -                captchaTag = soup.find(attrs={"src":re.compile("^/secure/")}) -                captchaUrl = "http://download.serienjunkies.org"+captchaTag["src"] -                captchaData = self.req.load(str(captchaUrl)) -                result = self.waitForCaptcha(captchaData, "png") -                url = "http://download.serienjunkies.org"+form["action"] -                sinp = form.find(attrs={"name":"s"}) -                 -                sj = self.req.load(str(url), post={'s': sinp["value"], 'c': result, 'action': "Download"}) -                 -                soup = BeautifulSoup(sj) -                rawLinks = soup.findAll(attrs={"action": re.compile("^http://download.serienjunkies.org/")}) -                 -                if not len(rawLinks) > 0: -                    continue -                 -                links = [] -                for link in rawLinks: -                    frameUrl = link["action"].replace("/go-", "/frame/go-") -                    links.append(self.handleFrame(frameUrl)) -                return links -     -    def handleOldStyleLink(self, url): -        if not self.parent.core.isGUIConnected(): -            raise CaptchaError -        for i in range(3): -            sj = self.req.load(str(url)) -            soup = BeautifulSoup(sj) -            form = soup.find("form", attrs={"action":re.compile("^http://serienjunkies.org")}) -            captchaTag = form.find(attrs={"src":re.compile("^/safe/secure/")}) -            captchaUrl = "http://serienjunkies.org"+captchaTag["src"] -            captchaData = self.req.load(str(captchaUrl)) -            result = self.waitForCaptcha(captchaData, "png") -            url = form["action"] -            sinp = form.find(attrs={"name":"s"}) -             -            self.req.load(str(url), post={'s': sinp["value"], 'c': result, 'dl.start': "Download"}, cookies=False, just_header=True) -            decrypted = self.req.lastEffectiveURL -            if decrypted == str(url): -                continue -            return [decrypted] -        return False -     -    def handleFrame(self, url): -        self.req.load(str(url), cookies=False, just_header=True) -        return self.req.lastEffectiveURL -     -    def proceed(self, url, location): -        links = False -        episodePattern = re.compile("^http://download.serienjunkies.org/f-.*?.html$") -        oldStyleLink = re.compile("^http://serienjunkies.org/safe/(.*)$") -        framePattern = re.compile("^http://download.serienjunkies.org/frame/go-.*?/$") -        showPattern = re.compile("^http://serienjunkies.org/serie/.*/$") -        seasonPattern = re.compile("^http://serienjunkies.org/.*?/.*/$") -        if framePattern.match(url): -            links = [self.handleFrame(url)] -        elif episodePattern.match(url): -            links = self.handleEpisode(url) -        elif oldStyleLink.match(url): -            links = self.handleOldStyleLink(url) -        elif showPattern.match(url): -            pass -        elif seasonPattern.match(url): -            links = self.handleSeason(url) -        self.links = links  | 
