# -*- coding: utf-8 -*- import re from time import strptime, mktime, gmtime from module.network.RequestFactory import getURL from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo def getInfo(urls): for url in urls: html = getURL("http://www.fshare.vn/check_link.php", post={'action': "check_link", 'arrlinks': url}, decode=True) yield parseFileInfo(FshareVn, url, html) def doubleDecode(m): return m.group(1).decode('raw_unicode_escape') class FshareVn(SimpleHoster): __name__ = "FshareVn" __type__ = "hoster" __version__ = "0.18" __pattern__ = r'http://(?:www\.)?fshare\.vn/file/.+' __description__ = """FshareVn hoster plugin""" __license__ = "GPLv3" __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] INFO_PATTERN = r'
(?P (?P <\\/p>\\t\\t\\r\\n\\t\\t 0 KB<\\/p>'
    NAME_REPLACEMENTS = [("(.*)", doubleDecode)]
    LINK_PATTERN = r'action="(http://download.*?)[#"]'
    WAIT_PATTERN = ur'Lượt tải xuống kế tiếp là:\s*(.*?)\s*<'
    def process(self, pyfile):
        self.html = self.load('http://www.fshare.vn/check_link.php', post={
            "action": "check_link",
            "arrlinks": pyfile.url
        }, decode=True)
        self.getFileInfo()
        if self.premium:
            self.handlePremium()
        else:
            self.handleFree()
        self.checkDownloadedFile()
    def handleFree(self):
        self.html = self.load(self.pyfile.url, decode=True)
        self.checkErrors()
        action, inputs = self.parseHtmlForm('frm_download')
        self.url = self.pyfile.url + action
        if not inputs:
            self.error(_("No FORM"))
        elif 'link_file_pwd_dl' in inputs:
            password = self.getPassword()
            if password:
                self.logInfo(_("Password protected link, trying ") + password)
                inputs['link_file_pwd_dl'] = password
                self.html = self.load(self.url, post=inputs, decode=True)
                if 'name="link_file_pwd_dl"' in self.html:
                    self.fail(_("Incorrect password"))
            else:
                self.fail(_("No password found"))
        else:
            self.html = self.load(self.url, post=inputs, decode=True)
        self.checkErrors()
        m = re.search(r'var count = (\d+)', self.html)
        self.setWait(int(m.group(1)) if m else 30)
        m = re.search(self.LINK_PATTERN, self.html)
        if m is None:
            self.error(_("LINK_PATTERN not found"))
        self.url = m.group(1)
        self.logDebug("FREE DL URL: %s" % self.url)
        self.wait()
        self.download(self.url)
    def handlePremium(self):
        self.download(self.pyfile.url)
    def checkErrors(self):
        if '/error.php?' in self.req.lastEffectiveURL or u"Liên kết bạn chọn không tồn" in self.html:
            self.offline()
        m = re.search(self.WAIT_PATTERN, self.html)
        if m:
            self.logInfo(_("Wait until %s ICT") % m.group(1))
            wait_until = mktime(strptime(m.group(1), "%d/%m/%Y %H:%M"))
            self.wait(wait_until - mktime(gmtime()) - 7 * 60 * 60, True)
            self.retry()
        elif '[\d.,]+)\s*(?P[\w^_]+)<\\/p>'
    OFFLINE_PATTERN = r'