summaryrefslogtreecommitdiffstats
path: root/module/plugins/hoster/NitroflareCom.py
diff options
context:
space:
mode:
authorGravatar Walter Purcaro <vuolter@gmail.com> 2015-01-18 12:51:40 +0100
committerGravatar Walter Purcaro <vuolter@gmail.com> 2015-01-18 12:51:40 +0100
commit263b75584da0f881770bfde355ec0cf158e1786a (patch)
tree91a5c63b310236a2c129cf25b3aa19a1cfa0ade2 /module/plugins/hoster/NitroflareCom.py
parent[BasePlugin][SimpleDereferer] Use SimpleHoster fileUrl (diff)
parentMerged with the updated nitroflare (diff)
downloadpyload-263b75584da0f881770bfde355ec0cf158e1786a.tar.xz
Merge branch 'pr/n1033_sahilshekhawat' into stable
Conflicts: module/plugins/hoster/NitroflareCom.py
Diffstat (limited to 'module/plugins/hoster/NitroflareCom.py')
-rw-r--r--module/plugins/hoster/NitroflareCom.py119
1 files changed, 73 insertions, 46 deletions
diff --git a/module/plugins/hoster/NitroflareCom.py b/module/plugins/hoster/NitroflareCom.py
index 2367493e5..fdbcf0e64 100644
--- a/module/plugins/hoster/NitroflareCom.py
+++ b/module/plugins/hoster/NitroflareCom.py
@@ -16,64 +16,91 @@ from module.plugins.internal.SimpleHoster import SimpleHoster
class NitroflareCom(SimpleHoster):
__name__ = "NitroflareCom"
__type__ = "hoster"
- __version__ = "0.03"
+ __version__ = "0.04"
__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