diff options
author | Nitzo <nitzo2001@yahoo.com> | 2016-07-09 01:12:57 +0200 |
---|---|---|
committer | Nitzo <nitzo2001@yahoo.com> | 2016-07-09 01:12:57 +0200 |
commit | c77897d2d7fcc02754b4a6f63d170e6520331b74 (patch) | |
tree | 5d9c9494fafb9a397d8d58668609d62701a2ae3f | |
parent | [New Hoster] UploadrocketNet - fix #2532 (diff) | |
download | pyload-c77897d2d7fcc02754b4a6f63d170e6520331b74.tar.xz |
[New Hoster] ZbigzCom
-rw-r--r-- | module/plugins/hoster/ZbigzCom.py | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/module/plugins/hoster/ZbigzCom.py b/module/plugins/hoster/ZbigzCom.py new file mode 100644 index 000000000..28e3b9ec0 --- /dev/null +++ b/module/plugins/hoster/ZbigzCom.py @@ -0,0 +1,137 @@ +# -*- coding: utf-8 -*- + +import time +import random +import re +import urlparse + +from module.plugins.internal.Hoster import Hoster +from module.plugins.internal.misc import json + +class ZbigzCom(Hoster): + __name__ = "ZbigzCom" + __type__ = "hoster" + __version__ = "0.01" + __status__ = "testing" + + __pattern__ = r'https?://.+\.torrent|magnet:\?.+' + __config__ = [("activated", "bool", "Activated", False)] + + + __description__ = """Zbigz.com hoster plugin""" + __license__ = "GPLv3" + __authors__ = [("GammaC0de", "nitzo2001[AT}yahoo[DOT]com")] + + + def jquery_call(self, url, file_id, call_id, **kwargs): + current_millis = int(time.time() * 1000) + json_callback = "jQuery" + call_id + "_" + str(current_millis) + + urlp = urlparse.urlparse(url) + get_params = kwargs.copy() + get_params.update(urlparse.parse_qs(urlp.query)) + + get_params['hash'] = file_id + get_params['jsoncallback'] = json_callback + get_params['_'] = current_millis + + jquery_data = self.load(urlp.scheme + "://" + urlp.netloc + urlp.path, get=get_params) + + m = re.search("%s\((.+?)\);" % json_callback, jquery_data) + + return json.loads(m.group(1)) if m else None + + + def sleep(self, sec): + for _i in xrange(sec): + if self.pyfile.abort: + break + time.sleep(1) + + + def process(self, pyfile): + self.data = self.load("http://m.zbigz.com/myfiles", + post={'url': pyfile.url}) + + if "Error. Only premium members are able to download" in self.data: + self.fail(_("File can be downloaded by premium users only")) + + m = re.search(r'&hash=(\w+)"', self.data) + if m is None: + self.fail("Hash not found") + + file_id = m.group(1) + call_id = "".join([random.choice("0123456789") for _x in xrange(20)]) + + self.pyfile.setCustomStatus("torrent") + self.pyfile.setProgress(0) + + json_data = self.jquery_call("http://m.zbigz.com/core/info.php", file_id, call_id) + if json_data is None: + self.fail("Unexpected jQuery response") + + if 'faultString' in json_data: + self.fail(json_data['faultString']) + + pyfile.name = json_data['info']['name'] + (".zip" if len(json_data['files']) > 1 else "") + pyfile.size = json_data['info']['size'] + + while True: + json_data = self.jquery_call("http://m.zbigz.com/core/info.php", file_id, call_id) + if json_data is None: + self.fail("Unexpected jQuery response") + + if 'faultString' in json_data: + self.fail(json_data['faultString']) + + progress = int(json_data['info']['progress']) + pyfile.setProgress(progress) + + if json_data['info']['state'] != "downloading" or progress == 100: + break + + self.sleep(5) + + pyfile.setProgress(100) + + if len(json_data['files']) == 1: + download_url = "http://m.zbigz.com/file/%s/0" % file_id + + else: + self.data = self.load("http://m.zbigz.com/file/%s/-1" % file_id) + + m = re.search(r'\'(http://\w+.zbigz.com/core/zipstate.php\?hash=%s&did=(\w+)).+?\'' % file_id, self.data) + if m is None: + self.fail("Zip state URL not found") + + zip_status_url = m.group(1) + download_id = m.group(2) + + m = re.search(r'\'(http://\w+.zbigz.com/z/%s/.+?)\'' % download_id, self.data) + if m is None: + self.fail("Zip download URL not found") + + download_url = m.group(1) + + self.pyfile.setCustomStatus("zip") + self.pyfile.setProgress(0) + + while True: + json_data = self.jquery_call(zip_status_url, file_id, call_id) + + if 'faultString' in json_data: + self.fail(json_data['faultString']) + + progress = int(json_data['proc']) + + self.pyfile.setProgress(progress) + + if progress == 100: + break + + self.sleep(5) + + self.download(download_url) + + self.load("http://m.zbigz.com/delete.php?hash=%s" % file_id) + |