summaryrefslogtreecommitdiffstats
path: root/module/plugins/hoster/BigfileTo.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hoster/BigfileTo.py')
-rw-r--r--module/plugins/hoster/BigfileTo.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/module/plugins/hoster/BigfileTo.py b/module/plugins/hoster/BigfileTo.py
new file mode 100644
index 000000000..9bfe5dfa5
--- /dev/null
+++ b/module/plugins/hoster/BigfileTo.py
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from module.plugins.internal.misc import json
+from module.plugins.captcha.ReCaptcha import ReCaptcha
+from module.plugins.internal.SimpleHoster import SimpleHoster
+
+
+class BigfileTo(SimpleHoster):
+ __name__ = "BigfileTo"
+ __type__ = "hoster"
+ __version__ = "0.17"
+ __status__ = "testing"
+
+ __pattern__ = r'https?://(?:www\.)?(?:uploadable\.ch|bigfile.to)/file/(?P<ID>\w+)'
+ __config__ = [("activated" , "bool", "Activated" , True),
+ ("use_premium" , "bool", "Use premium account if available" , True),
+ ("fallback" , "bool", "Fallback to free download if premium fails" , True),
+ ("chk_filesize", "bool", "Check file size" , True),
+ ("max_wait" , "int" , "Reconnect if waiting time is greater than minutes", 10 )]
+
+ __description__ = """bigfile.to hoster plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("zapp-brannigan", "fuerst.reinje@web.de" ),
+ ("Walter Purcaro", "vuolter@gmail.com" ),
+ ("GammaC0de" , "nitzo2001[AT]yahoo[DOT]com")]
+
+
+ URL_REPLACEMENTS = [(__pattern__ + ".*", r'https://www.bigfile.to/file/\g<ID>')]
+
+ INFO_PATTERN = r'div id=\"file_name\" title=.*>(?P<N>.+)<span class=\"filename_normal\">\((?P<S>[\d.]+) (?P<U>\w+)\)</span><'
+
+ OFFLINE_PATTERN = r'>(File not available|This file is no longer available)'
+ TEMP_OFFLINE_PATTERN = r'<div class="icon_err">'
+
+ WAIT_PATTERN = r'>Please wait[^<]+'
+
+ RECAPTCHA_KEY = "6LfZ0RETAAAAAOjhYT7V9ukeCT3wWccw98uc50vu"
+
+
+ def handle_free(self, pyfile):
+ #: Click the "free user" button and wait
+ json_data = json.loads(self.load(pyfile.url, post={'downloadLink': "wait"}))
+
+ self.wait(json_data['waitTime'])
+
+ #: Make the ReCaptcha appear and show it the pyload interface
+ json_data = json.loads(self.load(pyfile.url, post={'checkDownload': "check"}))
+ if json_data['success'] == "showCaptcha":
+ self.captcha = ReCaptcha(pyfile)
+
+ response, challenge = self.captcha.challenge(self.RECAPTCHA_KEY)
+
+ #: Submit the captcha solution
+ json_data = json.loads(self.load("https://www.bigfile.to/checkReCaptcha.php",
+ post={'recaptcha_challenge_field' : challenge,
+ 'recaptcha_response_field' : response,
+ 'recaptcha_shortencode_field': self.info['pattern']['ID']}))
+ self.log_debug("json_data", json_data)
+ if json_data['success'] != 1:
+ self.retry_captcha()
+
+
+ #: Get ready for downloading
+ self.load(pyfile.url, post={'downloadLink': "show"})
+
+ #: Download the file
+ self.download(pyfile.url, post={'download': "normal"}, disposition=True)
+
+
+ def check_download(self):
+ if self.scan_download({'wait': re.compile("Please wait for")}):
+ self.log_info(_("Downloadlimit reached, please wait or reconnect"))
+ self.wait(60 * 60, True)
+ self.retry()
+
+ return super(BigfileTo, self).check_download()