Example #1
0
    def decrypt(self, pyfile):
        url = pyfile.url
        src = self.req.load(str(url))

        soup = BeautifulSoup(src)
        captchaTag = soup.find("img", attrs={"id": "captcha_image"})
        if captchaTag:
            captchaUrl = "http://rs-layer.com/" + captchaTag["src"]
            self.logDebug("Captcha URL: %s" % captchaUrl)
            result = self.decryptCaptcha(str(captchaUrl), imgtype="png")
            captchaInput = soup.find("input", attrs={"id": "captcha"})
            self.req.lastUrl = url
            src = self.req.load(str(url), post={'captcha_input': result, 'image_name': captchaTag["src"]})

        link_ids = re.findall(r"onclick=\"getFile\(\'([0-9]{7}-.{8})\'\);changeBackgroundColor", src)

        if not len(link_ids) > 0:
            self.retry()

        self.correctCaptcha()

        links = []
        for id in link_ids:
            self.logDebug("ID: %s" % id)
            new_link = unescape(re.search(r"<iframe style=\"width: 100%; height: 100%;\" src=\"(.*)\"></frame>",
                                          self.req.load("http://rs-layer.com/link-" + id + ".html")).group(1))
            self.logDebug("Link: %s" % new_link)
            links.append(new_link)

        self.packages.append((self.pyfile.package().name, links, self.pyfile.package().folder))
Example #2
0
    def handleShowDJ(self, url):
        src = self.getSJSrc(url)
        soup = BeautifulSoup(src)
        post = soup.find("div", attrs={"id": "page_post"})
        ps = post.findAll("p")
        found = unescape(soup.find("h2").find("a").string.split(' &#8211;')[0])
        if found:
            seasonName = found

        groups = {}
        gid = -1
        for p in ps:
            if re.search("<strong>Sprache|<strong>Format", str(p)):
                var = p.findAll("strong")
                opts = {"Sprache": "", "Format": ""}
                for v in var:
                    n = unescape(v.string).strip()
                    n = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', n)
                    if n.strip() not in opts:
                        continue
                    val = v.nextSibling
                    if not val:
                        continue
                    val = val.replace("|", "").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)):
                parts = str(p).split("<br />")
                if re.search("<strong>", parts[0]):
                    ename = re.search('<strong>(.*?)</strong>',parts[0]).group(1).strip().decode("utf-8").replace("&#8211;", "-")
                    groups[gid]["ep"][ename] = {}
                    parts.remove(parts[0])
                    for part in parts:
                        hostername = re.search(" \| ([-a-zA-Z0-9]+\.\w+)",part)
                        if hostername:
                            hostername = hostername.group(1)
                            groups[gid]["ep"][ename][hostername] = []
                            links = re.findall('href="(.*?)"',part)
                            for link in links:
                                groups[gid]["ep"][ename][hostername].append(link + "#hasName")

        links = []
        for g in groups.values():
            for ename in g["ep"]:
                links.extend(self.getpreferred(g["ep"][ename]))
                if self.getConfig("changeNameDJ") == "Episode":
                    self.packages.append((ename, links, ename))
                    links = []
            package = "%s (%s, %s)" % (seasonName, g["opts"]["Format"], g["opts"]["Sprache"])
            if self.getConfig("changeNameDJ") == "Format":
                self.packages.append((package, links, package))
                links = []
        if (self.getConfig("changeNameDJ") == "Packagename") or re.search("#hasName", url):
            self.core.files.addLinks(links, self.pyfile.package().id)
        elif (self.getConfig("changeNameDJ") == "Show") or not re.search("#hasName", url):
            self.packages.append((seasonName, links, seasonName))
Example #3
0
    def decrypt(self, pyfile):
        url = pyfile.url
        if re.match(self.__pattern__, url).group(1) == "d":
            self.req.http.c.setopt(FOLLOWLOCATION, 0)
            self.load(url)
            m = re.search("^Location: (.+)$", self.req.http.header,
                          re.MULTILINE)
            if m:
                self.core.files.addLinks([m.group(1)], pyfile.package().id)
            else:
                self.fail("Couldn't find forwarded Link")

        else:
            password = ""
            packageLinks = []
            postData = {"post-protect": "1"}

            self.html = self.load(url)

            if "link-password" in self.html:
                password = pyfile.package().password
                postData["link-password"] = password

            if "altcaptcha" in self.html:
                for _ in xrange(5):
                    m = re.search(self.__Solvemedia_pattern__, self.html)
                    if m:
                        captchaKey = m.group(1)
                        captcha = SolveMedia(self)
                        captchaProvider = "Solvemedia"
                    else:
                        self.fail("Error parsing captcha")

                    challenge, response = captcha.challenge(captchaKey)
                    postData["adcopy_challenge"] = challenge
                    postData["adcopy_response"] = response

                    self.html = self.load(url, post=postData)
                    if "The password you entered was incorrect" in self.html:
                        self.fail("Incorrect Password")
                    if not "The CAPTCHA code you entered was wrong" in self.html:
                        break

            pyfile.package().password = ""
            soup = BeautifulSoup(self.html)
            scripts = soup.findAll("script")
            for s in scripts:
                if "d_links" in s.text:
                    break
            m = re.search('d_links":(\[.*?\])', s.text)
            if m:
                linkDict = json_loads(m.group(1))
                for link in linkDict:
                    if not "http://" in link["full"]:
                        packageLinks.append("https://safelinking.net/d/" +
                                            link["full"])
                    else:
                        packageLinks.append(link["full"])

            self.core.files.addLinks(packageLinks, pyfile.package().id)
Example #4
0
 def handleCategoryDJ(self, url):
     package_links = []
     src = self.getSJSrc(url)
     soup = BeautifulSoup(src)
     content = soup.find("div", attrs={"id": "content"})
     for a in content.findAll("a", attrs={"rel": "bookmark"}):
         package_links.append(a['href'])
     self.core.files.addLinks(package_links, self.pyfile.package().id)
Example #5
0
 def handleLink(self, url):
     src = self.load(url)
     soup = BeautifulSoup(src)
     link = soup.find("iframe")["src"]
     if not link:
         self.logDebug('no links found - (Plugin out of date?)')
     else:
         self.core.files.addLinks([link], self.pyfile.package().id)
 def handleCategoryDJ(self, url):
     package_links = []
     src = self.getSJSrc(url)
     soup = BeautifulSoup(src)
     content = soup.find("div", attrs={"id": "content"})
     for a in content.findAll("a", attrs={"rel": "bookmark"}):
         package_links.append(a["href"])
     self.core.files.addLinks(package_links, self.pyfile.package().id)
Example #7
0
    def decrypt(self, pyfile):
        url = pyfile.url
        if re.search(self.__pattern__, url).group(1) == "d":
            self.req.http.c.setopt(FOLLOWLOCATION, 0)
            self.load(url)
            m = re.search("^Location: (.+)$", self.req.http.header, re.MULTILINE)
            if m:
                self.core.files.addLinks([m.group(1)], self.pyfile.package().id)
            else:
                self.fail("Couldn't find forwarded Link")

        else:
            password = ""
            packageLinks = []
            postData = {"post-protect": "1"}

            self.html = self.load(url)

            if "link-password" in self.html:
                password = pyfile.package().password
                postData["link-password"] = password

            if "altcaptcha" in self.html:
                for i in xrange(5):
                    m = re.search(self.__Solvemedia_pattern__, self.html)
                    if m:
                        captchaKey = m.group(1)
                        captcha = SolveMedia(self)
                        captchaProvider = "Solvmedia"
                    else:
                        self.fail("Error parsing captcha")

                    challenge, response = captcha.challenge(captchaKey)
                    postData["adcopy_challenge"] = challenge
                    postData["adcopy_response"] = response

                    self.html = self.load(url, post=postData)
                    if "The password you entered was incorrect" in self.html:
                        self.fail("Incorrect Password")
                    if not "The CAPTCHA code you entered was wrong" in self.html:
                        break

            pyfile.package().password = ""
            soup = BeautifulSoup(self.html)
            scripts = soup.findAll("script")
            for s in scripts:
                if "d_links" in s.text:
                    break
            m = re.search('d_links":(\[.*?\])', s.text)
            if m:
                linkDict = json_loads(m.group(1))
                for link in linkDict:
                    if not "http://" in link["full"]:
                        packageLinks.append("https://safelinking.net/d/" + link["full"])
                    else:
                        packageLinks.append(link["full"])

            self.core.files.addLinks(packageLinks, self.pyfile.package().id)
Example #8
0
 def handleFolder(self, found):
     src = self.load("http://duckcrypt.info/ajax/auth.php?hash="  + str(found.group(2)))
     found = re.search(self.__pattern__, src)
     self.logDebug("Redirectet to " + str(found.group(0)))
     src = self.load(str(found.group(0)))
     soup = BeautifulSoup(src)
     cryptlinks = soup.find("div", attrs={"class": "folderbox"}).findAll("a")
     self.logDebug("Redirectet to " + str(cryptlinks))
     if not cryptlinks:
         self.fail('no links found - (Plugin out of date?)')
     for clink in cryptlinks:
         self.handleLink(clink['href'])
Example #9
0
 def handleFolder(self, found):
     src = self.load("http://duckcrypt.info/ajax/auth.php?hash=" + str(found.group(2)))
     found = re.match(self.__pattern__, src)
     self.logDebug("Redirectet to " + str(found.group(0)))
     src = self.load(str(found.group(0)))
     soup = BeautifulSoup(src)
     cryptlinks = soup.findAll("div", attrs={"class": "folderbox"})
     self.logDebug("Redirectet to " + str(cryptlinks))
     if not cryptlinks:
         self.fail('no links found - (Plugin out of date?)')
     for clink in cryptlinks:
         if clink.find("a"):
             self.handleLink(clink.find("a")['href'])
Example #10
0
    def handleOldStyleLink(self, url):
        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"]
        result = self.decryptCaptcha(str(captchaUrl))
        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):
            self.retry()
        self.core.files.addLinks([decrypted], self.pyfile.package().id)
    def syncronize(self):
        # read existing episodes
        self.episodesOnDisk = {}
        self.loadEpisodesOnDisk(self.showDir)

        # process every episode link and check if it needs to be downloaded
        showHtml = self.loadHtml(self.showUrl)
        if showHtml == '':
            return False
        linkStrainer = SoupStrainer('a')
        showLinkSoup = BeautifulSoup(showHtml, parseOnlyThese=linkStrainer)

        for a in showLinkSoup.findAll(
                'a', attrs={'href': re.compile('/ip\.php\?v=.*')}):
            if not a.string:
                continue

            ep = Episode(self, a['href'], a.string)

            if ep.seasonNum == -1:
                self.hook.logError('Unable to extract episode info from %s' %
                                   a.string)
                continue
            if self.excluded(ep.seasonNum, ep.episodeNum):
                self.hook.logDebug(
                    'skipping, excluded => %s - S%02dE%02d - %s' %
                    (self.showName, ep.seasonNum, ep.episodeNum,
                     ep.episodeName))
                continue
            if self.onDiskAlready(ep.seasonNum, ep.episodeNum):
                self.hook.logDebug(
                    'skipping, already downloaded => %s - S%02dE%02d - %s' %
                    (self.showName, ep.seasonNum, ep.episodeNum,
                     ep.episodeName))
                continue

            if ep.refreshDownloadLink():
                self.hook.logDebug('downloading => %s - S%02dE%02d - %s' %
                                   (self.showName, ep.seasonNum, ep.episodeNum,
                                    ep.episodeName))
                self.episodesToDownload.append({'season': ep.seasonNum, 'episode': ep.episodeNum, \
                        'name': ep.episodeName, 'url': ep.url['download'], 'showDir': self.showDir})

        # prevent duplicate downloads, add downloads and store target filepath of file url
        self.removeAlreadyQueuedEpisodes()
        self.addDownloads()
        self.storeNameInfo(self.episodesToDownload)
Example #12
0
    def decrypt(self, pyfile):
        url = pyfile.url
        src = self.req.load(str(url))
        soup = BeautifulSoup(src)

        # find captcha URL and decrypt
        captchaTag = soup.find("img", attrs={"id": "Captcha"})
        if not captchaTag:
            self.fail("Cannot find Captcha")

        captchaUrl = "http://iload.to" + captchaTag["src"]
        self.logDebug("Captcha URL: %s" % captchaUrl)
        result = self.decryptCaptcha(str(captchaUrl))

        # find captcha form URL
        formTag = soup.find("form", attrs={"id": "CaptchaForm"})
        formUrl = "http://iload.to" + formTag["action"]
        self.logDebug("Form URL: %s" % formUrl)

        # submit decrypted captcha
        self.req.lastURL = url
        src = self.req.load(str(formUrl), post={"captcha": result})

        # find decrypted links
        links = re.findall(
            r"<a href=\"(.+)\" style=\"text-align:center;font-weight:bold;\" class=\"button\" target=\"_blank\" onclick=\"this.className\+=' success';\">",
            src,
        )

        if not len(links) > 0:
            self.retry()

        self.correctCaptcha()

        cleanedLinks = []
        for link in links:
            if link.startswith("http://dontknow.me/at/?"):
                cleanedLink = urllib.unquote(link[23:])
            else:
                cleanedLink = link
            self.logDebug("Link: %s" % cleanedLink)
            cleanedLinks.append(cleanedLink)

        self.logDebug("Decrypted %d links" % len(links))

        self.pyfile.package().password = "******"
        self.packages.append((self.pyfile.package().name, cleanedLinks, self.pyfile.package().folder))
Example #13
0
    def handleEpisode(self, url):
        src = self.getSJSrc(url)
        if not src.find(
                "Du hast das Download-Limit &uuml;berschritten! Bitte versuche es sp&auml;ter nocheinmal."
        ) == -1:
            self.fail(_("Downloadlimit reached"))
        else:
            soup = BeautifulSoup(src)
            form = soup.find("form")
            h1 = soup.find("h1")

            if h1.get("class") == "wrap":
                captchaTag = soup.find(attrs={"src": re.compile("^/secure/")})
                if not captchaTag:
                    sleep(5)
                    self.retry()

                captchaUrl = "http://download.serienjunkies.org" + captchaTag[
                    'src']
                result = self.decryptCaptcha(str(captchaUrl), imgtype="png")
                sinp = form.find(attrs={"name": "s"})

                self.req.lastURL = str(url)
                sj = self.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:
                sleep(1)
                self.retry()
                return

            self.correctCaptcha()

            links = []
            for link in rawLinks:
                frameUrl = link['action'].replace("/go-", "/frame/go-")
                links.append(self.handleFrame(frameUrl))
            if re.search("#hasName", url) or (
                (self.getConfig("changeNameSJ") == "Packagename") and
                (self.getConfig("changeNameDJ") == "Packagename")):
                self.core.files.addLinks(links, self.pyfile.package().id)
            else:
                if h1.text[2] == "_":
                    eName = h1.text[3:]
                else:
                    eName = h1.text
                self.packages.append((eName, links, eName))
Example #14
0
    def decrypt(self, pyfile):
        url = pyfile.url
        src = self.req.load(str(url))
        soup = BeautifulSoup(src)

        # find captcha URL and decrypt
        captchaTag = soup.find("img", attrs={"id": "Captcha"})
        if not captchaTag:
            self.fail("Cannot find Captcha")

        captchaUrl = "http://iload.to" + captchaTag["src"]
        self.logDebug("Captcha URL: %s" % captchaUrl)
        result = self.decryptCaptcha(str(captchaUrl))

        # find captcha form URL
        formTag = soup.find("form", attrs={"id": "CaptchaForm"})
        formUrl = "http://iload.to" + formTag["action"]
        self.logDebug("Form URL: %s" % formUrl)

        # submit decrypted captcha
        self.req.lastURL = url
        src = self.req.load(str(formUrl), post={'captcha': result})

        # find decrypted links
        links = re.findall(
            r"<a href=\"(.+)\" style=\"text-align:center;font-weight:bold;\" class=\"button\" target=\"_blank\" onclick=\"this.className\+=' success';\">",
            src)

        if not len(links) > 0:
            self.retry()

        self.correctCaptcha()

        cleanedLinks = []
        for link in links:
            if link.startswith("http://dontknow.me/at/?"):
                cleanedLink = urllib.unquote(link[23:])
            else:
                cleanedLink = link
            self.logDebug("Link: %s" % cleanedLink)
            cleanedLinks.append(cleanedLink)

        self.logDebug("Decrypted %d links" % len(links))

        self.pyfile.package().password = "******"
        self.packages.append((self.pyfile.package().name, cleanedLinks,
                              self.pyfile.package().folder))
Example #15
0
    def decrypt(self, pyfile):
        self.pyfile = pyfile

        if self.article.match(pyfile.url):
            src = self.load(pyfile.url)
            soup = BeautifulSoup(src, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)

            abookname = soup.find("a", attrs={"rel": "bookmark"}).text
            for a in soup.findAll("a", attrs={"href": self.protection}):
                package = "%s (%s)" % (abookname, a.previousSibling.previousSibling.text[:-1])
                links = self.decryptFolder(a["href"])

                self.packages.append((package, links, pyfile.package().folder))
        else:
            links = self.decryptFolder(pyfile.url)

            self.packages.append((pyfile.package().name, links, pyfile.package().folder))
Example #16
0
    def decrypt(self, pyfile):
        self.pyfile = pyfile

        if self.article.match(pyfile.url):
            src = self.load(pyfile.url)
            soup = BeautifulSoup(
                src, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)

            abookname = soup.find("a", attrs={"rel": "bookmark"}).text
            for a in soup.findAll("a", attrs={"href": self.protection}):
                package = "%s (%s)" % (
                    abookname, a.previousSibling.previousSibling.text[:-1])
                links = self.decryptFolder(a["href"])

                self.packages.append((package, links, pyfile.package().folder))
        else:
            links = self.decryptFolder(pyfile.url)

            self.packages.append(
                (pyfile.package().name, links, pyfile.package().folder))
Example #17
0
    def handleShow(self, url):
        src = self.getSJSrc(url)
        soup = BeautifulSoup(src)
        packageName = self.pyfile.package().name
        if self.getConfig("changeNameSJ") == "Show":
            found = unescape(soup.find("h2").find("a").string.split(' &#8211;')[0])
            if found:
                 packageName = found

        nav = soup.find("div", attrs={"id": "scb"})

        package_links = []
        for a in nav.findAll("a"):
            if self.getConfig("changeNameSJ") == "Show":
                package_links.append(a["href"])
            else:
                package_links.append(a["href"] + "#hasName")
        if self.getConfig("changeNameSJ") == "Show":
            self.packages.append((packageName, package_links, packageName))
        else:
            self.core.files.addLinks(package_links, self.pyfile.package().id)
Example #18
0
    def decrypt(self, pyfile):
        url = pyfile.url
        src = self.req.load(str(url))

        soup = BeautifulSoup(src)
        captchaTag = soup.find("img", attrs={"id": "captcha_image"})
        if captchaTag:
            captchaUrl = "http://rs-layer.com/" + captchaTag["src"]
            self.logDebug("Captcha URL: %s" % captchaUrl)
            result = self.decryptCaptcha(str(captchaUrl), imgtype="png")
            captchaInput = soup.find("input", attrs={"id": "captcha"})
            self.req.lastUrl = url
            src = self.req.load(str(url),
                                post={
                                    'captcha_input': result,
                                    'image_name': captchaTag["src"]
                                })

        link_ids = re.findall(
            r"onclick=\"getFile\(\'([0-9]{7}-.{8})\'\);changeBackgroundColor",
            src)

        if not len(link_ids) > 0:
            self.retry()

        self.correctCaptcha()

        links = []
        for id in link_ids:
            self.logDebug("ID: %s" % id)
            new_link = unescape(
                re.search(
                    r"<iframe style=\"width: 100%; height: 100%;\" src=\"(.*)\"></frame>",
                    self.req.load("http://rs-layer.com/link-" + id +
                                  ".html")).group(1))
            self.logDebug("Link: %s" % new_link)
            links.append(new_link)

        self.packages.append(
            (self.pyfile.package().name, links, self.pyfile.package().folder))
Example #19
0
 def proceed(self, url, location):
     links = []
     ajaxUrl = "http://secured.in/ajax-handler.php"
     src = self.req.load(url, cookies=True)
     soup = BeautifulSoup(src)
     img = soup.find("img", attrs={"id":"captcha_img"})
     for i in range(3):
         form = soup.find("form", attrs={"id":"frm_captcha"})
         captchaHash = form.find("input", attrs={"id":"captcha_hash"})["value"]
         captchaUrl = "http://secured.in/%s" % img["src"]
         captchaData = self.req.load(str(captchaUrl), cookies=True)
         result = self.waitForCaptcha(captchaData, "jpg")
         src = self.req.load(url, cookies=True, post={"captcha_key":result, "captcha_hash":captchaHash})
         soup = BeautifulSoup(src)
         img = soup.find("img", attrs={"id":"captcha_img"})
         if not img:
             files = soup.findAll("tr", attrs={"id":re.compile("file-\d+")})
             dlIDPattern = re.compile("accessDownload\(\d, \d+, '(.*?)', \d\)")
             cypher = self.Cypher()
             for cfile in files:
                 m = dlIDPattern.search(cfile["onclick"])
                 if m:
                     crypted = self.req.load(ajaxUrl, cookies=True, post={"cmd":"download", "download_id":m.group(1)})
                     cypher.reset()
                     link = cypher.cypher(crypted)
                     links.append(link)
             break
     self.links = links
Example #20
0
 def proceed(self, url, location):
     links = []
     ajaxUrl = "http://secured.in/ajax-handler.php"
     src = self.req.load(url, cookies=True)
     soup = BeautifulSoup(src)
     img = soup.find("img", attrs={"id": "captcha_img"})
     for i in range(3):
         form = soup.find("form", attrs={"id": "frm_captcha"})
         captchaHash = form.find("input", attrs={"id":
                                                 "captcha_hash"})["value"]
         captchaUrl = "http://secured.in/%s" % img["src"]
         captchaData = self.req.load(str(captchaUrl), cookies=True)
         result = self.waitForCaptcha(captchaData, "jpg")
         src = self.req.load(url,
                             cookies=True,
                             post={
                                 "captcha_key": result,
                                 "captcha_hash": captchaHash
                             })
         soup = BeautifulSoup(src)
         img = soup.find("img", attrs={"id": "captcha_img"})
         if not img:
             files = soup.findAll("tr",
                                  attrs={"id": re.compile("file-\d+")})
             dlIDPattern = re.compile(
                 "accessDownload\(\d, \d+, '(.*?)', \d\)")
             cypher = self.Cypher()
             for cfile in files:
                 m = dlIDPattern.search(cfile["onclick"])
                 if m:
                     crypted = self.req.load(ajaxUrl,
                                             cookies=True,
                                             post={
                                                 "cmd": "download",
                                                 "download_id": m.group(1)
                                             })
                     cypher.reset()
                     link = cypher.cypher(crypted)
                     links.append(link)
             break
     self.links = links
Example #21
0
    def handleEpisode(self, url):
        src = self.getSJSrc(url)
        if not src.find(
                "Du hast das Download-Limit &uuml;berschritten! Bitte versuche es sp&auml;ter nocheinmal.") == -1:
            self.fail(_("Downloadlimit reached"))
        else:
            soup = BeautifulSoup(src)
            form = soup.find("form")
            h1 = soup.find("h1")

            if h1.get("class") == "wrap":
                captchaTag = soup.find(attrs={"src": re.compile("^/secure/")})
                if not captchaTag:
                    sleep(5)
                    self.retry()

                captchaUrl = "http://download.serienjunkies.org" + captchaTag['src']
                result = self.decryptCaptcha(str(captchaUrl), imgtype="png")
                sinp = form.find(attrs={"name": "s"})

                self.req.lastURL = str(url)
                sj = self.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:
                sleep(1)
                self.retry()
                return

            self.correctCaptcha()

            links = []
            for link in rawLinks:
                frameUrl = link['action'].replace("/go-", "/frame/go-")
                links.append(self.handleFrame(frameUrl))
            if re.search("#hasName", url) or ((self.getConfig("changeNameSJ") == "Packagename") and
                                              (self.getConfig("changeNameDJ") == "Packagename")):
                self.core.files.addLinks(links, self.pyfile.package().id)
            else:
                if h1.text[2] == "_":
                    eName = h1.text[3:]
                else:
                    eName = h1.text
                self.packages.append((eName, links, eName))
    def refreshDownloadLink(self):
        self.url['download'] = ''
        # get iframe url
        epPageHtml = self.show.loadHtml(baseUrl + self.url['epPage'])
        if epPageHtml == '':
            return False
        epPageStrainer = SoupStrainer('iframe')
        epPageSoup = BeautifulSoup(epPageHtml, parseOnlyThese=epPageStrainer)
        iframeUrl = epPageSoup.find('iframe', {'id': 'videoframe'})['src']

        del epPageHtml
        del epPageStrainer
        del epPageSoup

        # get iframe
        iframeHtml = self.show.loadHtml(baseUrl + iframeUrl)
        if iframeHtml == '':
            return False
        iframeSoup = BeautifulSoup(iframeHtml)

        # downloadIds (separated in hd and everything else)
        idsHD = {}
        idsOther = {}
        for div in iframeSoup.findAll('div', {'class': 'ripdiv'}):
            if div.b and div.b.string.count("HD") > 0:
                hdDiv = True
            else:
                hdDiv = False

            for a in div.findAll('a',
                                 attrs={'onclick': re.compile('go\(\d+\)')}):
                hn = a.find('span')
                if not hn:
                    img = a.find('img')
                    if not img:
                        self.show.hook.logWarning(
                            'Name of file hoster not found')
                        self.show.hook.logDebug(a)
                        continue
                    else:
                        hoster = img["alt"].strip().lower()
                else:
                    hoster = hn.getText().strip().lower()

                # if more than one file per hoster is available,
                # some id´s get overridden, but thats ok. We only need one dlink...
                if hdDiv:
                    idsHD[hoster] = a['onclick'][3:-1]
                else:
                    idsOther[hoster] = a['onclick'][3:-1]

        # choose file to download
        downloadId = 0
        if self.show.hd and len(idsHD) > 0:
            for hoster in self.show.hook.preferredHosters:
                if idsHD.has_key(hoster):
                    downloadId = idsHD[hoster]
                    break
                else:
                    downloadId = idsHD.values()[-1]  #memorize latest id
        elif len(idsOther) > 0:
            for hoster in self.show.hook.preferredHosters:
                if idsOther.has_key(hoster):
                    downloadId = idsOther[hoster]
                    break
                else:
                    downloadId = idsOther.values()[-1]  #memorize latest id
        if downloadId == 0:
            self.show.hook.logError('No download id found for %s' %
                                    self.getEpCodeStr())
            return False

        # secret value and videoId
        secret = ''
        videoId = ''
        for line in iframeHtml.split('\n'):
            if line.find("f.lastChild.value=") >= 0:
                m = re.search('(?<=f.lastChild.value=")\w+', line)
                secret = m.group(0)
                m = re.search('(?<="&t=)\d+', line)
                videoId = m.group(0)
                break
        if secret == '':
            self.show.hook.logError('Secret not found for %s' %
                                    self.getEpCodeStr())
            return False
        if videoId == '':
            self.show.hook.logError('Video id not found for %s' %
                                    self.getEpCodeStr())
            return False

        # assemble download post data string
        postData = 'id=' + downloadId + '&s=4&iqs=&url=&m=-141&cap=&sec=' + secret + '&t=' + videoId

        # get download url
        ajaxUrl = 'http://www.icefilms.info/membersonly/components/com_iceplayer/video.phpAjaxResp.php'
        downloadUrlHtml = self.show.loadHtml(ajaxUrl, postData)
        if downloadUrlHtml == '':
            return False
        if len(downloadUrlHtml) > 2:
            self.url['download'] = urllib.unquote(
                downloadUrlHtml.split('?url=')[1])
        else:
            self.show.hook.logError(
                'Unable to retrieve download link (%s: %s)' %
                self.getEpCodeStr(), downloadUrlHtml)
            return False

        return True