summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--module/plugins/accounts/EasybytezCom.py68
-rw-r--r--module/plugins/hoster/EasybytezCom.py69
-rw-r--r--module/plugins/hoster/MediafireCom.py6
3 files changed, 133 insertions, 10 deletions
diff --git a/module/plugins/accounts/EasybytezCom.py b/module/plugins/accounts/EasybytezCom.py
new file mode 100644
index 000000000..cf2b16394
--- /dev/null
+++ b/module/plugins/accounts/EasybytezCom.py
@@ -0,0 +1,68 @@
+# -*- 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 <http://www.gnu.org/licenses/>.
+
+ @author: zoidberg
+"""
+
+from module.plugins.Account import Account
+import re
+from module.utils import parseFileSize
+from time import mktime, strptime
+
+class EasybytezCom(Account):
+ __name__ = "EasybytezCom"
+ __version__ = "0.01"
+ __type__ = "account"
+ __description__ = """EasyBytez.com account plugin"""
+ __author_name__ = ("zoidberg")
+ __author_mail__ = ("zoidberg@mujmail.cz")
+
+ VALID_UNTIL_PATTERN = r'<TR><TD>Premium account expire:</TD><TD><b>([^<]+)</b>'
+ TRAFFIC_LEFT_PATTERN = r'<TR><TD>Traffic available today:</TD><TD><b>(?P<S>[^<]+)</b>'
+
+ def loadAccountInfo(self, user, req):
+ #self.relogin(user)
+ html = req.load("http://www.easybytez.com/?op=my_account", decode = True)
+
+ validuntil = -1
+ found = re.search(self.VALID_UNTIL_PATTERN, html)
+ if found:
+ premium = True
+ try:
+ self.logDebug(found.group(1))
+ validuntil = mktime(strptime(found.group(1), "%d %B %Y"))
+ except Exception, e:
+ self.logError(e)
+ else:
+ premium = False
+
+ #found = re.search(self.TRAFFIC_LEFT_PATTERN, html)
+ #trafficleft = parseFileSize(found.group('S')) / 1024 if found else 0
+ #self.premium = True if trafficleft else False
+ trafficleft = -1
+
+ return ({"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium})
+
+ def login(self, user, data, req):
+ html = req.load('http://www.easybytez.com/', post = {
+ "login": user,
+ "op": "login",
+ "password": data['password'],
+ "redirect": "http://easybytez.com/"
+ }, decode = True)
+
+ if 'Incorrect Login or Password' in html:
+ self.wrongPassword() \ No newline at end of file
diff --git a/module/plugins/hoster/EasybytezCom.py b/module/plugins/hoster/EasybytezCom.py
index 5858dd935..dac35b1d3 100644
--- a/module/plugins/hoster/EasybytezCom.py
+++ b/module/plugins/hoster/EasybytezCom.py
@@ -18,12 +18,13 @@
import re
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from random import random
class EasybytezCom(SimpleHoster):
__name__ = "EasybytezCom"
__type__ = "hoster"
__pattern__ = r"http://(?:\w*\.)?easybytez.com/(\w+).*"
- __version__ = "0.01"
+ __version__ = "0.03"
__description__ = """easybytez.com"""
__author_name__ = ("zoidberg")
__author_mail__ = ("zoidberg@mujmail.cz")
@@ -36,24 +37,78 @@ class EasybytezCom(SimpleHoster):
FORM_INPUT_PATTERN = r'<input[^>]* name="([^"]+)" value="([^"]*)">'
WAIT_PATTERN = r'<span id="countdown_str">[^>]*>(\d+)</span> seconds</span>'
+ DIRECT_LINK_PATTERN = r'(http://\w+\.easybytez\.com/files/\d+/\w+/[^"<]+)'
+ URL_FORM_PATTERN = r'<form name="url"[^>]*action="([^"]+)(.*?)</form>'
+ OVR_DOWNLOAD_LINK_PATTERN = r'<h2>Download Link</h2>\s*<textarea[^>]*>([^<]+)'
+ OVR_KILL_LINK_PATTERN = r'<h2>Delete Link</h2>\s*<textarea[^>]*>([^<]+)'
+
+ def process(self, pyfile):
+ if not re.match(self.__pattern__, self.pyfile.url):
+ if self.premium:
+ self.handleOverriden()
+ else:
+ self.fail("Only premium users can download from other hosters with EasyBytes")
+ else:
+ self.html = self.load(pyfile.url, cookies = False, decode = True)
+ self.file_info = self.getFileInfo()
+
+ header = self.load(self.pyfile.url, just_header = True, cookies = True)
+ self.logDebug(header)
+
+ if 'location' in header and re.match(self.DIRECT_LINK_PATTERN, header['location']):
+ self.downloadLink(header['location'])
+ elif self.premium:
+ self.handlePremium()
+ else:
+ self.handleFree()
+
def handleFree(self):
self.download(self.pyfile.url, post = self.getPostParameters(), ref = True, cookies = True)
+
+ def handlePremium(self):
+ self.html = self.load(self.pyfile.url, post = self.getPostParameters(premium=True))
+ found = re.search(self.DIRECT_LINK_PATTERN, self.html)
+ if not found: self.parseError('DIRECT LINK')
+ self.downloadLink(found.group(1))
+
+ def handleOverriden(self):
+ self.html = self.load('http://www.easybytez.com/')
+ action, form = re.search(self.URL_FORM_PATTERN, self.html, re.DOTALL).groups()
+ inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form))
+ action += "%d&js_on=1&utype=prem&upload_type=url" % int(random()*10**12)
+ inputs['tos'] = '1'
+ inputs['url_mass'] = self.pyfile.url
+
+ self.html = self.load(action, post = inputs)
+ found = re.search(self.OVR_DOWNLOAD_LINK_PATTERN, self.html)
+ if not found: self.parseError('DIRECT LINK (OVR)')
+ self.downloadLink(found.group(1))
- def getPostParameters(self):
+ def downloadLink(self, link):
+ self.logDebug('DIRECT LINK: %s' % link)
+ self.download(link)
+
+ def getPostParameters(self, premium=False):
inputs = dict(re.findall(self.FORM_INPUT_PATTERN, self.html))
self.logDebug(inputs)
- inputs['method_free'] = "Free Download"
inputs['referer'] = self.pyfile.url
- if 'method_premium' in inputs: del inputs['method_premium']
+
+ if premium:
+ inputs['method_premium'] = "Premium Download"
+ if 'method_free' in inputs: del inputs['method_free']
+ else:
+ inputs['method_free'] = "Free Download"
+ if 'method_premium' in inputs: del inputs['method_premium']
self.html = self.load(self.pyfile.url, post = inputs, ref = True, cookies = True)
inputs = dict(re.findall(self.FORM_INPUT_PATTERN, self.html))
self.logDebug(inputs)
- found = re.search(self.WAIT_PATTERN, self.html)
- self.setWait(int(found.group(1)) + 1 if found else 60)
- self.wait()
+ if not premium:
+ found = re.search(self.WAIT_PATTERN, self.html)
+ self.setWait(int(found.group(1)) + 1 if found else 60)
+ self.wait()
return inputs
diff --git a/module/plugins/hoster/MediafireCom.py b/module/plugins/hoster/MediafireCom.py
index 484b48ba6..14180ff3d 100644
--- a/module/plugins/hoster/MediafireCom.py
+++ b/module/plugins/hoster/MediafireCom.py
@@ -58,20 +58,20 @@ class MediafireCom(SimpleHoster):
__name__ = "MediafireCom"
__type__ = "hoster"
__pattern__ = r"http://(?:\w*\.)*mediafire\.com/[^?].*"
- __version__ = "0.70"
+ __version__ = "0.71"
__description__ = """Mediafire.com plugin - free only"""
__author_name__ = ("zoidberg")
__author_mail__ = ("zoidberg@mujmail.cz")
DOWNLOAD_LINK_PATTERN = r'<div class="download_link"[^>]*z-index:(?P<zindex>\d+)[^>]*>\s*<a href="(?P<href>[^"]+)"'
- JS_KEY_PATTERN = r"DoShow\('mfpromo1'\);\s*((\w+)='';.*?)eval\(\2\);"
+ JS_KEY_PATTERN = r"DoShow\('mfpromo1'\);[^{]*{((\w+)='';.*?)eval\(\2\);"
JS_ZMODULO_PATTERN = r"\('z-index'\)\) \% (\d+)\)\);"
RECAPTCHA_PATTERN = r'src="http://(?:api.recaptcha.net|www.google.com/recaptcha/api)/challenge\?k=([^"]+)">'
PAGE1_ACTION_PATTERN = r'<link rel="canonical" href="([^"]+)"/>'
PASSWORD_PATTERN = r";break;}\s*dh\('"
FILE_NAME_PATTERN = r'<META NAME="description" CONTENT="(?P<N>[^"]+)"/>'
- FILE_SIZE_PATTERN = r'>Download <span>\((?P<S>[0-9.]+) (?P<U>[kKMG])i?B">\)</span>'
+ FILE_SIZE_PATTERN = r'>Download\s*<span>\((?P<S>[^)]+)\)</span>'
FILE_OFFLINE_PATTERN = r'class="error_msg_title"> Invalid or Deleted File. </div>'
def process(self, pyfile):