diff options
-rw-r--r-- | module/plugins/hoster/FilebeerInfo.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/module/plugins/hoster/FilebeerInfo.py b/module/plugins/hoster/FilebeerInfo.py new file mode 100644 index 000000000..d7d3640a8 --- /dev/null +++ b/module/plugins/hoster/FilebeerInfo.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: zoidberg +""" + +import re +from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo +from module.plugins.ReCaptcha import ReCaptcha +from pycurl import FOLLOWLOCATION + +class FilebeerInfo(SimpleHoster): + __name__ = "FilebeerInfo" + __type__ = "hoster" + __pattern__ = r"http://(?:www\.)?filebeer\.info/(?!\d*~f)\w+" + __version__ = "0.01" + __description__ = """Filebeer.info plugin""" + __author_name__ = ("zoidberg") + __author_mail__ = ("zoidberg@mujmail.cz") + + FILE_INFO_PATTERN = r'<strong>\s*(?P<N>.+?) \((?P<S>[0-9.]+) (?P<U>[kKMG])i?B\)(<br/>\s*)?</strong>' + FILE_OFFLINE_PATTERN = r'<title>Upload Files - FileBeer.info</title>' + + RECAPTCHA_KEY_PATTERN = r'http://www.google.com/recaptcha/api/(?:challenge|noscript)?k=(\w+)' + FREE_URL_PATTERN = r"<a href='(http://filebeer.info/.+?\?d=1)'>" + WAIT_TIME_PATTERN = r"\(\'\.download-timer-seconds\'\)\.html\((\d+)\)" + + def setup(self): + self.resumeDownload = True + self.multiDL = False + + def handleFree(self): + if not 'id="form-join"' in self.html: + found = re.search(self.FREE_URL_PATTERN, self.html) + url = found.group(1) if found else "%s?d=1" % self.pyfile.url.rstrip('/') + + found = re.search(self.WAIT_TIME_PATTERN, self.html) + self.setWait(int(found.group(1)) if found else 60) + self.wait() + + self.html = self.load(url) + + action, inputs = self.parseHtmlForm('form-join') + if not action: + self.retry(max_tries=5, wait_time=60, reason='Form not found') + + found = re.search(self.RECAPTCHA_KEY_PATTERN, self.html) + recaptcha_key = found.group(1) if found else '6LeuAc4SAAAAAOSry8eo2xW64K1sjHEKsQ5CaS10' + + recaptcha = ReCaptcha(self) + for i in range(5): + inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(recaptcha_key) + + self.req.http.c.setopt(FOLLOWLOCATION, 0) + self.html = self.load(action, post = inputs) + self.header = self.req.http.header + self.req.http.c.setopt(FOLLOWLOCATION, 1) + + found = re.search("Location\s*:\s*(.*)", self.header, re.I) + if found: + download_url = found.group(1).strip() + self.correctCaptcha() + break + elif 'Captcha confirmation text is invalid' in self.html: + self.invalidCaptcha() + else: + self.parseError('download url') + + else: self.fail("No valid captcha solution received") + + self.multiDL = True + + self.req.http.lastURL = action + self.download(download_url) + +getInfo = create_getInfo(FilebeerInfo)
\ No newline at end of file |