diff options
Diffstat (limited to 'module/plugins/hoster/FshareVn.py')
| -rw-r--r-- | module/plugins/hoster/FshareVn.py | 109 | 
1 files changed, 51 insertions, 58 deletions
diff --git a/module/plugins/hoster/FshareVn.py b/module/plugins/hoster/FshareVn.py index 0b728495a..4912974ad 100644 --- a/module/plugins/hoster/FshareVn.py +++ b/module/plugins/hoster/FshareVn.py @@ -1,22 +1,21 @@  # -*- coding: utf-8 -*-  import re +  from time import strptime, mktime, gmtime +from urlparse import urljoin -from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo  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) - -        file_info = parseFileInfo(FshareVn, url, html) +        html = getURL("http://www.fshare.vn/check_link.php", +                      post={'action': "check_link", 'arrlinks': url}, +                      decode=True) -        yield file_info +        yield parseFileInfo(FshareVn, url, html)  def doubleDecode(m): @@ -24,74 +23,74 @@ def doubleDecode(m):  class FshareVn(SimpleHoster): -    __name__ = "FshareVn" -    __type__ = "hoster" -    __pattern__ = r'http://(?:www\.)?fshare.vn/file/.*' -    __version__ = "0.16" +    __name__    = "FshareVn" +    __type__    = "hoster" +    __version__ = "0.20" + +    __pattern__ = r'http://(?:www\.)?fshare\.vn/file/.+' +      __description__ = """FshareVn hoster plugin""" -    __author_name__ = "zoidberg" -    __author_mail__ = "zoidberg@mujmail.cz" +    __license__     = "GPLv3" +    __authors__     = [("zoidberg", "zoidberg@mujmail.cz")] -    FILE_INFO_PATTERN = r'<p>(?P<N>[^<]+)<\\/p>[\\trn\s]*<p>(?P<S>[0-9,.]+)\s*(?P<U>[kKMG])i?B<\\/p>' + +    INFO_PATTERN = r'<p>(?P<N>[^<]+)<\\/p>[\\trn\s]*<p>(?P<S>[\d.,]+)\s*(?P<U>[\w^_]+)<\\/p>'      OFFLINE_PATTERN = r'<div class=\\"f_left file_w\\"|<\\/p>\\t\\t\\t\\t\\r\\n\\t\\t<p><\\/p>\\t\\t\\r\\n\\t\\t<p>0 KB<\\/p>' -    FILE_NAME_REPLACEMENTS = [("(.*)", doubleDecode)] +    NAME_REPLACEMENTS = [("(.*)", doubleDecode)] -    LINK_PATTERN = r'action="(http://download.*?)[#"]' +    LINK_FREE_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() +    def preload(self): +        self.html = self.load("http://www.fshare.vn/check_link.php", +                              post={'action': "check_link", 'arrlinks': pyfile.url}, +                              decode=True) -        if self.premium: -            self.handlePremium() -        else: -            self.handleFree() -        self.checkDownloadedFile() +        if isinstance(self.TEXT_ENCODING, basestring): +            self.html = unicode(self.html, self.TEXT_ENCODING) -    def handleFree(self): -        self.html = self.load(self.pyfile.url, decode=True) + +    def handleFree(self, pyfile): +        self.html = self.load(pyfile.url, decode=True)          self.checkErrors()          action, inputs = self.parseHtmlForm('frm_download') -        self.url = self.pyfile.url + action +        url = urljoin(pyfile.url, action)          if not inputs: -            self.parseError('FORM') +            self.error(_("No FORM")) +          elif 'link_file_pwd_dl' in inputs: -            for password in self.getPassword().splitlines(): -                self.logInfo('Password protected link, trying "%s"' % password) +            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 not 'name="link_file_pwd_dl"' in self.html: -                    break +                self.html = self.load(url, post=inputs, decode=True) + +                if 'name="link_file_pwd_dl"' in self.html: +                    self.fail(_("Incorrect password"))              else: -                self.fail("No or incorrect password") +                self.fail(_("No password found")) +          else: -            self.html = self.load(self.url, post=inputs, decode=True) +            self.html = self.load(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) +        m = re.search(self.LINK_FREE_PATTERN, self.html)          if m is None: -            self.parseError('FREE DL URL') -        self.url = m.group(1) -        self.logDebug("FREE DL URL: %s" % self.url) - +            self.error(_("LINK_FREE_PATTERN not found")) +         +        self.link = m.group(1)          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: @@ -99,19 +98,13 @@ class FshareVn(SimpleHoster):          m = re.search(self.WAIT_PATTERN, self.html)          if m: -            self.logInfo("Wait until %s ICT" % m.group(1)) +            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 '<ul class="message-error">' in self.html: -            self.logError("Unknown error occured or wait time not parsed") -            self.retry(30, 2 * 60, "Unknown error") - -    def checkDownloadedFile(self): -        # check download -        check = self.checkDownload({ -            "not_found": "<head><title>404 Not Found</title></head>" -        }) +            msg = "Unknown error occured or wait time not parsed" +            self.logError(msg) +            self.retry(30, 2 * 60, msg) -        if check == "not_found": -            self.fail("File not m on server") +        self.info.pop('error', None)  | 
