diff options
Diffstat (limited to 'module/plugins/hoster')
| -rw-r--r-- | module/plugins/hoster/NitroflareCom.py | 86 | 
1 files changed, 86 insertions, 0 deletions
| diff --git a/module/plugins/hoster/NitroflareCom.py b/module/plugins/hoster/NitroflareCom.py new file mode 100644 index 000000000..c31431cc2 --- /dev/null +++ b/module/plugins/hoster/NitroflareCom.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- + +import re +import json + +from module.plugins.Hoster import Hoster +from module.plugins.internal.CaptchaService import ReCaptcha + + +""" +    Right now premium support is not added +    Thus, any file that require premium support +    cannot be downloaded. Only the file that is free to +    download can be downloaded. +""" +class NitroflareCom(Hoster): +    __name__ = "NitroflareCom" +    __type__ = "hoster" +    __version__ = "0.01" + +    __pattern__ = r'https?://(?:www\.)?(nitroflare\.com/view)/(?P<ID>[A-Z0-9]+)' +    __description__ = """Nitroflare.com hoster plugin""" +    __license__ = "GPLv3" +    __authors__ = [("sahil", None)] + +    BASE_URL = "https://nitroflare.com" +    API_URL = "https://nitroflare.com/api/" +    DOWNLOAD_PATTERN = "\"(https?://[a-z0-9\\-_]+\\.nitroflare\\.com/[^<>\"]*?)\"" + +    def process(self, pyfile): + +        if "https://" not in pyfile.url: +            pyfile.url = self.correct_download_link(pyfile.url) + +        url_match = re.match(self.__pattern__, pyfile.url) +        file_uid = url_match.group('ID') +        if self.checkLink(file_uid): +            file_info = self.load(self.API_URL + "getDownloadLink?file=" + file_uid) +            self.logWarning(file_info[3:]) +            file_info = json.loads(file_info[3:])  # removing non ascii characters +            if file_info['type'] == "success": +                result = file_info['result']  # already a dict +                if result['linkType'] == "free": +                    delay = result['delay']  # Don't need the delay for free downloads +                    captch_key = result['recaptchaPublic'] +                    filename = result['name'] +                    recaptcha = ReCaptcha(self) +                    # try upto 3 times to solve reCaptcha +                    for i in xrange(3): +                        challenge, response = recaptcha.challenge(key=captch_key) +                        res = self.load(self.BASE_URL + "/ajax/freeDownload.php", +                                             post={"method": "fetchDownload", +                                                   "recaptcha_challenge_field": challenge, +                                                   "recaptcha_response_field": response}) +                        if self.handleCaptchaErrors(res): +                            break +                        if "The captcha wasn't entered correctly" or "You have to fill the captcha" in res: +                            continue +                        else: +                            break + +                    if "The captcha wasn't entered correctly" or "You have to fill the captcha" in res: +                        self.logError("Captcha Failed") +                        self.offline() +                        # Captcha failed +                    else: +                        self.logInfo("result of the captcha is") +                        self.logInfo(res) +                        # self.offline() +                        download_link = re.search(self.DOWNLOAD_PATTERN, res) +                        if download_link is None: +                            print "downloasd link failed" +                            # Download link failed +                        else: +                            self.download(download_link) +        else: +            print "link is invalid" +            self.offline() +            # Link is invalid +        # self.download() + +    def correct_download_link(self, url): +        return url.replace("http://", "https://") + +    def checkLink(self, url): +        return True
\ No newline at end of file | 
