summaryrefslogtreecommitdiffstats
path: root/module/plugins/hoster/WuploadCom.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hoster/WuploadCom.py')
-rw-r--r--module/plugins/hoster/WuploadCom.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/module/plugins/hoster/WuploadCom.py b/module/plugins/hoster/WuploadCom.py
new file mode 100644
index 000000000..e19ca1cd3
--- /dev/null
+++ b/module/plugins/hoster/WuploadCom.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import re
+import string
+
+from types import MethodType
+
+from module.plugins.Hoster import Hoster
+from module.plugins.Plugin import chunks
+
+from module.network.RequestFactory import getURL
+
+try:
+ from json import loads as json_loads
+except ImportError: # pragma: no cover
+ from module.lib.simplejson import loads as json_loads
+
+def getInfo(urls):
+ for chunk in chunks(urls, 20):
+ result = []
+ ids = dict()
+ for url in chunk:
+ id = getId(url)
+ if id:
+ ids[id] = url
+ else:
+ result.append((None, 0, 1, url))
+
+ if len(ids) > 0:
+ check_url = "http://api.wupload.com/link?method=getInfo&format=json&ids=" + ",".join(ids.keys())
+ response = json_loads(getURL(check_url).decode("utf8", "ignore"))
+ for item in response["FSApi_Link"]["getInfo"]["response"]["links"]:
+ if item["status"] != "AVAILABLE":
+ result.append((None, 0, 1, ids[item["id"]]))
+ else:
+ result.append((item["filename"], item["size"], 2, ids[str(item["id"])]))
+ yield result
+
+
+def getId(url):
+ match = re.search(WuploadCom.FILE_ID_PATTERN, url)
+ if match:
+ return string.replace(match.group("id"), "/", "-")
+ else:
+ return None
+
+
+class WuploadCom(Hoster):
+ __name__ = "WuploadCom"
+ __type__ = "hoster"
+ __pattern__ = r"http://[\w\.]*?wupload\..*?/file/(([a-z][0-9]+/)?[0-9]+)(/.*)?"
+ __version__ = "0.1"
+ __description__ = """Wupload com"""
+ __author_name__ = ("jeix", "paulking")
+ __author_mail__ = ("jeix@hasnomail.de", "")
+
+ API_ADDRESS = "http://api.wupload.com"
+ URL_DOMAIN_PATTERN = r'(?P<prefix>.*?)(?P<domain>.wupload\..+?)(?P<suffix>/.*)'
+ FILE_ID_PATTERN = r'/file/(?P<id>([a-z][0-9]+/)?[0-9]+)(/.*)?'
+ FILE_LINK_PATTERN = r'<p><a href="(http://.+?\.wupload\..+?)"><span>Download Now'
+ WAIT_TIME_PATTERN = r'countDownDelay = (?P<wait>\d+)'
+ WAIT_TM_PATTERN = r"name='tm' value='(.*?)' />"
+ WAIT_TM_HASH_PATTERN = r"name='tm_hash' value='(.*?)' />"
+ CAPTCHA_TYPE1_PATTERN = r'Recaptcha.create\("(.*?)",'
+ CAPTCHA_TYPE2_PATTERN = r'id="recaptcha_image"><img style="display: block;" src="(.+)image?c=(.+?)"'
+
+ def init(self):
+ #this plugin shares most things with filesonic, always keep in mind when editing it
+
+ module = self.core.pluginManager.getPlugin("FilesonicCom")
+ fs = getattr(module, "FilesonicCom")
+
+ self.newInit = MethodType(fs.__dict__["init"], self, WuploadCom)
+
+ methods = ["process", "checkFile", "downloadPremium", "downloadFree", "doWait", "handleErrors"]
+ #methods to bind from fs
+
+ for m in methods:
+ setattr(self, m, MethodType(fs.__dict__[m], self, WuploadCom))
+
+ self.newInit()
+
+
+ def getDomain(self):
+ result = json_loads(
+ self.load(self.API_ADDRESS + "/utility?method=getWuploadDomainForCurrentIp&format=json", utf8=True))
+ self.log.debug("%s: response to get domain %s" % (self.__name__, result))
+ return result["FSApi_Utility"]["getWuploadDomainForCurrentIp"]["response"] \ No newline at end of file