From a159147ae67249279677d51ff348c0c7c70f0b1d Mon Sep 17 00:00:00 2001 From: zoidberg10 Date: Tue, 27 Sep 2011 11:04:57 +0200 Subject: plugins: fix czshare premium, add ifolder.ru, share-rapid.com by MikyWoW --- module/plugins/accounts/HellspyCz.py | 39 +++++------ module/plugins/accounts/ShareRapidCom.py | 36 ++++++++++ module/plugins/hoster/CzshareCom.py | 20 +++--- module/plugins/hoster/DataportCz.py | 9 +-- module/plugins/hoster/EuroshareEu.py | 9 ++- module/plugins/hoster/FreevideoCz.py | 2 +- module/plugins/hoster/IfolderRu.py | 113 +++++++++++++++++++++++++++++++ module/plugins/hoster/QuickshareCz.py | 5 +- module/plugins/hoster/ShareRapidCom.py | 36 ++++++++++ module/plugins/hoster/StreamCz.py | 2 +- 10 files changed, 227 insertions(+), 44 deletions(-) create mode 100644 module/plugins/accounts/ShareRapidCom.py create mode 100644 module/plugins/hoster/IfolderRu.py create mode 100644 module/plugins/hoster/ShareRapidCom.py (limited to 'module/plugins') diff --git a/module/plugins/accounts/HellspyCz.py b/module/plugins/accounts/HellspyCz.py index 10c7e3882..c07fd748a 100644 --- a/module/plugins/accounts/HellspyCz.py +++ b/module/plugins/accounts/HellspyCz.py @@ -13,7 +13,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, see . - + @author: zoidberg """ @@ -28,55 +28,52 @@ class HellspyCz(Account): __description__ = """hellspy.cz account plugin""" __author_name__ = ("zoidberg") __author_mail__ = ("zoidberg@mujmail.cz") - + ACTION_PATTERN = r'
]*action="([^"]+user_hash=([^"]+))">' CREDIT_LEFT_PATTERN = r'(\d+)' WRONG_PASSWORD_PATTERN = r'

\s*Wrong user or password was entered
' - phpsessid = '' + phpsessid = '' def loadAccountInfo(self, user, req): cj = self.getAccountCookies(user) - cj.setCookie(".hellspy.com", "PHPSESSID", self.phpsessid) - + cj.setCookie(".hellspy.com", "PHPSESSID", self.phpsessid) + html = req.load("http://www.hellspy.com/") - + found = re.search(self.CREDIT_LEFT_PATTERN, html) if found is None: credits = 0 else: credits = int(found.group(1)) * 1024 - + return {"validuntil": -1, "trafficleft": credits} - - def login(self, user, data,req): + + def login(self, user, data,req): html = req.load('http://www.hellspy.com/') found = re.search(self.ACTION_PATTERN, html) if found is None: - self.logError('Parse error (FORM)') + self.logError('Parse error (FORM)') action, self.phpsessid = found.group(1).replace('&','&'), found.group(2) - + self.logDebug("PHPSESSID:" + self.phpsessid) html = req.load("http://www.hellspy.com/--%s-" % self.phpsessid) - + html = req.load(action, post={ "login": "1", "password": data["password"], "username": user, "redir_url": 'http://www.hellspy.com/?do=loginBox-login', "permanent_login": "1" - }) - + }) + cj = self.getAccountCookies(user) cj.setCookie(".hellspy.com", "PHPSESSID", self.phpsessid) - + self.logDebug(req.lastURL) self.logDebug(req.lastEffectiveURL) - - html = req.load("http://www.hellspy.com/", get = {"do":"loginBox-login"}) - - if not re.search(self.CREDIT_LEFT_PATTERN, html): - self.wrongPassword() + html = req.load("http://www.hellspy.com/", get = {"do":"loginBox-login"}) - \ No newline at end of file + if not re.search(self.CREDIT_LEFT_PATTERN, html): + self.wrongPassword() \ No newline at end of file diff --git a/module/plugins/accounts/ShareRapidCom.py b/module/plugins/accounts/ShareRapidCom.py new file mode 100644 index 000000000..9828b1f7e --- /dev/null +++ b/module/plugins/accounts/ShareRapidCom.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +import re +from module.plugins.Account import Account + +class ShareRapidCom(Account): + __name__ = "ShareRapidCom" + __version__ = "0.1" + __type__ = "account" + __description__ = """ShareRapid account plugin""" + __author_name__ = ("MikyWoW") + + def loadAccountInfo(self, user, req): + src = req.load("http://share-rapid.com/mujucet/", cookies=True) + if "Kredit:" in src: + start = src.index('Kredit:') + src = src[start+16:] + start = src.index('GB') + kredit = src[0:start-1] + ret = float(kredit)*1024*1024 + tmp = {"premium": True, "trafficleft": ret, "validuntil": -1} + else: + tmp = {"premium": False, "trafficleft": None, "validuntil": None} + return tmp + + def login(self, user, data, req): + htm = req.load("http://share-rapid.com/prihlaseni/", cookies=True) + if "Heslo:" in htm: + start = htm.index('id="inp_hash" name="hash" value="') + htm = htm[start+33:] + hashes = htm[0:32] + html = req.load("http://share-rapid.com/prihlaseni/", + post={"hash": hashes,"login": user, "pass1": data["password"],"remember": 0, + "sbmt": "P%C5%99ihl%C3%A1sit"}, cookies=True) + if "Heslo:" in html: + self.wrongPassword() \ No newline at end of file diff --git a/module/plugins/hoster/CzshareCom.py b/module/plugins/hoster/CzshareCom.py index f6cbb200a..140aa9569 100644 --- a/module/plugins/hoster/CzshareCom.py +++ b/module/plugins/hoster/CzshareCom.py @@ -63,7 +63,7 @@ class CzshareCom(Hoster): __name__ = "CzshareCom" __type__ = "hoster" __pattern__ = r"http://(\w*\.)*czshare\.(com|cz)/(\d+/|download.php\?).*" - __version__ = "0.8" + __version__ = "0.8a" __description__ = """CZshare.com""" __author_name__ = ("zoidberg") @@ -85,12 +85,7 @@ class CzshareCom(Hoster): def process(self, pyfile): self.getFileInfo(pyfile) - if self.premium and self.account is not None: - for i in range(2): - if self.handlePremium(pyfile): break - else: - self.resetAccount() - else: + if not self.account or not self.handlePremium(pyfile): self.handleFree(pyfile) self.checkDownloadedFile() @@ -120,13 +115,18 @@ class CzshareCom(Hoster): size = float(found.group(1).replace(',','.').replace(' ','')) pyfile.size = size * 1024 ** {'KiB': 1, 'MiB': 2, 'GiB': 3}[found.group(2)] + pyfile.url = url + def handlePremium(self, pyfile): - # check user credit + # check if user logged in found = re.search(self.USER_CREDIT_PATTERN, self.html) - if found is None: + if not found: self.account.relogin(self.user) - return False + self.html = self.load(pyfile.url, cookies=True, decode=True) + found = re.search(self.USER_CREDIT_PATTERN, self.html) + if not found: return False + # check user credit try: credit = float(found.group(1).replace(',','.').replace(' ','')) credit = credit * 1024 ** {'KB': 0, 'MB': 1, 'GB': 2}[found.group(2)] diff --git a/module/plugins/hoster/DataportCz.py b/module/plugins/hoster/DataportCz.py index ea1ed1282..896c4b47a 100644 --- a/module/plugins/hoster/DataportCz.py +++ b/module/plugins/hoster/DataportCz.py @@ -24,6 +24,7 @@ def getInfo(urls): result = [] for url in urls: + html = getURL(url, decode=True) if re.search(DataportCz.FILE_OFFLINE_PATTERN, html): # File offline @@ -36,12 +37,11 @@ def getInfo(urls): result.append((name, 0, 2, url)) yield result - class DataportCz(Hoster): __name__ = "DataportCz" __type__ = "hoster" __pattern__ = r"http://.*dataport.cz/file/.*" - __version__ = "0.3" + __version__ = "0.3a" __description__ = """dataport.cz""" __author_name__ = ("zoidberg") @@ -54,6 +54,7 @@ class DataportCz(Hoster): self.multiDL = False def process(self, pyfile): + self.html = self.load(pyfile.url, decode=True) if re.search(self.FILE_OFFLINE_PATTERN, self.html): @@ -62,7 +63,7 @@ class DataportCz(Hoster): if re.search(self.NO_SLOTS_PATTERN, self.html): self.setWait(900, True) self.wait() - self.retry() + self.retry(12, 0, "No free slots") found = re.search(self.FILE_NAME_PATTERN, self.html) if found is None: @@ -74,4 +75,4 @@ class DataportCz(Hoster): self.fail("Parse error (URL)") download_url = found.group(1) - self.download(download_url) + self.download(download_url) \ No newline at end of file diff --git a/module/plugins/hoster/EuroshareEu.py b/module/plugins/hoster/EuroshareEu.py index 1cb58bc3f..a0bfe0ab2 100644 --- a/module/plugins/hoster/EuroshareEu.py +++ b/module/plugins/hoster/EuroshareEu.py @@ -24,6 +24,7 @@ def getInfo(urls): result = [] for url in urls: + html = getURL(url, decode=True) if re.search(EuroshareEu.FILE_OFFLINE_PATTERN, html): # File offline @@ -32,17 +33,16 @@ def getInfo(urls): result.append((url, 0, 2, url)) yield result - class EuroshareEu(Hoster): __name__ = "EuroshareEu" __type__ = "hoster" __pattern__ = r"http://(\w*\.)?euroshare.eu/file/.*" - __version__ = "0.2" + __version__ = "0.2b" __description__ = """Euroshare.eu""" __author_name__ = ("zoidberg") URL_PATTERN = r'' - FILE_OFFLINE_PATTERN = r'

S�bor sa nena.iel

' + FILE_OFFLINE_PATTERN = r'

S.bor sa nena.iel

' ERR_PARDL_PATTERN = r'

Prebieha s.ahovanie

' def setup(self): @@ -67,5 +67,4 @@ class EuroshareEu(Hoster): def waitForFreeSlot(self): self.setWait(300, True) self.wait() - self.retry() - \ No newline at end of file + self.retry() \ No newline at end of file diff --git a/module/plugins/hoster/FreevideoCz.py b/module/plugins/hoster/FreevideoCz.py index 20ff674aa..dfa0eb01e 100644 --- a/module/plugins/hoster/FreevideoCz.py +++ b/module/plugins/hoster/FreevideoCz.py @@ -42,7 +42,7 @@ class FreevideoCz(Hoster): __author_name__ = ("zoidberg") URL_PATTERN = r'clip: {\s*url: "([^"]+)"' - FILE_OFFLINE_PATTERN = r'

Stránka nebyla nalezena

' + FILE_OFFLINE_PATTERN = r'

Str.nka nebyla nalezena

' def setup(self): self.multiDL = True diff --git a/module/plugins/hoster/IfolderRu.py b/module/plugins/hoster/IfolderRu.py new file mode 100644 index 000000000..8675dbdc4 --- /dev/null +++ b/module/plugins/hoster/IfolderRu.py @@ -0,0 +1,113 @@ +# -*- 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 . + + @author: zoidberg +""" + +import re +from urllib import quote +from module.plugins.Hoster import Hoster +from module.network.RequestFactory import getURL + +def getInfo(urls): + result = [] + + for url in urls: + + html = getURL(url, decode=True) + if re.search(IfolderRu.FILE_OFFLINE_PATTERN, html): + # File offline + result.append((url, 0, 1, url)) + else: + # Get file info + found = re.search(IfolderRu.FILE_INFO_PATTERN, html) + if found is not None: + name = found.group(1) + size = float(found.group(2)) * 1024 ** {u'Кб': 1, u'Мб': 2, u'Гб': 3}[found.group(3)] + result.append((name, size, 2, url)) + yield result + +class IfolderRu(Hoster): + __name__ = "IfolderRu" + __type__ = "hoster" + __pattern__ = r"http://(?:\w*\.)?ifolder.ru/(\d+)/?" + __version__ = "0.2" + __description__ = """ifolder.ru""" + __author_name__ = ("zoidberg") + __author_mail__ = ("zoidberg@mujmail.cz") + + + FILE_INFO_PATTERN = ur'
Название: ([^<]+)
\s*
Размер: ([0-9.]+) ([^<]+)
' + SESSION_ID_PATTERN = r']+)>' + FORM1_PATTERN = r'
(.*?)
' + FORM_INPUT_PATTERN = r']* name="?([^" ]+)"? value="?([^" ]+)"?[^>]*>' + INTS_SESSION_PATTERN = r'\(\'ints_session\'\);\s*if\(tag\)\{tag.value = "([^"]+)";\}' + HIDDEN_INPUT_PATTERN = r"var s= 'hh([^']*)';" + DOWNLOAD_LINK_PATTERN = r'
неверный код,
введите еще раз
' + FILE_OFFLINE_PATTERN = ur'

Файл номер [^<]* не найден !!!

' + + def setup(self): + self.resumeDownload = self.multiDL = True if self.account else False + self.chunkLimit = 1 + + def process(self, pyfile): + self.html = self.load(pyfile.url, cookies=True, decode=True) + if re.search(self.FILE_OFFLINE_PATTERN, self.html): self.offline() + + found = re.search(self.FILE_INFO_PATTERN, self.html) + pyfile.name = found.group(1) + pyfile.size = float(found.group(2)) * 1024 ** {u'Кб': 1, u'Мб': 2, u'Гб': 3}[found.group(3)] + file_id = re.search(self.__pattern__, pyfile.url).group(1) + + url = "http://ints.ifolder.ru/ints/?ifolder.ru/%s?ints_code=" % file_id + self.html = self.load(url, cookies=True, decode=True) + + url, session_id = re.search(self.SESSION_ID_PATTERN, self.html).groups() + self.html = self.load(url, cookies=True, decode=True) + + url = "http://ints.ifolder.ru/ints/frame/?session=%s" % session_id + self.html = self.load(url, cookies=True) + + self.setWait(31, False) + self.wait() + + captcha_url = "http://ints.ifolder.ru/random/images/?session=%s" % session_id + for i in range(5): + self.html = self.load(url, cookies=True) + + inputs = {} + form = re.search(self.FORM1_PATTERN, self.html, re.DOTALL).group(1) + inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form)) + inputs['ints_session'] = re.search(self.INTS_SESSION_PATTERN, form).group(1) + inputs['Submit1'] = u"Подтвердить".encode("utf-8") + inputs[re.search(self.HIDDEN_INPUT_PATTERN, form).group(1)] = '1' + inputs['confirmed_number'] = self.decryptCaptcha(captcha_url, cookies = True) + self.logDebug(inputs) + + self.html = self.load(url, decode = True, cookies = True, post = inputs) + if self.WRONG_CAPTCHA_PATTERN in self.html: + self.invalidCaptcha() + else: + break; + else: + self.fail("Invalid captcha") + + self.html = self.load("http://ifolder.ru/%s?ints_code=%s" % (file_id, session_id), decode=True, cookies = True) + + download_url = re.search(self.DOWNLOAD_LINK_PATTERN, self.html).group(1) + self.correctCaptcha() + self.logDebug("Download URL: %s" % download_url) + self.download(download_url) \ No newline at end of file diff --git a/module/plugins/hoster/QuickshareCz.py b/module/plugins/hoster/QuickshareCz.py index fe8d6febe..acfafaa53 100644 --- a/module/plugins/hoster/QuickshareCz.py +++ b/module/plugins/hoster/QuickshareCz.py @@ -67,7 +67,7 @@ class QuickshareCz(Hoster): self.multiDL = False def process(self, pyfile): - self.html = self.load(pyfile.url) + self.html = self.load(pyfile.url, decode=True) # marks the file as "offline" when the pattern was found on the html-page if re.search(self.FILE_OFFLINE_PATTERN, self.html) is not None: @@ -77,7 +77,8 @@ class QuickshareCz(Hoster): parsed_vars = re.search(self.VAR_PATTERN, self.html) if parsed_vars is None: self.fail("Parser error") - # unreachable: pyfile.name = unicode(parsed_vars.group('ID3'), 'utf-8') + + pyfile.name = parsed_vars.group('ID3') # download the file, destination is determined by pyLoad download_url = parsed_vars.group('Server') + "/download.php" diff --git a/module/plugins/hoster/ShareRapidCom.py b/module/plugins/hoster/ShareRapidCom.py new file mode 100644 index 000000000..e7979d0a8 --- /dev/null +++ b/module/plugins/hoster/ShareRapidCom.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import re +from module.plugins.Hoster import Hoster + +class ShareRapidCom(Hoster): + __name__ = "ShareRapidCom" + __type__ = "hoster" + __pattern__ = r"http://(?:www.)?(share-rapid)?(.com|.cz)/" + __version__ = "0.1" + __description__ = """share-rapid Plugin""" + __author_name__ = ("MikyWoW") + __author_mail__ = ("MikyWoW@seznam.cz") + + def setup(self): + self.chunkLimit = 1 + self.resumeDownload = True + + def process(self, pyfile): + name = pyfile.url + if "?" in pyfile.url: + name = re.findall("([^?=]+)", name)[-3] + + pyfile.name = re.findall("([^/=]+)", name)[-1] + + self.html = self.load(pyfile.url) + + if "Stahovn je pstupn pouze pihlenm uivatelm" in self.html: + self.fail("Nepihlen") + else: + start = self.html.index('
Stránku nebylo možné nalézt \(404\)' + FILE_OFFLINE_PATTERN = r'

Str.nku nebylo mo.n. nal.zt \(404\)

' FILE_NAME_PATTERN = r'' CDN_PATTERN = r'\d+)(?:&cdnLQ=(?P\d*))?(?:&cdnHQ=(?P\d*))?(?:&cdnHD=(?P\d*))?&' -- cgit v1.2.3