summaryrefslogtreecommitdiffstats
path: root/module/plugins
diff options
context:
space:
mode:
authorGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2013-01-17 19:12:07 +0100
committerGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2013-01-17 19:12:07 +0100
commit7008f837ab788e6e0dafba75cb477c8f7c398d01 (patch)
tree45bced15d602081fe5c0d6f44c8796fbe85e7022 /module/plugins
parentAdded LONG_WAIT_PATTERN regex (diff)
parentMerged in z00nx0/pyload/CatShareNet (pull request #46: Added CatShareNet plugin) (diff)
downloadpyload-7008f837ab788e6e0dafba75cb477c8f7c398d01.tar.xz
Merged in z00nx0/pyload/IFileWs (pull request #51: Added IFileWs plugin)
Diffstat (limited to 'module/plugins')
-rw-r--r--module/plugins/crypter/LetitbitNetFolder.py33
-rw-r--r--module/plugins/hoster/CatShareNet.py38
-rw-r--r--module/plugins/hoster/CloudzerNet.py65
-rw-r--r--module/plugins/hoster/SecureUploadEu.py18
4 files changed, 154 insertions, 0 deletions
diff --git a/module/plugins/crypter/LetitbitNetFolder.py b/module/plugins/crypter/LetitbitNetFolder.py
new file mode 100644
index 000000000..68aad9dd7
--- /dev/null
+++ b/module/plugins/crypter/LetitbitNetFolder.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+
+import re
+from module.plugins.Crypter import Crypter
+
+
+class LetitbitNetFolder(Crypter):
+ __name__ = "LetitbitNetFolder"
+ __type__ = "crypter"
+ __pattern__ = r"http://(?:www\.)?letitbit.net/folder/\w+"
+ __version__ = "0.1"
+ __description__ = """Letitbit.net Folder Plugin"""
+ __author_name__ = ("DHMH", "z00nx")
+ __author_mail__ = ("webmaster@pcProfil.de", "z00nx0@gmail.com")
+
+ FOLDER_PATTERN = r'<table>(.*)</table>'
+ LINK_PATTERN = r'<a href="([^"]+)" target="_blank">'
+
+ def decrypt(self, pyfile):
+ html = self.load(self.pyfile.url)
+
+ new_links = []
+
+ folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL)
+ if folder is None:
+ self.fail("Parse error (FOLDER)")
+
+ new_links.extend(re.findall(self.LINK_PATTERN, folder.group(0)))
+
+ if new_links:
+ self.core.files.addLinks(new_links, self.pyfile.package().id)
+ else:
+ self.fail('Could not extract any links')
diff --git a/module/plugins/hoster/CatShareNet.py b/module/plugins/hoster/CatShareNet.py
new file mode 100644
index 000000000..47063096e
--- /dev/null
+++ b/module/plugins/hoster/CatShareNet.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import re
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from module.plugins.ReCaptcha import ReCaptcha
+
+
+class CatShareNet(SimpleHoster):
+ __name__ = "CatShareNet"
+ __type__ = "hoster"
+ __pattern__ = r"http://(www\.)?catshare.net/\w{16}.*"
+ __version__ = "0.01"
+ __description__ = """CatShare.net Download Hoster"""
+ __author_name__ = ("z00nx")
+ __author_mail__ = ("z00nx0@gmail.com")
+
+ FILE_INFO_PATTERN = r'<h3 class="pull-left"[^>]+>(?P<N>.*)</h3>\s+<h3 class="pull-right"[^>]+>(?P<S>.*)</h3>'
+ FILE_OFFLINE_PATTERN = r'Podany plik zosta'
+ SECONDS_PATTERN = 'var\s+count\s+=\s+(\d+);'
+ RECAPTCHA_KEY = "6Lfln9kSAAAAANZ9JtHSOgxUPB9qfDFeLUI_QMEy"
+
+ def handleFree(self):
+ found = re.search(self.SECONDS_PATTERN, self.html)
+ seconds = int(found.group(1))
+ self.logDebug("Seconds found", seconds)
+ self.setWait(seconds + 1)
+ self.wait()
+ recaptcha = ReCaptcha(self)
+ challenge, code = recaptcha.challenge(self.RECAPTCHA_KEY)
+ post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": code}
+ self.download(self.pyfile.url, post=post_data)
+ check = self.checkDownload({"html": re.compile("\A<!DOCTYPE html PUBLIC")})
+ if check == "html":
+ self.logDebug("Wrong captcha entered")
+ self.invalidCaptcha()
+ self.retry()
+
+getInfo = create_getInfo(CatShareNet)
diff --git a/module/plugins/hoster/CloudzerNet.py b/module/plugins/hoster/CloudzerNet.py
new file mode 100644
index 000000000..74a61d038
--- /dev/null
+++ b/module/plugins/hoster/CloudzerNet.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+import re
+from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
+from module.common.json_layer import json_loads
+from module.plugins.ReCaptcha import ReCaptcha
+from module.network.RequestFactory import getURL
+
+
+def getInfo(urls):
+ for url in urls:
+ header = getURL(url, just_header=True)
+ if 'Location: http://cloudzer.net/404' in header:
+ file_info = (url, 0, 1, url)
+ else:
+ file_info = parseFileInfo(CloudzerNet, url, getURL(url, decode=True))
+ yield file_info
+
+
+class CloudzerNet(SimpleHoster):
+ __name__ = "CloudzerNet"
+ __type__ = "hoster"
+ __pattern__ = r"http://(www\.)?(cloudzer\.net/file/|clz\.to/(file/)?)(?P<ID>\w+).*"
+ __version__ = "0.01"
+ __description__ = """Cloudzer.net hoster plugin"""
+ __author_name__ = ("gs", "z00nx")
+ __author_mail__ = ("I-_-I-_-I@web.de", "z00nx0@gmail.com")
+
+ FILE_INFO_PATTERN = '<b class="filename"[^>]+>(?P<N>[^<]+)</b>\s+<span class="size">(?P<S>[^<]+)</span>'
+ WAIT_PATTERN = '<meta name="wait" content="(\d+)">'
+ FILE_OFFLINE_PATTERN = r'Please check the URL for typing errors, respectively'
+ CAPTCHA_KEY = '6Lcqz78SAAAAAPgsTYF3UlGf2QFQCNuPMenuyHF3'
+
+ def handleFree(self):
+ found = re.search(self.WAIT_PATTERN, self.html)
+ seconds = int(found.group(1))
+ self.logDebug("Found wait", seconds)
+ self.setWait(seconds + 1)
+ self.wait()
+ response = self.load('http://cloudzer.net/io/ticket/slot/%s' % self.file_info['ID'], post=' ', cookies=True)
+ self.logDebug("Download slot request response", response)
+ response = json_loads(response)
+ if response["succ"] is not True:
+ self.fail("Unable to get a download slot")
+
+ recaptcha = ReCaptcha(self)
+ challenge, response = recaptcha.challenge(self.CAPTCHA_KEY)
+ post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": response}
+ response = json_loads(self.load('http://cloudzer.net/io/ticket/captcha/%s' % self.file_info['ID'], post=post_data, cookies=True))
+ self.logDebug("Captcha check response", response)
+ self.logDebug("First check")
+
+ if "err" in response:
+ if response["err"] == "captcha":
+ self.logDebug("Wrong captcha")
+ self.invalidCaptcha()
+ self.retry()
+ elif "Sie haben die max" in response["err"] or "You have reached the max" in response["err"]:
+ self.logDebug("Download limit reached, waiting an hour")
+ self.setWait(3600)
+ self.wait()
+ if "type" in response:
+ if response["type"] == "download":
+ url = response["url"]
+ self.logDebug("Download link", url)
+ self.download(url, disposition=True)
diff --git a/module/plugins/hoster/SecureUploadEu.py b/module/plugins/hoster/SecureUploadEu.py
new file mode 100644
index 000000000..b9a900d96
--- /dev/null
+++ b/module/plugins/hoster/SecureUploadEu.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+
+
+class SecureUploadEu(XFileSharingPro):
+ __name__ = "SecureUploadEu"
+ __type__ = "hoster"
+ __pattern__ = r"http://(www\.)?secureupload\.eu/(\w){12}(/\w+)"
+ __version__ = "0.01"
+ __description__ = """SecureUpload.eu hoster plugin"""
+ __author_name__ = ("z00nx")
+ __author_mail__ = ("z00nx0@gmail.com")
+
+ HOSTER_NAME = "secureupload.eu"
+ FILE_INFO_PATTERN = '<h3>Downloading (?P<N>[^<]+) \((?P<S>[^<]+)\)</h3>'
+ FILE_OFFLINE_PATTERN = 'The file was removed|File Not Found'
+
+getInfo = create_getInfo(SecureUploadEu)