diff options
author | Ivo Buff <kagenoshin@gmx.ch> | 2014-04-10 15:33:43 +0200 |
---|---|---|
committer | Stefano <l.stickell@yahoo.it> | 2014-04-21 17:15:14 +0200 |
commit | be3a9e3adacac29f6415247a8e8983b2417a8333 (patch) | |
tree | 68b4ece7b6b8043d4a45d2d13794457dafc1b9c2 | |
parent | Upstore: using the improved ReCaptcha class (diff) | |
download | pyload-be3a9e3adacac29f6415247a8e8983b2417a8333.tar.xz |
New multihoster: Vipleech4u
Merges #524
(cherry picked from commit b75cd8a3f83a970f67fcdfaa5bed7ecdb006b45b)
-rw-r--r-- | module/plugins/accounts/Vipleech4uCom.py | 41 | ||||
-rw-r--r-- | module/plugins/hooks/Vipleech4uCom.py | 80 | ||||
-rw-r--r-- | module/plugins/hoster/Vipleech4uCom.py | 84 |
3 files changed, 205 insertions, 0 deletions
diff --git a/module/plugins/accounts/Vipleech4uCom.py b/module/plugins/accounts/Vipleech4uCom.py new file mode 100644 index 000000000..1e8463456 --- /dev/null +++ b/module/plugins/accounts/Vipleech4uCom.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +import re +from time import mktime, strptime + +from module.plugins.Account import Account + + +class Vipleech4uCom(Account): + __name__ = "Vipleech4uCom" + __version__ = "0.1" + __type__ = "account" + __description__ = """Vipleech4u.com account plugin""" + __author_name__ = ("Kagenoshin") + __author_mail__ = ("kagenoshin@gmx.ch") + + STATUS_PATTERN = re.compile(r'status.*?<\s*?strong\s*?>[^<]*?vip[^<]*?<', re.I) + VALIDUNTIL_PATTERN = re.compile(r'valid\s*?until.*?<\s*?strong\s*?>([^<]*?)<', re.I) + + def loadAccountInfo(self, user, req): + response = req.load("http://vipleech4u.com", decode=True) + status = self.STATUS_PATTERN.search(response) + + validuntil = self.VALIDUNTIL_PATTERN.search(response) + if validuntil: + validuntil = validuntil.group(1) + + if status and validuntil: + print status + print validuntil + return {"trafficleft": -1, "validuntil": mktime(strptime("%s 23:59" % validuntil, "%d-%m-%Y %H:%M"))} + else: + return {"premium": False} + + def login(self, user, data, req): + self.loginname = user + self.password = data["password"] + post_data = {'action': 'login', 'user': self.loginname, 'pass': self.password} + req.load("http://vipleech4u.com/login.php") + response = req.load("http://vipleech4u.com/login.php", post=post_data, decode=True) + if 'Username or Password are incorrect' in response: + self.wrongPassword() diff --git a/module/plugins/hooks/Vipleech4uCom.py b/module/plugins/hooks/Vipleech4uCom.py new file mode 100644 index 000000000..b2156b017 --- /dev/null +++ b/module/plugins/hooks/Vipleech4uCom.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +import re + +from module.network.RequestFactory import getURL +from module.plugins.internal.MultiHoster import MultiHoster + + +class Vipleech4uCom(MultiHoster): + __name__ = "Vipleech4uCom" + __version__ = "0.01" + __type__ = "hook" + __config__ = [("activated", "bool", "Activated", "False"), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", "")] + __description__ = """Vipleech4u.com hook plugin""" + __author_name__ = ("Kagenoshin") + __author_mail__ = ("kagenoshin@gmx.ch") + + HOSTER_PATTERN = re.compile(r'align\s*?=\s*?["\']*?left.*?<\s*?strong\s*?>([^<]*?)<', re.I) + + def getHoster(self): + hosters = { + 'depositfiles': ['depositfiles.com', 'dfiles.eu'], + 'uploaded': ['uploaded.to', 'uploaded.net', 'ul.to'], + 'rapidggator': ['rapidgator.net'], # they have a typo it's called rapidgator + 'freakshare': ['freakshare.net', 'freakshare.com'], + 'filefactory': ['filefactory.com'], + 'bitshare': ['bitshare.com'], + 'share-online': ['share-online.biz', 'egoshare.com'], + 'youtube': ['youtube.com'], + 'turbobit': ['turbobit.net', 'unextfiles.com'], + 'firedrive': ['firedrive.com', 'putlocker.com'], + 'filepost': ['filepost.com', 'fp.io'], + 'netload': ['netload.in'], + 'uploadhero': ['uploadhero.com'], + 'ryushare': ['ryushare.com'], + } + + #check if the list is still valid + self.check_for_new_or_removed_hosters(hosters) + + #build list + hoster_list = [] + + for item in hosters.itervalues(): + hoster_list.extend(item) + + return hoster_list + + def check_for_new_or_removed_hosters(self, hosters): + #get the old hosters + old_hosters = hosters.keys() + + #load the current hosters from vipleech4u.com + page = getURL('http://vipleech4u.com/hosts.php') + current_hosters = self.HOSTER_PATTERN.findall(page) + current_hosters = [x.lower() for x in current_hosters] + + #let's look for new hosters + new_hosters = [] + + for hoster in current_hosters: + if not hoster in old_hosters: + new_hosters.append(hoster) + + #let's look for removed hosters + removed_hosters = [] + + for hoster in old_hosters: + if not hoster in current_hosters: + removed_hosters.append(hoster) + + if new_hosters: + self.logDebug('The following new hosters were found on vipleech4u.com: %s' % str(new_hosters)) + + if removed_hosters: + self.logDebug('The following hosters were removed from vipleech4u.com: %s' % str(removed_hosters)) + + if not (new_hosters and removed_hosters): + self.logDebug('The hoster list is still valid.') diff --git a/module/plugins/hoster/Vipleech4uCom.py b/module/plugins/hoster/Vipleech4uCom.py new file mode 100644 index 000000000..53768a430 --- /dev/null +++ b/module/plugins/hoster/Vipleech4uCom.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- + +import re + +from module.plugins.Hoster import Hoster + + +class Vipleech4uCom(Hoster): + __name__ = "Vipleech4uCom" + __version__ = "0.1" + __type__ = "hoster" + __pattern__ = r"http://vipleech4u.com/manager.php" + __description__ = """Vipleech4u.com hoster plugin""" + __author_name__ = ("Kagenoshin") + __author_mail__ = ("kagenoshin@gmx.ch") + + FILENAME_PATTERN = re.compile(r'name\s*?=\s*?["\']filename["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I) + HOST_PATTERN = re.compile(r'name\s*?=\s*?["\']host["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I) + PATH_PATTERN = re.compile(r'name\s*?=\s*?["\']path["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I) + REFERER_PATTERN = re.compile(r'name\s*?=\s*?["\']referer["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I) + LINK_PATTERN = re.compile(r'name\s*?=\s*?["\']link["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I) + COOKIE_PATTERN = re.compile(r'name\s*?=\s*?["\']cookie["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I) + + def setup(self): + self.resumeDownload = self.multiDL = True + self.chunkLimit = 1 + + def process(self, pyfile): + if not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "vipleech4u.com") + self.fail("No vipleech4u.com account provided") + + self.logDebug("Old URL: %s" % pyfile.url) + + new_url = pyfile.url + + if re.match(self.__pattern__, new_url): + self.fail("Can't handle vipleech4u links.") + + #upload the link which has to be loaded + page = self.load('http://vipleech4u.com/generator.php', post={'links': new_url, 'ddl': 'no'}) + + #switch to the manager and see what's happening + page = self.load('http://vipleech4u.com/unrestrict.php', get={'link': new_url, 'premium_acc': 'on'}) + + if re.search(r'You have generated maximum links available to you today', page, re.I): + self.fail('Daily limit reached.') + + filename = self.FILENAME_PATTERN.search(page) + host = self.HOST_PATTERN.search(page) + path = self.PATH_PATTERN.search(page) + referer = self.REFERER_PATTERN.search(page) + link = self.LINK_PATTERN.search(page) + cookie = self.COOKIE_PATTERN.search(page) + + #build the post-dictionary + post_dict = {} + + if filename: + post_dict.update({'filename': filename.group(1)}) + if host: + post_dict.update({'host': host.group(1)}) + if path: + post_dict.update({'path': path.group(1)}) + if referer: + post_dict.update({'referer': referer.group(1)}) + if link: + post_dict.update({'link': link.group(1)}) + if cookie: + post_dict.update({'cookie': cookie.group(1)}) + + if not post_dict: + self.logDebug('Get an empty post_dict. Strange.') + + self.setWait(5) + self.wait() + self.logDebug("Unrestricted URL: " + str(post_dict)) + + self.download('http://vipleech4u.com/unrestrict.php', post=post_dict, disposition=True) + + check = self.checkDownload({"bad": "<html"}) + + if check == "bad": + self.retry(24, 150, 'Bad file downloaded') |