# -*- coding: utf-8 -*- # # Note: # 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. import re from module.common.json_layer import json_loads from module.plugins.internal.CaptchaService import ReCaptcha from module.plugins.internal.SimpleHoster import SimpleHoster class NitroflareCom(SimpleHoster): __name__ = "NitroflareCom" __type__ = "hoster" __version__ = "0.03" __pattern__ = r'https?://(?:www\.)?nitroflare\.com/view/(?P[\w^_]+)' __description__ = """Nitroflare.com hoster plugin""" __license__ = "GPLv3" __authors__ = [("sahil", ""), ("Walter Purcaro", "vuolter@gmail.com")] # URL_REPLACEMENTS = [("http://", "https://")] 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']}) 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 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()