From f8c0dfe0df8cb9483394645df981f5a7c6b34f99 Mon Sep 17 00:00:00 2001 From: Paul King Date: Sat, 4 Jun 2011 19:23:41 +0100 Subject: fix free downloads, fixes for tip, reorganise --- module/plugins/hoster/FileserveCom.py | 170 ++++++++++++++++++++-------------- 1 file changed, 103 insertions(+), 67 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hoster/FileserveCom.py b/module/plugins/hoster/FileserveCom.py index 075d48eaf..8086437a8 100644 --- a/module/plugins/hoster/FileserveCom.py +++ b/module/plugins/hoster/FileserveCom.py @@ -8,9 +8,14 @@ from module.plugins.ReCaptcha import ReCaptcha from module.network.RequestFactory import getURL +try: + from json import loads as json_loads +except ImportError: # pragma: no cover + from module.lib.simplejson import loads as json_loads + def getInfo(urls): result = [] - + for url in urls: # Get html @@ -37,12 +42,17 @@ class FileserveCom(Hoster): __name__ = "FileserveCom" __type__ = "hoster" __pattern__ = r"http://(www\.)?fileserve\.com/file/[a-zA-Z0-9]+" - __version__ = "0.3" + __version__ = "0.4" __description__ = """Fileserve.Com File Download Hoster""" - __author_name__ = ("jeix", "mkaay") - __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de") - - def setup(self): + __author_name__ = ("jeix", "mkaay", "paul king") + __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "") + + FILE_ID_KEY = r"fileserve\.com/file/(?P\w+)" + FILE_CHECK_KEY = r"http://www.fileserve.com/file/(?P\w+).*?(?P.*?).*?(?P.*?) (?P.B).*?(?P.*?)" + CAPTCHA_KEY_PATTERN = r"var reCAPTCHA_publickey='(?P.*?)';" + LONG_WAIT_PATTERN = r"You need to wait (\d+) seconds to start another download" + + def init(self): if self.account: self.premium = self.account.getAccountInfo(self.user)["premium"] if not self.premium: @@ -52,94 +62,120 @@ class FileserveCom(Hoster): else: self.multiDL = False - self.file_id = re.search(r"fileserve\.com/file/([a-zA-Z0-9]+)(http:.*)?", self.pyfile.url).group(1) - self.pyfile.url = "http://www.fileserve.com/file/" + self.file_id - def process(self, pyfile): - self.html = self.load(self.pyfile.url, ref=False, cookies=False if self.account else True, utf8=True) - - if re.search(r'

File not available

', self.html) is not None: - self.offline() - - if 'Your download link has expired' in self.html: - with open("fsdump.html", "w") as fp: - fp.write(self.html) - self.offline()#retry() - - self.pyfile.name = re.search('

(.*?)

', self.html).group(1) - + self.checkFile() if self.account and self.premium: self.handlePremium() else: self.handleFree() + + def checkFile(self): + self.file_id = re.search(self.FILE_ID_KEY, self.pyfile.url).group("id") + self.logDebug("file id is %s" % self.file_id) + + self.pyfile.url = "http://www.fileserve.com/file/" + self.file_id + + linkCheck = self.load("http://www.fileserve.com/link-checker.php", + post = { "urls" : self.pyfile.url}, + ref=False, cookies=False if self.account else True, decode=True) + + linkMatch = re.search(self.FILE_CHECK_KEY, linkCheck.replace("\r\n","")) + if not linkMatch: + self.logDebug("couldn't extract file status") + self.offline() + + if linkMatch.group("online").find("Available") != 0: + self.logDebug("file is not available : %s" % linkMatch.group("online")) + self.offline() + + self.pyfile.name = linkMatch.group("name") + def handlePremium(self): self.download(self.pyfile.url, post={"download":"premium"}, cookies=True) def handleFree(self): - self.html = self.load(self.pyfile.url) - jsPage = re.search(r"\"(/landing/.*?/download_captcha\.js)\"", self.html) - - jsPage = self.load("http://fileserve.com" + jsPage.group(1)) - action = self.load(self.pyfile.url, post={"checkDownload" : "check"}) - - if "timeLimit" in action: - html = self.load(self.pyfile.url, post={"checkDownload" : "showError", "errorType" : "timeLimit"}) - wait = re.search(r"You need to wait (\d+) seconds to start another download", html) - if wait: - wait = int(wait.group(1)) - else: - wait = 720 - - self.setWait(wait, True) - self.wait() - self.retry() - - if r'