diff options
Diffstat (limited to 'module')
| -rw-r--r-- | module/plugins/hoster/NitroflareCom.py | 119 | 
1 files changed, 73 insertions, 46 deletions
| diff --git a/module/plugins/hoster/NitroflareCom.py b/module/plugins/hoster/NitroflareCom.py index 6356da428..30cc62eaf 100644 --- a/module/plugins/hoster/NitroflareCom.py +++ b/module/plugins/hoster/NitroflareCom.py @@ -16,64 +16,91 @@ from module.plugins.SimpleHoster import SimpleHoster  class NitroflareCom(SimpleHoster):      __name__    = "NitroflareCom"      __type__    = "hoster" -    __version__ = "0.02" +    __version__ = "0.25"      __pattern__ = r'https?://(?:www\.)?nitroflare\.com/view/(?P<ID>[\w^_]+)'      __description__ = """Nitroflare.com hoster plugin"""      __license__     = "GPLv3" -    __authors__     = [("sahil", ""), +    __authors__     = [("sahil", "sahilshekhawat01@gmail.com"),                         ("Walter Purcaro", "vuolter@gmail.com")] - -    # URL_REPLACEMENTS = [("http://", "https://")] +    BASE_URL = "https://nitroflare.com" +    API_URL = "https://nitroflare.com/api/" +    DOWNLOAD_PATTERN = "\"(https?://[a-z0-9\\-_]+\\.nitroflare\\.com/[^<>\"]*?)\"" +    IS_FREE = True +    PREMIUM_URL = BASE_URL + "/payment"      LINK_FREE_PATTERN = r'(https?://[\w\\-]+\\.nitroflare\\.com/[^<>\"]*?)"' -      def handleFree(self, pyfile): -        file_info = self.load("https://nitroflare.com/api/getDownloadLink", -                              get={'file': self.info['pattern']['ID']}) +        if self.checkLink(file_uid): +            file_info = self.load("https://nitroflare.com/api/getDownloadLink", +                                  get={'file': self.info['pattern']['ID']}) +            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 = int(result['delay']) +                    captch_key = result['recaptchaPublic'] +                    filename = result['name'] +                    recaptcha = ReCaptcha(self) +                    # used here to load the cookies which will be required later +                    main_page = self.load(pyfile.url) +                    go_to_free_page = self.load(pyfile.url, +                                                post={"goToFreePage": ""}) +                    # challenge, response = recaptcha.challenge(key=captch_key) +                    res = self.load(self.BASE_URL + "/ajax/freeDownload.php", +                                    post={"method": "startTimer", +                                    "fileId": file_uid})[4:] -        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("https://nitroflare.com/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 +                    if "This file is available with premium key only" in res: +                        self.fail("This file is available with premium key only") +                    if "downloading is not possible" in res: +                        wait_time = re.search("You have to wait (\\d+) minutes to download your next file", res) +                        if wait_time is not None: +                            self.fail("IP Address blocked") +                        self.fail("Downloading is not possible")                      else: -                        break +                        self.logInfo(res) +                        js_file = self.load(self.BASE_URL + "/js/downloadFree.js?v=1.0.1") +                        var_time = re.search("var time = (\\d+);", js_file) +                        wait = 60 +                        if var_time is not None: +                            wait = int(var_time.groups()[0]) +                        self.setWait(wait) +                        self.wait() +                        for i in xrange(3): +                            challenge, response = recaptcha.challenge(key=captch_key) +                            res_final = self.load(self.BASE_URL + "/ajax/freeDownload.php", +                                            post={"method": "fetchDownload", +                                            "recaptcha_challenge_field": challenge, +                                            "recaptcha_response_field": response})[3:] +                            self.logInfo(res_final) -                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) +                            if self.handleCaptchaErrors(res_final): +                                break +                            if "The captcha wasn't entered correctly" or "You have to fill the captcha" in res_final: +                                continue +                            else: +                                break +                        download_link = re.search(self.DOWNLOAD_PATTERN, res_final) +                        if download_link is None: +                            self.fail("Could not find a download link. Please check the download link again") +                        else: +                            self.download(download_link)          else: -            print "link is invalid" -            self.offline() -            # Link is invalid -        # self.download() +            self.fail("Link is not valid. Please check the link again") + +    def correct_download_link(self, url): +        return url.replace("http://", "https://") + +    def checkLink(self, url): +        return True + +    def handle_api(self, download_url, account): +        handle_downloadAPI(download_url, account) + +    def enable_premium(self, url): +        self.IS_FREE = False  # To try premium
\ No newline at end of file | 
