summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--module/plugins/hoster/UploadableCh.py139
1 files changed, 73 insertions, 66 deletions
diff --git a/module/plugins/hoster/UploadableCh.py b/module/plugins/hoster/UploadableCh.py
index 05ed0247f..77b3d7d8a 100644
--- a/module/plugins/hoster/UploadableCh.py
+++ b/module/plugins/hoster/UploadableCh.py
@@ -1,83 +1,90 @@
# -*- coding: utf-8 -*-
-#Testlink:
-#http://www.uploadable.ch/file/JG3nbN6fUCvh/test.txt
-#
-import re,time
+
+import re
+
+from time import sleep
+
+from module.plugins.internal.CaptchaService import ReCaptcha
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-from module.plugins.ReCaptcha import ReCaptcha
+
class UploadableCh(SimpleHoster):
- __name__ = "UploadableCh"
- __type__ = "hoster"
- __pattern__ = r"https?://www.uploadable.ch/file/.*"
- __version__ = "0.01"
- __description__ = """uploadable.ch hoster plugin"""
- __author_name__ = ("zapp-brannigan")
- __author_mail__ = ("fuerst.reinje@web.de")
-
- FILE_INFO_PATTERN = r"""div id=\"file_name\" title=.*>(?P<N>.+)<span class=\"filename_normal\">\((?P<S>.*) (?P<U>[kKmMgG]?i?[bB].*)\)</span><"""
- RECAPTCHA_KEY = "6LdlJuwSAAAAAPJbPIoUhyqOJd7-yrah5Nhim5S3"
- WAIT_PATTERN = r'data-time=\"(\d+)\" data-format'
- FILE_ID = r'name=\"recaptcha_shortencode_field\" value=\"(.+)\"'
- FILE_OFFLINE_PATTERN = r'<h1>File not available</h1>'
-
+ __name__ = "UploadableCh"
+ __type__ = "hoster"
+ __version__ = "0.02"
+
+ __pattern__ = r'http://(?:www\.)?uploadable\.ch/file/(?P<ID>\w+)'
+
+ __description__ = """Uploadable.ch hoster plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("zapp-brannigan", "fuerst.reinje@web.de"),
+ ("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ FILE_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'data-time="(\d+)" data-format'
+
+ FILE_URL_REPLACEMENTS = [(__pattern__ + ".*", r'http://www.uploadable.ch/file/\g<ID>')]
+
+
def setup(self):
- self.multiDL = False
+ self.multiDL = False
self.chunkLimit = 1
-
- def process(self, pyfile):
- #Load website and set a cookie
- self.html = self.load(pyfile.url, cookies=True, decode=True)
-
- # Set some vars
- base_url = "http://www.uploadable.ch"
- file_id = re.search(self.FILE_ID,self.html).group(1)
- long_url = base_url+"/file/"+file_id+"/"+self.pyfile.name
- not_so_long_url = base_url+"/file/"+file_id
- self.logDebug("filename: "+pyfile.name)
- self.logDebug("base_url: "+base_url)
- self.logDebug("file_id: "+file_id)
- self.logDebug("long_url: "+long_url)
- self.logDebug("not_so_long_url: "+not_so_long_url)
-
+
+
+ def handleFree(self):
# Click the "free user" button and wait
- post_data = { "downloadLink": "wait" }
- a = self.load(not_so_long_url, cookies=True, post=post_data, decode=True)
- self.logDebug(a) #Expected output: {"waitTime":30}
- seconds = re.search(self.WAIT_PATTERN,self.html).group(1)
- self.setWait(int(seconds) + 2)
- self.wait()
-
+ a = self.load(self.pyfile.url, cookies=True, post={'downloadLink': "wait"}, decode=True)
+ self.logDebug(a)
+
+ m = re.search(self.WAIT_PATTERN, a)
+ if m is not None:
+ self.wait(int(m.group(1))) #: Expected output: {"waitTime":30}
+ else:
+ self.error("WAIT_PATTERN")
+
# Make the recaptcha appear and show it the pyload interface
- post_data = { "checkDownload": "check" }
- b = self.load(long_url, cookies=True, post=post_data, decode=True)
- self.logDebug(b) #Expected output: {"success":"showCaptcha"}
+ b = self.load(self.pyfile.url, cookies=True, post={'checkDownload': "check"}, decode=True)
+ self.logDebug(b) #: Expected output: {"success":"showCaptcha"}
+
recaptcha = ReCaptcha(self)
- challenge, code = recaptcha.challenge(self.RECAPTCHA_KEY)
-
+
+ challenge, captcha = recaptcha.challenge(self.RECAPTCHA_KEY)
+
# Submit the captcha solution
- post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": code, "recaptcha_shortencode_field": file_id}
- self.load(base_url+"/checkReCaptcha.php", cookies=True, post=post_data, decode=True)
- time.sleep(3)
-
+ self.load("http://www.uploadable.ch/checkReCaptcha.php",
+ cookies=True,
+ post={'recaptcha_challenge_field' : challenge,
+ 'recaptcha_response_field' : captcha,
+ 'recaptcha_shortencode_field': self.info['ID']},
+ decode=True)
+
+ self.wait(3)
+
# Get ready for downloading
- post_data = {"downloadLink": "show"}
- self.load(not_so_long_url, cookies=True, post=post_data, decode=True)
- time.sleep(3)
-
+ self.load(self.pyfile.url, cookies=True, post={'downloadLink': "show"}, decode=True)
+
+ self.wait(3)
+
# Download the file
- post_data = {"download": "normal"}
- self.download(not_so_long_url, cookies=True, post=post_data, disposition=True)
-
- # Check the downloaded file
- check = self.checkDownload({"wait_or_reconnect": re.compile("Please wait for"), "is_html": re.compile("<head>")})
+ self.download(self.pyfile.url, cookies=True, post={'download': "normal"}, disposition=True)
+
+
+ def checkFile(self):
+ check = self.checkDownload({'wait_or_reconnect': re.compile("Please wait for"),
+ 'is_html' : re.compile("<head>")})
+
if check == "wait_or_reconnect":
self.logInfo("Downloadlimit reached, please wait or reconnect")
- self.setWait(60*60,True)
- self.wait()
+ self.wait(60 * 60, True)
self.retry()
+
elif check == "is_html":
- self.logInfo("The downloaded file is html, maybe you entered a wrong captcha")
- self.retry()
-
+ self.error("Downloaded file is an html file")
+
+
getInfo = create_getInfo(UploadableCh)