diff options
Diffstat (limited to 'module/plugins')
| -rw-r--r-- | module/plugins/hoster/AlldebridCom.py | 21 | ||||
| -rw-r--r-- | module/plugins/hoster/BayfilesCom.py | 4 | ||||
| -rw-r--r-- | module/plugins/hoster/DebridItaliaCom.py | 16 | ||||
| -rw-r--r-- | module/plugins/hoster/FastixRu.py | 16 | ||||
| -rw-r--r-- | module/plugins/hoster/FastshareCz.py | 35 | ||||
| -rw-r--r-- | module/plugins/hoster/MultiDebridCom.py | 16 | ||||
| -rw-r--r-- | module/plugins/hoster/PutlockerCom.py | 6 | ||||
| -rw-r--r-- | module/plugins/hoster/RealdebridCom.py | 17 | ||||
| -rw-r--r-- | module/plugins/hoster/UnrestrictLi.py | 16 | ||||
| -rw-r--r-- | module/plugins/hoster/ZippyshareCom.py | 11 | ||||
| -rw-r--r-- | module/plugins/internal/SimpleHoster.py | 4 | 
11 files changed, 76 insertions, 86 deletions
| diff --git a/module/plugins/hoster/AlldebridCom.py b/module/plugins/hoster/AlldebridCom.py index cdb5ccc08..82f4531a6 100644 --- a/module/plugins/hoster/AlldebridCom.py +++ b/module/plugins/hoster/AlldebridCom.py @@ -10,7 +10,7 @@ from module.utils import parseFileSize  class AlldebridCom(Hoster):      __name__ = "AlldebridCom" -    __version__ = "0.33" +    __version__ = "0.34"      __type__ = "hoster"      __pattern__ = r"https?://.*alldebrid\..*" @@ -23,24 +23,22 @@ class AlldebridCom(Hoster):              name = unquote(url.rsplit("/", 1)[1])          except IndexError:              name = "Unknown_Filename..." -        if name.endswith("..."): #incomplete filename, append random stuff +        if name.endswith("..."):  # incomplete filename, append random stuff              name += "%s.tmp" % randrange(100, 999)          return name -    def init(self): -        self.tries = 0 -        self.chunkLimit = 3 +    def setup(self): +        self.chunkLimit = 16          self.resumeDownload = True      def process(self, pyfile): -        if not self.account: -            self.logError(_("Please enter your %s account or deactivate this plugin") % "AllDebrid") -            self.fail("No AllDebrid account provided") - -        self.logDebug("AllDebrid: Old URL: %s" % pyfile.url)          if re.match(self.__pattern__, pyfile.url):              new_url = pyfile.url +        elif not self.account: +            self.logError(_("Please enter your %s account or deactivate this plugin") % "AllDebrid") +            self.fail("No AllDebrid account provided")          else: +            self.logDebug("Old URL: %s" % pyfile.url)              password = self.getPassword().splitlines()              password = "" if not password else password[0] @@ -67,7 +65,8 @@ class AlldebridCom(Hoster):          else:              new_url = new_url.replace("https://", "http://") -        self.logDebug("AllDebrid: New URL: %s" % new_url) +        if new_url != pyfile.url: +            self.logDebug("New URL: %s" % new_url)          if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"):              #only use when name wasnt already set diff --git a/module/plugins/hoster/BayfilesCom.py b/module/plugins/hoster/BayfilesCom.py index bb1e78bb3..a696bac26 100644 --- a/module/plugins/hoster/BayfilesCom.py +++ b/module/plugins/hoster/BayfilesCom.py @@ -26,8 +26,8 @@ from module.common.json_layer import json_loads  class BayfilesCom(SimpleHoster):      __name__ = "BayfilesCom"      __type__ = "hoster" -    __pattern__ = r"http://(?:www\.)?bayfiles\.com/file/\w+/\w+/.*" -    __version__ = "0.04" +    __pattern__ = r"http://(?:www\.)?bayfiles\.(?:com|net)/file/\w+/\w+/.*" +    __version__ = "0.05"      __description__ = """Bayfiles.com plugin - free only"""      __author_name__ = ("zoidberg")      __author_mail__ = ("zoidberg@mujmail.cz") diff --git a/module/plugins/hoster/DebridItaliaCom.py b/module/plugins/hoster/DebridItaliaCom.py index 1c2f4246b..08470b984 100644 --- a/module/plugins/hoster/DebridItaliaCom.py +++ b/module/plugins/hoster/DebridItaliaCom.py @@ -22,26 +22,25 @@ from module.plugins.Hoster import Hoster  class DebridItaliaCom(Hoster):      __name__ = "DebridItaliaCom" -    __version__ = "0.04" +    __version__ = "0.05"      __type__ = "hoster"      __pattern__ = r"https?://.*debriditalia\.com"      __description__ = """Debriditalia.com hoster plugin"""      __author_name__ = ("stickell")      __author_mail__ = ("l.stickell@yahoo.it") -    def init(self): +    def setup(self):          self.chunkLimit = -1          self.resumeDownload = True      def process(self, pyfile): -        if not self.account: -            self.logError(_("Please enter your %s account or deactivate this plugin") % "DebridItalia") -            self.fail("No DebridItalia account provided") - -        self.logDebug("Old URL: %s" % pyfile.url)          if re.match(self.__pattern__, pyfile.url):              new_url = pyfile.url +        elif not self.account: +            self.logError(_("Please enter your %s account or deactivate this plugin") % "DebridItalia") +            self.fail("No DebridItalia account provided")          else: +            self.logDebug("Old URL: %s" % pyfile.url)              url = "http://debriditalia.com/linkgen2.php?xjxfun=convertiLink&xjxargs[]=S<![CDATA[%s]]>" % pyfile.url              page = self.load(url)              self.logDebug("XML data: %s" % page) @@ -51,7 +50,8 @@ class DebridItaliaCom(Hoster):              else:                  new_url = re.search(r'<a href="(?:[^"]+)">(?P<direct>[^<]+)</a>', page).group('direct') -        self.logDebug("New URL: %s" % new_url) +        if new_url != pyfile.url: +            self.logDebug("New URL: %s" % new_url)          self.download(new_url, disposition=True) diff --git a/module/plugins/hoster/FastixRu.py b/module/plugins/hoster/FastixRu.py index 4d3e7b93d..c2791c5d2 100644 --- a/module/plugins/hoster/FastixRu.py +++ b/module/plugins/hoster/FastixRu.py @@ -9,7 +9,7 @@ from module.common.json_layer import json_loads  class FastixRu(Hoster):      __name__ = "FastixRu" -    __version__ = "0.02" +    __version__ = "0.03"      __type__ = "hoster"      __pattern__ = r"http?://.*fastix.ru\..*"      __description__ = """Fastix hoster plugin""" @@ -25,19 +25,18 @@ class FastixRu(Hoster):              name += "%s.tmp" % randrange(100, 999)          return name -    def init(self): +    def setup(self):          self.chunkLimit = 3          self.resumeDownload = True      def process(self, pyfile): -        if not self.account: -            self.logError(_("Please enter your %s account or deactivate this plugin") % "Fastix") -            self.fail("No Fastix account provided") - -        self.logDebug("Old URL: %s" % pyfile.url)          if re.match(self.__pattern__, pyfile.url):              new_url = pyfile.url +        elif not self.account: +            self.logError(_("Please enter your %s account or deactivate this plugin") % "Fastix") +            self.fail("No Fastix account provided")          else: +            self.logDebug("Old URL: %s" % pyfile.url)              api_key = self.account.getAccountData(self.user)              api_key = api_key["api"]              url = "http://fastix.ru/api_v2/?apikey=%s&sub=getdirectlink&link=%s" % (api_key, pyfile.url) @@ -49,7 +48,8 @@ class FastixRu(Hoster):              else:                  new_url = data["downloadlink"] -        self.logDebug("New URL: %s" % new_url) +        if new_url != pyfile.url: +            self.logDebug("New URL: %s" % new_url)          if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"):              #only use when name wasnt already set diff --git a/module/plugins/hoster/FastshareCz.py b/module/plugins/hoster/FastshareCz.py index 844b8cd59..1597d21e5 100644 --- a/module/plugins/hoster/FastshareCz.py +++ b/module/plugins/hoster/FastshareCz.py @@ -20,58 +20,47 @@  # http://www.fastshare.cz/2141189/random.bin  import re -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, replace_patterns +from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo  class FastshareCz(SimpleHoster):      __name__ = "FastshareCz"      __type__ = "hoster"      __pattern__ = r"http://(?:\w*\.)?fastshare.cz/\d+/.+" -    __version__ = "0.17" +    __version__ = "0.19"      __description__ = """FastShare.cz"""      __author_name__ = ("zoidberg", "stickell")      FILE_INFO_PATTERN = r'<h1 class="dwp">(?P<N>[^<]+)</h1>\s*<div class="fileinfo">\s*(?:Velikost|Size)\s*: (?P<S>[^,]+),'      FILE_OFFLINE_PATTERN = ur'<td align=center>Tento soubor byl smazán'      FILE_URL_REPLACEMENTS = [('#.*', '')] +    SH_COOKIES = [('fastshare.cz', 'lang', 'en')]      FREE_URL_PATTERN = r'action=(/free/.*?)>\s*<img src="([^"]*)"><br'      PREMIUM_URL_PATTERN = r'(http://data\d+\.fastshare\.cz/download\.php\?id=\d+\&[^\s\"\'<>]+)'      NOT_ENOUGH_CREDIC_PATTERN = "Nem.te dostate.n. kredit pro sta.en. tohoto souboru" -    def process(self, pyfile): -        pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS) -        self.req.setOption("timeout", 120) -        if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()): -            self.handlePremium() -        else: -            self.html = self.load(pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES) -            self.getFileInfo() -            self.handleFree() -      def handleFree(self): -        if u">100% FREE slotů je plných.<" in self.html: -            self.setWait(60, False) -            self.wait() -            self.retry(120, "No free slots") +        if '100% of FREE slots are full' in self.html: +            self.retry(120, 60, "No free slots")          found = re.search(self.FREE_URL_PATTERN, self.html)          if not found:              self.parseError("Free URL")          action, captcha_src = found.groups() -        captcha = self.decryptCaptcha("http://www.fastshare.cz/" + captcha_src) -        self.download("http://www.fastshare.cz/" + action, post={"code": captcha, "submit": u"stáhnout"}) +        captcha = self.decryptCaptcha("http://www.fastshare.cz" + captcha_src) +        self.download("http://www.fastshare.cz" + action, post={"code": captcha, "btn.x": 77, "btn.y": 18})          check = self.checkDownload({              "paralell_dl": -            "<title>FastShare.cz</title>|<script>alert\('Pres FREE muzete stahovat jen jeden soubor najednou.'\)" +            "<title>FastShare.cz</title>|<script>alert\('Pres FREE muzete stahovat jen jeden soubor najednou.'\)", +            "wrong_captcha": "Download for FREE"          }) -        self.logDebug(self.req.lastEffectiveURL, self.req.lastURL, self.req.code)          if check == "paralell_dl": -            self.setWait(600, True) -            self.wait() -            self.retry(6, "Paralell download") +            self.retry(6, 600, "Paralell download") +        elif check == "wrong_captcha": +            self.retry(5, 1, "Wrong captcha")      def handlePremium(self):          header = self.load(self.pyfile.url, just_header=True) diff --git a/module/plugins/hoster/MultiDebridCom.py b/module/plugins/hoster/MultiDebridCom.py index 7280504cb..83f477f34 100644 --- a/module/plugins/hoster/MultiDebridCom.py +++ b/module/plugins/hoster/MultiDebridCom.py @@ -23,26 +23,25 @@ from module.common.json_layer import json_loads  class MultiDebridCom(Hoster):      __name__ = "MultiDebridCom" -    __version__ = "0.02" +    __version__ = "0.03"      __type__ = "hoster"      __pattern__ = r"http://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/dl/"      __description__ = """Multi-debrid.com hoster plugin"""      __author_name__ = ("stickell")      __author_mail__ = ("l.stickell@yahoo.it") -    def init(self): +    def setup(self):          self.chunkLimit = -1          self.resumeDownload = True      def process(self, pyfile): -        if not self.account: -            self.logError(_("Please enter your %s account or deactivate this plugin") % "Multi-debrid.com") -            self.fail("No Multi-debrid.com account provided") - -        self.logDebug("Original URL: %s" % pyfile.url)          if re.match(self.__pattern__, pyfile.url):              new_url = pyfile.url +        elif not self.account: +            self.logError(_("Please enter your %s account or deactivate this plugin") % "Multi-debrid.com") +            self.fail("No Multi-debrid.com account provided")          else: +            self.logDebug("Original URL: %s" % pyfile.url)              page = self.req.load('http://multi-debrid.com/api.php',                                   get={'user': self.user, 'pass': self.account.getAccountData(self.user)['password'],                                        'link': pyfile.url}) @@ -52,6 +51,7 @@ class MultiDebridCom(Hoster):                  self.fail('Unable to unrestrict link')              new_url = page['link'] -        self.logDebug("Unrestricted URL: " + new_url) +        if new_url != pyfile.url: +            self.logDebug("Unrestricted URL: " + new_url)          self.download(new_url, disposition=True) diff --git a/module/plugins/hoster/PutlockerCom.py b/module/plugins/hoster/PutlockerCom.py index 02205f9cc..8d1305820 100644 --- a/module/plugins/hoster/PutlockerCom.py +++ b/module/plugins/hoster/PutlockerCom.py @@ -17,8 +17,6 @@      @author: jeix  """ -# http://www.putlocker.com/file/83C174C844583CF7 -  import re  from module.plugins.internal.SimpleHoster import SimpleHoster @@ -28,7 +26,7 @@ class PutlockerCom(SimpleHoster):      __name__ = "PutlockerCom"      __type__ = "hoster"      __pattern__ = r'http://(www\.)?putlocker\.com/(file|embed)/[A-Z0-9]+' -    __version__ = "0.27" +    __version__ = "0.28"      __description__ = """Putlocker.Com"""      __author_name__ = ("jeix", "stickell")      __author_mail__ = ("l.stickell@yahoo.it") @@ -46,7 +44,7 @@ class PutlockerCom(SimpleHoster):          link = self._getLink()          if not link.startswith('http://'):              link = "http://www.putlocker.com" + link -        self.download(link, disposition=True) +        self.download(link)      def _getLink(self):          hash_data = re.search(r'<input type="hidden" value="([a-z0-9]+)" name="hash">', self.html) diff --git a/module/plugins/hoster/RealdebridCom.py b/module/plugins/hoster/RealdebridCom.py index fd91b89b7..59997ee7c 100644 --- a/module/plugins/hoster/RealdebridCom.py +++ b/module/plugins/hoster/RealdebridCom.py @@ -13,7 +13,7 @@ from module.plugins.Hoster import Hoster  class RealdebridCom(Hoster):      __name__ = "RealdebridCom" -    __version__ = "0.51" +    __version__ = "0.52"      __type__ = "hoster"      __pattern__ = r"https?://.*real-debrid\..*" @@ -30,20 +30,18 @@ class RealdebridCom(Hoster):              name += "%s.tmp" % randrange(100, 999)          return name -    def init(self): -        self.tries = 0 +    def setup(self):          self.chunkLimit = 3          self.resumeDownload = True      def process(self, pyfile): -        if not self.account: -            self.logError(_("Please enter your %s account or deactivate this plugin") % "Real-debrid") -            self.fail("No Real-debrid account provided") - -        self.logDebug("Real-Debrid: Old URL: %s" % pyfile.url)          if re.match(self.__pattern__, pyfile.url):              new_url = pyfile.url +        elif not self.account: +            self.logError(_("Please enter your %s account or deactivate this plugin") % "Real-debrid") +            self.fail("No Real-debrid account provided")          else: +            self.logDebug("Old URL: %s" % pyfile.url)              password = self.getPassword().splitlines()              if not password:                  password = "" @@ -74,7 +72,8 @@ class RealdebridCom(Hoster):          else:              new_url = new_url.replace("https://", "http://") -        self.logDebug("Real-Debrid: New URL: %s" % new_url) +        if new_url != pyfile.url: +            self.logDebug("New URL: %s" % new_url)          if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown") or pyfile.name.endswith('..'):              #only use when name wasnt already set diff --git a/module/plugins/hoster/UnrestrictLi.py b/module/plugins/hoster/UnrestrictLi.py index bdafca63d..a3fe5ff5d 100644 --- a/module/plugins/hoster/UnrestrictLi.py +++ b/module/plugins/hoster/UnrestrictLi.py @@ -35,26 +35,25 @@ def secondsToMidnight():  class UnrestrictLi(Hoster):      __name__ = "UnrestrictLi" -    __version__ = "0.10" +    __version__ = "0.11"      __type__ = "hoster"      __pattern__ = r"https?://.*(unrestrict|unr)\.li"      __description__ = """Unrestrict.li hoster plugin"""      __author_name__ = ("stickell")      __author_mail__ = ("l.stickell@yahoo.it") -    def init(self): +    def setup(self):          self.chunkLimit = 16          self.resumeDownload = True      def process(self, pyfile): -        if not self.account: -            self.logError(_("Please enter your %s account or deactivate this plugin") % "Unrestrict.li") -            self.fail("No Unrestrict.li account provided") - -        self.logDebug("Old URL: %s" % pyfile.url)          if re.match(self.__pattern__, pyfile.url):              new_url = pyfile.url +        elif not self.account: +            self.logError(_("Please enter your %s account or deactivate this plugin") % "Unrestrict.li") +            self.fail("No Unrestrict.li account provided")          else: +            self.logDebug("Old URL: %s" % pyfile.url)              for i in xrange(5):                  page = self.req.load('https://unrestrict.li/unrestrict.php',                                       post={'link': pyfile.url, 'domain': 'long'}) @@ -83,7 +82,8 @@ class UnrestrictLi(Hoster):              new_url = page.keys()[0]              self.api_data = page[new_url] -        self.logDebug("New URL: " + new_url) +        if new_url != pyfile.url: +            self.logDebug("New URL: " + new_url)          if hasattr(self, 'api_data'):              self.setNameSize() diff --git a/module/plugins/hoster/ZippyshareCom.py b/module/plugins/hoster/ZippyshareCom.py index a3b1cf783..c98679a22 100644 --- a/module/plugins/hoster/ZippyshareCom.py +++ b/module/plugins/hoster/ZippyshareCom.py @@ -1,6 +1,9 @@  #!/usr/bin/env python  # -*- coding: utf-8 -*- +# Test links (random.bin): +# http://www29.zippyshare.com/v/55578602/file.html +  import re  import subprocess  import tempfile @@ -26,6 +29,8 @@ class ZippyshareCom(SimpleHoster):      FILE_INFO_PATTERN = r'document\.getElementById\(\'dlbutton\'\)\.href = "[^;]*/(?P<N>[^"]+)";'      FILE_OFFLINE_PATTERN = r'>File does not exist on this server</div>' +    SH_COOKIES = [('zippyshare.com', 'ziplocale', 'en')] +      DOWNLOAD_URL_PATTERN = r"<script type=\"text/javascript\">([^<]*?)(document\.getElementById\('dlbutton'\).href = [^;]+;)"      SEED_PATTERN = r'swfobject.embedSWF\("([^"]+)".*?seed: (\d+)'      CAPTCHA_KEY_PATTERN = r'Recaptcha.create\("([^"]+)"' @@ -35,16 +40,14 @@ class ZippyshareCom(SimpleHoster):      LAST_KNOWN_VALUES = (9, 2374755)  # time = (seed * multiply) % modulo      def setup(self): -        self.html = None -        self.wantReconnect = False          self.multiDL = True      def handleFree(self):          url = self.get_file_url()          if not url:              self.fail("Download URL not found.") -        self.logDebug("Download URL %s" % url) -        self.download(url, cookies=True) +        self.logDebug("Download URL: %s" % url) +        self.download(url)          check = self.checkDownload({              "swf_values": re.compile(self.SEED_PATTERN) diff --git a/module/plugins/internal/SimpleHoster.py b/module/plugins/internal/SimpleHoster.py index 640d129b8..56e9a6a3f 100644 --- a/module/plugins/internal/SimpleHoster.py +++ b/module/plugins/internal/SimpleHoster.py @@ -146,7 +146,7 @@ class PluginParseError(Exception):  class SimpleHoster(Hoster):      __name__ = "SimpleHoster" -    __version__ = "0.29" +    __version__ = "0.30"      __pattern__ = None      __type__ = "hoster"      __description__ = """Base hoster plugin""" @@ -187,6 +187,8 @@ class SimpleHoster(Hoster):          if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()):              self.handlePremium()          else: +            # This line is required due to the getURL workaround. Can be removed in 0.5 +            self.html = self.load(pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES)              self.handleFree()      def load(self, url, get={}, post={}, ref=True, cookies=True, just_header=False, decode=False): | 
