#!/usr/bin/env python # -*- coding: utf-8 -*- import re from module.plugins.Hoster import Hoster from module.plugins.ReCaptcha import ReCaptcha class FilesonicCom(Hoster): __name__ = "FilesonicCom" __type__ = "hoster" __pattern__ = r"http://[\w\.]*?(sharingmatrix|filesonic)\.(com|net)/.*?file/([0-9]+(/.+)?|[a-z0-9]+/[0-9]+(/.+)?)" __version__ = "0.1" __description__ = """FilesonicCom und Sharingmatrix Download Hoster""" __author_name__ = ("jeix") __author_mail__ = ("jeix@hasnomail.de") def setup(self): self.multiDL = True if self.account else False def process(self, pyfile): self.pyfile = pyfile self.url = self.convertURL(self.pyfile.url) self.html = self.load(self.url, cookies=False) name = re.search(r'Filename:\s*\s*(.*?)<', self.html) if name: self.pyfile.name = name.group(1) else: self.offline() if self.account: self.download(pyfile.url) else: self.download(self.getFileUrl()) def getFileUrl(self): link = self.url + "/" + re.search(r'href="(.*?start=1.*?)"', self.html).group(1) self.html = self.load(link) self.handleErrors() realLinkRegexp = "

Start download now!

" url = re.search(realLinkRegexp, self.html) if not url: if "This file is available for premium users only." in self.html: self.fail("Need premium account.") countDownDelay = re.search("countDownDelay = (\\d+)", self.html) if countDownDelay: wait_time = int(countDownDelay.group(1)) if wait_time > 300: self.wantReconnect = True self.setWait(wait_time) self.log.info("%s: Waiting %d seconds." % (self.__name__, wait_time)) self.wait() tm = re.search("name='tm' value='(.*?)' />", self.html).group(1) tm_hash = re.search("name='tm_hash' value='(.*?)' />", self.html).group(1) self.html = self.load(self.url + "?start=1", post={"tm":tm,"tm_hash":tm_hash}) self.handleErrors() if "Please Enter Password" in self.html: self.fail("implement need pw") chall = re.search(r'Recaptcha.create\("(.*?)",', self.html) if chall: re_captcha = ReCaptcha(self) challenge, result = re_captcha.challenge(chall.group(1)) postData = {"recaptcha_challenge_field": challenge, "recaptcha_response_field" : result} self.html = self.load(link, post=postData) url = re.search(realLinkRegexp, self.html).group(1) return url def convertURL(self, url): id = re.search("/file/([0-9]+(/.+)?)", url) if not id: id = re.search("/file/[a-z0-9]+/([0-9]+(/.+)?)", url) return "http://www.filesonic.com/file/" + id.group(1) def handleErrors(self): if "The file that you're trying to download is larger than" in self.html: self.fail("need premium account for file") if "Free users may only download 1 file at a time" in self.html: self.fail("only 1 file at a time for free users") if "Free user can not download files" in self.html: self.fail("need premium account for file") if "Download session in progress" in self.html: self.fail("already downloading") if "This file is password protected" in self.html: self.fail("This file is password protected, please one.") if "An Error Occurred" in self.html: self.fail("A server error occured.")