From 9c33d5cd2f715bb7ae7d5a935f8ec0b22d991004 Mon Sep 17 00:00:00 2001 From: Paul King <devnull@localhost> Date: Sat, 4 Jun 2011 21:18:24 +0100 Subject: tidy, fix getInfo --- module/plugins/hoster/X7To.py | 115 ++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 61 deletions(-) diff --git a/module/plugins/hoster/X7To.py b/module/plugins/hoster/X7To.py index 39441d091..5bf1403b8 100644 --- a/module/plugins/hoster/X7To.py +++ b/module/plugins/hoster/X7To.py @@ -1,6 +1,4 @@ # -*- coding: utf-8 -*- -from __future__ import with_statement - import re from module.plugins.Hoster import Hoster @@ -11,31 +9,23 @@ def getInfo(urls): result = [] for url in urls: - #print "X7To: getinfo for "+url - # Get html html = getURL(url) - if re.search(r"var page = '404';", html): - #print "x7html: 404" + if "var page = '404';" in html: result.append((url, 0, 1, url)) continue - # Name - fileInfo = re.search('<meta name="description" content="Download: (.*) ([0-9,.]*) (KB|MB|GB) at ', html) + fileInfo = re.search(X7To.FILE_INFO_PATTERN, html) if fileInfo: name = fileInfo.group(1) - #print "X7To: filename "+name - # Size - units = float(fileInfo.group(1).replace(",", ".")) - pow = {'KB': 1, 'MB': 2, 'GB': 3}[fileInfo.group(2)] + units = float(fileInfo.group(2).replace(",", ".")) + pow = {'KB': 1, 'MB': 2, 'GB': 3}[fileInfo.group(3)] size = int(units * 1024 ** pow) else: # fallback: name could not be extracted.. most likely change on x7.to side ... needs to be checked then - #print "X7To: file information not found" name = url size = 0 - # Return info result.append((name, size, 2, url)) yield result @@ -49,8 +39,10 @@ class X7To(Hoster): __description__ = """X7.To File Download Hoster""" __author_name__ = ("ernieb") __author_mail__ = ("ernieb") + + FILE_INFO_PATTERN=r'<meta name="description" content="Download: (.*?) \(([0-9,.]+) (KB|MB|GB)\)' - def setup(self): + def init(self): if self.premium: self.multiDL = False self.resumeDownload = False @@ -59,30 +51,27 @@ class X7To(Hoster): self.multiDL = False self.file_id = re.search(r"http://x7.to/([a-zA-Z0-9]+)", self.pyfile.url).group(1) + self.logDebug("file id is %s" % self.file_id) self.pyfile.url = "http://x7.to/" + self.file_id def process(self, pyfile): self.html = self.load(self.pyfile.url, ref=False, decode=True) - if re.search(r"var page = '404';", self.html) is not None: + if "var page = '404';" in self.html: self.offline() - fileInfo = re.search(r'<meta name="description" content="Download: (.*) \(([0-9,.]*) (KB|MB|GB)\) at ', - self.html, re.IGNORECASE) + fileInfo = re.search(self.FILE_INFO_PATTERN, self.html, re.IGNORECASE) size = 0 trafficLeft = 100000000000 if fileInfo: self.pyfile.name = fileInfo.group(1) if self.account: trafficLeft = self.account.getAccountInfo(self.user)["trafficleft"] - # Size units = float(fileInfo.group(2).replace(",", ".")) pow = {'KB': 1, 'MB': 2, 'GB': 3}[fileInfo.group(3)] size = int(units * 1024 ** pow) self.logDebug("filesize: %s trafficleft: %s" % (size, trafficLeft)) - else: - #self.log.debug( self.html ) self.logDebug("name and size not found") if self.account and self.premium and trafficLeft > size: @@ -94,51 +83,55 @@ class X7To(Hoster): # check if over limit first overLimit = re.search(r'<a onClick="cUser.buyTraffic\(\)" id="DL">', self.html) if overLimit: - self.logDebug("over limit") + self.logDebug("over limit, falling back to free") + self.handleFree() else: - realurl = re.search(r'<a href="http://stor(\d*).x7.to/dl/([^"]*)" id="DL">', self.html) + realurl = re.search(r'<a href="(http://stor.*?)" id="DL">', self.html) if realurl: - realurl = 'http://stor' + realurl.group(1) + '.x7.to/dl/' + realurl.group(2) + realurl = realurl.group(1) + self.logDebug("premium url found %s" % realurl) else: self.logDebug("premium link not found") self.download(realurl) def handleFree(self): # find file id - file_id = re.search(r"var dlID = '([^']*)'", self.html) - if file_id: - file_url = "http://x7.to/james/ticket/dl/" + file_id.group(1) - #getDownloadXml = getURL(file_url) - self.html = self.load(file_url, ref=False, decode=True) - - # find download limit in xml - haveToWait = re.search("limit-dl", self.html) - if haveToWait: - self.logDebug("Limit reached ... waiting") - self.setWait(900) - self.wait() - return True - - # no waiting required, go to download - waitCheck = re.search(r"wait:(\d*),", self.html) - if waitCheck: - waitCheck = int(waitCheck.group(1)) - self.setWait(waitCheck, True) - self.wait() - - urlCheck = re.search(r"url:'(.*)',", self.html) - url = None - if urlCheck: - url = urlCheck.group(1) - self.logDebug("url found " + url) - - if url: - try: - self.download(url) - except: - self.logDebug("downloading url failed:" + url) - - - else: - #print self.html - self.fail("no download url found") \ No newline at end of file + file_id = re.search(r"var dlID = '(.*?)'", self.html) + if not file_id: + self.fail("Free download id not found") + + file_url = "http://x7.to/james/ticket/dl/" + file_id.group(1) + self.logDebug("download id %s" % file_id.group(1)) + + self.html = self.load(file_url, ref=False, decode=True) + + # deal with errors + if "limit-dl" in self.html: + self.logDebug("Limit reached ... waiting") + self.setWait(900,True) + self.wait() + self.retry() + + if "limit-parallel" in self.html: + self.fail("Cannot download in parallel") + + # no waiting required, go to download + waitCheck = re.search(r"wait:(\d*),", self.html) + if waitCheck: + waitCheck = int(waitCheck.group(1)) + self.setWait(waitCheck) + self.wait() + + urlCheck = re.search(r"url:'(.*?)'", self.html) + url = None + if urlCheck: + url = urlCheck.group(1) + self.logDebug("free url found %s" % url) + + if url: + try: + self.download(url) + except: + self.logDebug("downloading url failed: %s" % url) + else: + self.fail("Free download url found") \ No newline at end of file -- cgit v1.2.3