# -*- coding: utf-8 -*-
import re
from module.plugins.Hoster import Hoster
from module.network.RequestFactory import getURL
def getInfo(urls):
result = []
for url in urls:
html = getURL(url)
if "var page = '404';" in html:
result.append((url, 0, 1, url))
continue
fileInfo = re.search(X7To.FILE_INFO_PATTERN, html)
if fileInfo:
name = fileInfo.group(1)
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
name = url
size = 0
result.append((name, size, 2, url))
yield result
class X7To(Hoster):
__name__ = "X7To"
__type__ = "hoster"
__pattern__ = r"http://(?:www.)?x7.to/"
__version__ = "0.1"
__description__ = """X7.To File Download Hoster"""
__author_name__ = ("ernieb")
__author_mail__ = ("ernieb")
FILE_INFO_PATTERN=r' size:
self.handlePremium()
else:
self.handleFree()
def handlePremium(self):
# check if over limit first
overLimit = re.search(r'', self.html)
if overLimit:
self.logDebug("over limit, falling back to free")
self.handleFree()
else:
realurl = re.search(r'', self.html)
if realurl:
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 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")