summaryrefslogtreecommitdiffstats
path: root/module/plugins/hoster
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hoster')
-rw-r--r--module/plugins/hoster/DepositfilesCom.py36
-rw-r--r--module/plugins/hoster/ExtabitCom.py81
-rw-r--r--module/plugins/hoster/NarodRu.py66
-rw-r--r--module/plugins/hoster/OneFichierCom.py6
-rw-r--r--module/plugins/hoster/UlozTo.py4
-rw-r--r--module/plugins/hoster/UnibytesCom.py80
-rw-r--r--module/plugins/hoster/WebshareCz.py44
-rw-r--r--module/plugins/hoster/ZippyshareCom.py126
8 files changed, 397 insertions, 46 deletions
diff --git a/module/plugins/hoster/DepositfilesCom.py b/module/plugins/hoster/DepositfilesCom.py
index 87e5e7254..c5cca6409 100644
--- a/module/plugins/hoster/DepositfilesCom.py
+++ b/module/plugins/hoster/DepositfilesCom.py
@@ -3,50 +3,26 @@
import re
from urllib import unquote
-from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
from module.network.RequestFactory import getURL
from module.plugins.ReCaptcha import ReCaptcha
-def getInfo(urls):
- result = []
-
- for url in urls:
- file_info = parseFileInfo(DepositfilesCom, url, getURL(re.sub(r"\.com(/.*?)?/files", ".com/en/files", url), decode=True))
- result.append(file_info)
-
- yield result
-
class DepositfilesCom(SimpleHoster):
__name__ = "DepositfilesCom"
__type__ = "hoster"
__pattern__ = r"http://[\w\.]*?depositfiles\.com(/\w{1,3})?/files/[\w]+"
- __version__ = "0.36"
+ __version__ = "0.37"
__description__ = """Depositfiles.com Download Hoster"""
__author_name__ = ("spoob", "zoidberg")
__author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz")
FILE_INFO_PATTERN = r'File name: <b title="(?P<N>[^"]+)">.*\s*<span class="nowrap">File size: <b>(?P<S>[0-9.]+)&nbsp;(?P<U>[kKMG])i?B</b>'
FILE_OFFLINE_PATTERN = r'<span class="html_download_api-not_exists"></span>'
+ FILE_URL_REPLACEMENTS = [(r"\.com(/.*?)?/files", ".com/en/files"), (r"\.html$", "")]
+
RECAPTCHA_PATTERN = r"Recaptcha.create\('([^']+)', this\);"
DOWNLOAD_LINK_PATTERN = r'<form action="(http://.+?\.depositfiles.com/.+?)" method="get"'
- def setup(self):
- self.resumeDownload = self.multiDL = True if self.account else False
-
- self.pyfile.url = re.sub(r"\.com(/.*?)?/files", ".com/en/files", self.pyfile.url)
-
- def process(self, pyfile):
- if re.search(r"(.*)\.html", self.pyfile.url):
- self.pyfile.url = re.search(r"(.*)\.html", self.pyfile.url).group(1)
-
- self.html = self.load(self.pyfile.url, cookies=True if self.account else False, decode = True)
- self.getFileInfo()
-
- if self.account:
- self.handlePremium()
- else:
- self.handleFree()
-
def handleFree(self):
self.html = self.load(self.pyfile.url, post={"gateway_result":"1"})
if re.search(self.FILE_OFFLINE_PATTERN, self.html): self.offline()
@@ -117,4 +93,6 @@ class DepositfilesCom(SimpleHoster):
def handlePremium(self):
link = unquote(re.search('<div id="download_url">\s*<a href="(http://.+?\.depositfiles.com/.+?)"', self.html).group(1))
- self.download(link) \ No newline at end of file
+ self.download(link)
+
+getInfo = create_getInfo(DepositfilesCom) \ No newline at end of file
diff --git a/module/plugins/hoster/ExtabitCom.py b/module/plugins/hoster/ExtabitCom.py
new file mode 100644
index 000000000..1cbc997f0
--- /dev/null
+++ b/module/plugins/hoster/ExtabitCom.py
@@ -0,0 +1,81 @@
+# -*- 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
+
+class ExtabitCom(SimpleHoster):
+ __name__ = "ExtabitCom"
+ __type__ = "hoster"
+ __pattern__ = r"http://(www\.)?extabit\.com/[a-zA-Z0-9-._ ]{11}B"
+ __version__ = "0.1"
+ __description__ = """UniBytes.com"""
+ __author_name__ = ("zoidberg")
+
+ FILE_NAME_PATTERN = r'<th>File:</th>\s*<td class="col-fileinfo">\s*<div title="(?P<N>[^"]+)">'
+ FILE_SIZE_PATTERN = r'<th>Size:</th>\s*<td class="col-fileinfo">(?P<S>[^<]+)</td>'
+
+ DOMAIN = 'http://www.unibytes.com'
+
+ WAIT_PATTERN = r'Wait for <span id="slowRest">(\d+)</span> sec'
+ DOWNLOAD_LINK_PATTERN = r'<a href="([^"]+)">Download</a>'
+
+ def handleFree(self):
+ action, post_data = self.parseHtmlForm('id="startForm"')
+ self.req.http.c.setopt(FOLLOWLOCATION, 0)
+
+ for i in range(8):
+ self.logDebug(action, post_data)
+ self.html = self.load(self.DOMAIN + action, post = post_data)
+
+ found = re.search(r'location:\s*(\S+)', self.req.http.header, re.I)
+ if found:
+ url = found.group(1)
+ break
+
+ if '>Somebody else is already downloading using your IP-address<' in self.html:
+ self.setWait(600, True)
+ self.wait()
+ self.retry()
+
+ if post_data['step'] == 'last':
+ found = re.search(self.DOWNLOAD_LINK_PATTERN, self.html)
+ if found:
+ url = found.group(1)
+ self.correctCaptcha()
+ break
+ else:
+ self.invalidCaptcha()
+
+ last_step = post_data['step']
+ action, post_data = self.parseHtmlForm('id="stepForm"')
+
+ if last_step == 'timer':
+ found = re.search(self.WAIT_PATTERN, self.html)
+ self.setWait(int(found.group(1)) if found else 60, False)
+ self.wait()
+ elif last_step in ('captcha', 'last'):
+ post_data['captcha'] = self.decryptCaptcha(self.DOMAIN + '/captcha.jpg')
+ else:
+ self.fail("No valid captcha code entered")
+
+ self.logDebug('Download link: ' + url)
+ self.req.http.c.setopt(FOLLOWLOCATION, 1)
+ self.download(url)
+
+getInfo = create_getInfo(UnibytesCom) \ No newline at end of file
diff --git a/module/plugins/hoster/NarodRu.py b/module/plugins/hoster/NarodRu.py
new file mode 100644
index 000000000..335860de9
--- /dev/null
+++ b/module/plugins/hoster/NarodRu.py
@@ -0,0 +1,66 @@
+# -*- 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 random import random
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+class NarodRu(SimpleHoster):
+ __name__ = "NarodRu"
+ __type__ = "hoster"
+ __pattern__ = r"http://(www\.)?narod(\.yandex)?\.ru/(disk|start/[0-9]+\.\w+-narod\.yandex\.ru)/(?P<ID>\d+)/.+"
+ __version__ = "0.1"
+ __description__ = """Narod.ru"""
+ __author_name__ = ("zoidberg")
+
+ FILE_NAME_PATTERN = r'<dt class="name">(?:<[^<]*>)*(?P<N>[^<]+)</dt>'
+ FILE_SIZE_PATTERN = r'<dd class="size">(?P<S>\d[^<]*)</dd>'
+ FILE_OFFLINE_PATTERN = r'<title>404</title>|Файл удален с сервиса|Закончился срок хранения файла\.'
+
+ FILE_SIZE_REPLACEMENTS = [(u'КБ', 'KB'), (u'МБ', 'MB'), (u'ГБ', 'GB')]
+ FILE_URL_REPLACEMENTS = [("narod.yandex.ru/", "narod.ru/"), (r"/start/[0-9]+\.\w+-narod\.yandex\.ru/([0-9]{6,15})/\w+/(\w+)", r"/disk/\1/\2")]
+
+ CAPTCHA_PATTERN = r'<number url="(.*?)">(\w+)</number>'
+ DOWNLOAD_LINK_PATTERN = r'<a class="h-link" rel="yandex_bar" href="(.+?)">'
+
+ def handleFree(self):
+ for i in range(5):
+ self.html = self.load('http://narod.ru/disk/getcapchaxml/?rnd=%d' % int(random() * 777))
+ found = re.search(self.CAPTCHA_PATTERN, self.html)
+ if not found: self.parseError('Captcha')
+ post_data = {"action": "sendcapcha"}
+ captcha_url, post_data['key'] = found.groups()
+ post_data['rep'] = self.decryptCaptcha(captcha_url)
+
+ self.html = self.load(self.pyfile.url, post = post_data, decode = True)
+ found = re.search(self.DOWNLOAD_LINK_PATTERN, self.html)
+ if found:
+ url = 'http://narod.ru' + found.group(1)
+ self.correctCaptcha()
+ break
+ elif u'<b class="error-msg"><strong>Ошиблись?</strong>' in self.html:
+ self.invalidCaptcha()
+ else:
+ self.parseError('Download link')
+ else:
+ self.fail("No valid captcha code entered")
+
+ self.logDebug('Download link: ' + url)
+ self.download(url)
+
+getInfo = create_getInfo(NarodRu) \ No newline at end of file
diff --git a/module/plugins/hoster/OneFichierCom.py b/module/plugins/hoster/OneFichierCom.py
index 16401891b..e4a0a6ed7 100644
--- a/module/plugins/hoster/OneFichierCom.py
+++ b/module/plugins/hoster/OneFichierCom.py
@@ -7,13 +7,13 @@ class OneFichierCom(SimpleHoster):
__name__ = "OneFichierCom"
__type__ = "hoster"
__pattern__ = r"(http://\w+\.((1fichier|d(es)?fichiers|pjointe)\.(com|fr|net|org)|(cjoint|mesfichiers|piecejointe|oi)\.(org|net)|tenvoi\.(com|org|net)|dl4free\.com|alterupload\.com|megadl.fr))"
- __version__ = "0.4"
+ __version__ = "0.41"
__description__ = """1fichier.com download hoster"""
__author_name__ = ("fragonib", "the-razer", "zoidberg")
__author_mail__ = ("fragonib[AT]yahoo[DOT]es", "daniel_ AT gmx DOT net", "zoidberg@mujmail.cz")
- FILE_NAME_PATTERN = r'">File name :</th>[\t\r\n ]+<td>(?P<N>.*?)</td>'
- FILE_SIZE_PATTERN = r'<th>File size :</th>\s+<td>(?P<S>[\d\.]*) (?P<U>\w+)</td>'
+ FILE_NAME_PATTERN = r'">File name :</th>\s*<td>(?P<N>[^<]+)</td>'
+ FILE_SIZE_PATTERN = r'<th>File size :</th>\s*<td>(?P<S>[^<]+</td>'
FILE_OFFLINE_PATTERN = r'The (requested)? file (could not be found|has been deleted)'
FILE_URL_REPLACEMENTS = [(r'(http://[^/]*).*', r'\1/en/')]
diff --git a/module/plugins/hoster/UlozTo.py b/module/plugins/hoster/UlozTo.py
index 618bdd872..5f482e189 100644
--- a/module/plugins/hoster/UlozTo.py
+++ b/module/plugins/hoster/UlozTo.py
@@ -26,8 +26,8 @@ def convertDecimalPrefix(m):
class UlozTo(SimpleHoster):
__name__ = "UlozTo"
__type__ = "hoster"
- __pattern__ = r"http://(\w*\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(?P<id>\d+/[^/?]*)"
- __version__ = "0.82"
+ __pattern__ = r"http://(\w*\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(?:live/)?(?P<id>\d+/[^/?]*)"
+ __version__ = "0.83"
__description__ = """uloz.to"""
__author_name__ = ("zoidberg")
diff --git a/module/plugins/hoster/UnibytesCom.py b/module/plugins/hoster/UnibytesCom.py
new file mode 100644
index 000000000..3c8552271
--- /dev/null
+++ b/module/plugins/hoster/UnibytesCom.py
@@ -0,0 +1,80 @@
+# -*- 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 pycurl import FOLLOWLOCATION
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+
+class UnibytesCom(SimpleHoster):
+ __name__ = "UnibytesCom"
+ __type__ = "hoster"
+ __pattern__ = r"http://(www\.)?unibytes\.com/[a-zA-Z0-9-._ ]{11}B"
+ __version__ = "0.1"
+ __description__ = """UniBytes.com"""
+ __author_name__ = ("zoidberg")
+
+ FILE_INFO_PATTERN = r'<span[^>]*?id="fileName"[^>]*>(?P<N>[^>]+)</span>\s*\((?P<S>\d.*?)\)'
+ DOMAIN = 'http://www.unibytes.com'
+
+ WAIT_PATTERN = r'Wait for <span id="slowRest">(\d+)</span> sec'
+ DOWNLOAD_LINK_PATTERN = r'<a href="([^"]+)">Download</a>'
+
+ def handleFree(self):
+ action, post_data = self.parseHtmlForm('id="startForm"')
+ self.req.http.c.setopt(FOLLOWLOCATION, 0)
+
+ for i in range(8):
+ self.logDebug(action, post_data)
+ self.html = self.load(self.DOMAIN + action, post = post_data)
+
+ found = re.search(r'location:\s*(\S+)', self.req.http.header, re.I)
+ if found:
+ url = found.group(1)
+ break
+
+ if '>Somebody else is already downloading using your IP-address<' in self.html:
+ self.setWait(600, True)
+ self.wait()
+ self.retry()
+
+ if post_data['step'] == 'last':
+ found = re.search(self.DOWNLOAD_LINK_PATTERN, self.html)
+ if found:
+ url = found.group(1)
+ self.correctCaptcha()
+ break
+ else:
+ self.invalidCaptcha()
+
+ last_step = post_data['step']
+ action, post_data = self.parseHtmlForm('id="stepForm"')
+
+ if last_step == 'timer':
+ found = re.search(self.WAIT_PATTERN, self.html)
+ self.setWait(int(found.group(1)) if found else 60, False)
+ self.wait()
+ elif last_step in ('captcha', 'last'):
+ post_data['captcha'] = self.decryptCaptcha(self.DOMAIN + '/captcha.jpg')
+ else:
+ self.fail("No valid captcha code entered")
+
+ self.logDebug('Download link: ' + url)
+ self.req.http.c.setopt(FOLLOWLOCATION, 1)
+ self.download(url)
+
+getInfo = create_getInfo(UnibytesCom) \ No newline at end of file
diff --git a/module/plugins/hoster/WebshareCz.py b/module/plugins/hoster/WebshareCz.py
new file mode 100644
index 000000000..f214ab749
--- /dev/null
+++ b/module/plugins/hoster/WebshareCz.py
@@ -0,0 +1,44 @@
+# -*- 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.network.HTTPRequest import BadHeader
+
+class WebshareCz(SimpleHoster):
+ __name__ = "WebshareCz"
+ __type__ = "hoster"
+ __pattern__ = r"http://(\w+\.)?webshare.cz/(stahnout/)?(?P<ID>\w{10})-.+"
+ __version__ = "0.1"
+ __description__ = """WebShare.cz"""
+ __author_name__ = ("zoidberg")
+
+ FILE_NAME_PATTERN = r'<h3>Stahujete soubor: </h3>\s*<div class="textbox">(?P<N>[^<]+)</div>'
+ FILE_SIZE_PATTERN = r'<h3>Velikost souboru je: </h3>\s*<div class="textbox">(?P<S>[^<]+)</div>'
+ FILE_OFFLINE_PATTERN = r'<h3>Soubor ".*?" nebyl nalezen.</h3>'
+
+ DOWNLOAD_LINK_PATTERN = r'id="download_link" href="(?P<url>.*?)"'
+
+ def handleFree(self):
+ found = re.search(self.DOWNLOAD_LINK_PATTERN, self.html)
+ if not found: self.parseError('Download link')
+ url = found.group('url')
+ self.logDebug('Download link: ' + url)
+ self.download(url)
+
+getInfo = create_getInfo(WebshareCz) \ No newline at end of file
diff --git a/module/plugins/hoster/ZippyshareCom.py b/module/plugins/hoster/ZippyshareCom.py
index 5b32b4068..a0c70d7bb 100644
--- a/module/plugins/hoster/ZippyshareCom.py
+++ b/module/plugins/hoster/ZippyshareCom.py
@@ -1,14 +1,16 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-import re
-from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+import re, subprocess, tempfile, os
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp
+from module.plugins.ReCaptcha import ReCaptcha
+from module.common.json_layer import json_loads
class ZippyshareCom(SimpleHoster):
__name__ = "ZippyshareCom"
__type__ = "hoster"
- __pattern__ = r"(http://www\d{0,2}\.zippyshare.com)/v(?:/|iew.jsp.*key=)(\d+)"
- __version__ = "0.31"
+ __pattern__ = r"(?P<HOST>http://www\d{0,2}\.zippyshare.com)/v(?:/|iew.jsp.*key=)(?P<KEY>\d+)"
+ __version__ = "0.32"
__description__ = """Zippyshare.com Download Hoster"""
__author_name__ = ("spoob", "zoidberg")
__author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz")
@@ -18,34 +20,134 @@ class ZippyshareCom(SimpleHoster):
FILE_OFFLINE_PATTERN = r'>File does not exist on this server</div>'
DOWNLOAD_URL_PATTERN = r"document\.getElementById\('dlbutton'\).href = ([^;]+);"
- SEED_PATTERN = r"seed: (\d*)"
+ SEED_PATTERN = r'swfobject.embedSWF\("([^"]+)".*?seed: (\d+)'
+ CAPTCHA_KEY_PATTERN = r'Recaptcha.create\("([^"]+)"'
+ CAPTCHA_SHORTENCODE_PATTERN = r"shortencode: '([^']+)'"
+ CAPTCHA_DOWNLOAD_PATTERN = r"document.location = '([^']+)'"
+
+ LAST_KNOWN_VALUES = (1, 1424574) #time = (seed * multimply) % modulo
def setup(self):
self.html = None
self.wantReconnect = False
self.multiDL = True
- def handleFree(self):
+ def handleFree(self):
url = self.get_file_url()
+ if not url: self.fail("Download URL not found.")
self.logDebug("Download URL %s" % url)
self.download(url, cookies = True)
+ check = self.checkDownload({
+ "swf_values": re.compile(self.SEED_PATTERN)
+ })
+
+ if check == "swf_values":
+ swf_sts = self.getStorage("swf_sts")
+ if not swf_sts:
+ self.setStorage("swf_sts", 2)
+ self.setStorage("swf_stamp", 0)
+ elif swf_sts == '1':
+ self.setStorage("swf_sts", 2)
+
+ self.retry(max_tries = 1)
+
def get_file_url(self):
""" returns the absolute downloadable filepath
"""
- file_host, file_key = re.search(self.__pattern__, self.pyfile.url).groups()
+ url = multiply = modulo = None
found = re.search(self.DOWNLOAD_URL_PATTERN, self.html)
if found:
+ #Method #1: JS eval
url = self.js.eval(found.group(1))
else:
+ #Method #2: SWF eval
seed_search = re.search(self.SEED_PATTERN, self.html)
- if seed_search is None: self.parseError('SEED')
+ if seed_search:
+ swf_url, file_seed = seed_search.groups()
+
+ swf_sts = self.getStorage("swf_sts")
+ swf_stamp = int(self.getStorage("swf_stamp") or 0)
+ self.logDebug("SWF", swf_sts, swf_stamp)
+
+ if not swf_sts:
+ self.logDebug('Using default values')
+ multiply, modulo = self.LAST_KNOWN_VALUES
+ elif swf_sts == "1":
+ self.logDebug('Using stored values')
+ multiply = self.getStorage("multiply")
+ modulo = self.getStorage("modulo")
+ elif swf_sts == "2" and (swf_stamp + 3600000) < timestamp():
+ multiply, modulo = self.get_swf_values(self.file_info['HOST'] + swf_url)
+
+ if multiply and modulo:
+ self.logDebug("TIME = (%s * %s) %s" % (file_seed, multiply, modulo))
+ url = "/download?key=%s&time=%d" % (self.file_info['KEY'], (int(file_seed) * int(multiply)) % int(modulo))
+
+ if not url:
+ #Method #3: Captcha
+ url = self.do_recaptcha()
+
+ return self.file_info['HOST'] + url
+
+ def get_swf_values(self, swf_url):
+ self.logDebug('Parsing values from %s' % swf_url)
+ multiply = modulo = None
+
+ fd, fpath = tempfile.mkstemp()
+ try:
+ swf_data = self.load(swf_url)
+ os.write(fd, swf_data)
+
+ p = subprocess.Popen(['swfdump', '-a', fpath], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = p.communicate()
+
+ if err:
+ self.logError(err)
+ else:
+ m_str = re.search(r'::break.*?{(.*?)}', out, re.S).group(1)
+ multiply = re.search(r'pushbyte (\d+)', m_str).group(1)
+ modulo = re.search(r'pushint (\d+)', m_str).group(1)
+ finally:
+ os.close(fd)
+ os.remove(fpath)
+
+ if multiply and modulo:
+ self.setStorage("multiply", multiply)
+ self.setStorage("modulo", modulo)
+ self.setStorage("swf_sts", 1)
+ else:
+ self.logError("Parsing SWF failed: swfdump not installed or plugin out of date")
+ self.setStorage("swf_sts", 2)
- file_seed = int(seed_search.group(1))
- time = str((file_seed * 24) % 6743256)
- url = "/download?key=" + str(file_key) + "&time=" + str(time)
+ self.setStorage("swf_stamp", timestamp())
+
+ return multiply, modulo
+
+ def do_recaptcha(self):
+ self.logDebug('Trying to solve captcha')
+ captcha_key = re.search(self.CAPTCHA_KEY_PATTERN, self.html).group(1)
+ shortencode = re.search(self.CAPTCHA_SHORTENCODE_PATTERN, self.html).group(1)
+ url = re.search(self.CAPTCHA_DOWNLOAD_PATTERN, self.html).group(1)
+
+ recaptcha = ReCaptcha(self)
+
+ for i in range(5):
+ challenge, code = recaptcha.challenge(captcha_key)
+
+ response = json_loads(self.load(self.file_info['HOST'] + '/rest/captcha/test',
+ post={'challenge': challenge,
+ 'response': code,
+ 'shortencode': shortencode}))
+ self.logDebug("reCaptcha response : %s" % response)
+ if response == True:
+ self.correctCaptcha
+ break
+ else:
+ self.invalidCaptcha()
+ else: self.fail("Invalid captcha")
- return file_host + url
+ return url
getInfo = create_getInfo(ZippyshareCom) \ No newline at end of file