From 81508f295cffc40c479fe72f24bdf1dbbedf5d92 Mon Sep 17 00:00:00 2001 From: mkaay Date: Wed, 5 May 2010 23:03:43 +0200 Subject: refactored plugins, new plugin manager --- module/plugins/decrypter/SerienjunkiesOrg.py | 217 --------------------------- 1 file changed, 217 deletions(-) delete mode 100644 module/plugins/decrypter/SerienjunkiesOrg.py (limited to 'module/plugins/decrypter/SerienjunkiesOrg.py') 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("Dauer|Sprache|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("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 -- cgit v1.2.3