diff options
| author | 2012-03-24 16:56:35 +0100 | |
|---|---|---|
| committer | 2012-03-24 16:56:35 +0100 | |
| commit | 08034f0e592d915297665175062ce3e849e48dbf (patch) | |
| tree | d9dbe3956b5f9b870f22fafc975d6da54a82be29 /module/plugins/hoster | |
| parent | netload fix (diff) | |
| download | pyload-08034f0e592d915297665175062ce3e849e48dbf.tar.xz | |
icyfiles, bayfiles by godofdream, alldebrid json api, zevera python 2.5 compat.
Diffstat (limited to 'module/plugins/hoster')
| -rw-r--r-- | module/plugins/hoster/AlldebridCom.py | 50 | ||||
| -rw-r--r-- | module/plugins/hoster/BayfilesCom.py | 13 | ||||
| -rw-r--r-- | module/plugins/hoster/FiledinoCom.py | 15 | ||||
| -rw-r--r-- | module/plugins/hoster/FilerioCom.py | 20 | ||||
| -rw-r--r-- | module/plugins/hoster/IcyFilesCom.py | 115 | 
5 files changed, 193 insertions, 20 deletions
| diff --git a/module/plugins/hoster/AlldebridCom.py b/module/plugins/hoster/AlldebridCom.py index 56e3a9040..e93e7beb9 100644 --- a/module/plugins/hoster/AlldebridCom.py +++ b/module/plugins/hoster/AlldebridCom.py @@ -1,15 +1,19 @@  #!/usr/nv python
  # -*- coding: utf-8 -*-
 -import BeautifulSoup
 +import re
  from urllib import quote, unquote
  from random import randrange
 +from os import stat
  from module.plugins.Hoster import Hoster
 +from module.common.json_layer import json_loads
 +from module.utils import parseFileSize, fs_encode
 +
  class AlldebridCom(Hoster):
      __name__ = "AlldebridCom"
 -    __version__ = "0.1"
 +    __version__ = "0.2"
      __type__ = "hoster"
      __pattern__ = r"https?://.*alldebrid\..*"
 @@ -33,14 +37,35 @@ class AlldebridCom(Hoster):      def process(self, pyfile):                            
 -        url="http://www.alldebrid.com/service.php?link=%s" %(pyfile.url)
 -        
 -        page = self.load(url)
 -
 -        soup = BeautifulSoup.BeautifulSoup(page)
 -        for link in soup.findAll("a"):
 -			new_url = link.get("href")
 +        if not self.account:
 +            self.logError(_("Please enter your AllDebrid account or deactivate this plugin"))
 +            self.fail("No AllDebrid account provided")
 +        self.log.debug("AllDebrid: Old URL: %s" % pyfile.url)
 +        if re.match(self.__pattern__, pyfile.url):
 +            new_url = pyfile.url
 +        else:
 +            password = self.getPassword().splitlines()
 +            if not password: password = ""
 +            else: password = password[0]
 +
 +            url = "http://www.alldebrid.com/service.php?link=%s&json=true&pw=%s" %(pyfile.url, password)
 +            page = self.load(url)
 +            data = json_loads(page)
 +            
 +            self.log.debug("Json data: %s" % str(data))
 +
 +            if data["error"]:
 +                if data["error"] == "This link isn't available on the hoster website.":
 +                   self.offline()
 +                else:
 +                    self.logWarning(data["error"])
 +                    self.tempOffline()
 +            else:
 +                if self.pyfile.name and not self.pyfile.name.endswith('.tmp'):
 +                    self.pyfile.name = data["filename"]
 +                self.pyfile.size = parseFileSize(data["filesize"])
 +                new_url = data["link"]
          if self.getConfig("https"):
              new_url = new_url.replace("http://", "https://")
 @@ -49,7 +74,6 @@ class AlldebridCom(Hoster):          self.log.debug("AllDebrid: New URL: %s" % new_url)
 -
          if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"):
              #only use when name wasnt already set
              pyfile.name = self.getFilename(new_url)
 @@ -57,9 +81,11 @@ class AlldebridCom(Hoster):          self.download(new_url, disposition=True)
          check = self.checkDownload(
 -                {"error": "<title>An error occured while processing your request</title>"})
 +                {"error": "<title>An error occured while processing your request</title>","empty": re.compile(r"^$")})
          if check == "error":
 -            #usual this download can safely be retried
              self.retry(reason="An error occured while generating link.", wait_time=60)
 +        else:
 +            if check == "empty":
 +                self.retry(reason="Downloaded File was empty.", wait_time=60)
 diff --git a/module/plugins/hoster/BayfilesCom.py b/module/plugins/hoster/BayfilesCom.py index e2c74e5c0..a69dd3ea9 100644 --- a/module/plugins/hoster/BayfilesCom.py +++ b/module/plugins/hoster/BayfilesCom.py @@ -79,6 +79,15 @@ class BayfilesCom(SimpleHoster):      def startDownload(self, url):          self.logDebug("%s URL: %s" % ("Premium" if self.premium else "Free", url)) -        self.download(url)         +        self.download(url) +        # check download +        check = self.checkDownload({ +            "waitforfreeslots": re.compile(r"^<title>BayFiles</title>$") +            }) +        if check == "waitforfreeslots": +            self.waitForFreeSlot() + +    def waitForFreeSlot(self): +        self.retry(60, 300, "Wait for free slot") -getInfo = create_getInfo(BayfilesCom)
\ No newline at end of file +getInfo = create_getInfo(BayfilesCom) diff --git a/module/plugins/hoster/FiledinoCom.py b/module/plugins/hoster/FiledinoCom.py index 7d1a82df4..6bdd01b51 100644 --- a/module/plugins/hoster/FiledinoCom.py +++ b/module/plugins/hoster/FiledinoCom.py @@ -1,18 +1,21 @@  # -*- coding: utf-8 -*-  from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo +import re  class FiledinoCom(XFileSharingPro):      __name__ = "FiledinoCom"      __type__ = "hoster" -    __pattern__ = r"http://(?:\w*\.)*filedino.com/\w{12}" -    __version__ = "0.01" -    __description__ = """FileDino.com hoster plugin""" +    __pattern__ = r"http://(?:\w*\.)*(file(dino|fat).com)/\w{12}" +    __version__ = "0.02" +    __description__ = """FileDino / FileFat hoster plugin"""      __author_name__ = ("zoidberg")      __author_mail__ = ("zoidberg@mujmail.cz") -    FILE_SIZE_PATTERN = r'File Size : </span><span class="runninggreysmall">(?P<S>.+?)</span>' +    FILE_SIZE_PATTERN = r'File Size : </(span|font)><(span|font)[^>]*>(?P<S>.+?)</(span|font)>' +    DIRECT_LINK_PATTERN = r'http://www\.file(dino|fat)\.com/cgi-bin/dl\.cgi/' -    HOSTER_NAME = "filedino.com" -    DIRECT_LINK_PATTERN = r'http://www\.filedino\.com/cgi-bin/dl\.cgi/' +    def setup(self): +        self.HOSTER_NAME = re.search(self.__pattern__, self.pyfile.url).group(1) +        self.multiDL = False   getInfo = create_getInfo(FiledinoCom)
\ No newline at end of file diff --git a/module/plugins/hoster/FilerioCom.py b/module/plugins/hoster/FilerioCom.py new file mode 100644 index 000000000..3d983bedf --- /dev/null +++ b/module/plugins/hoster/FilerioCom.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + +class FilerioCom(XFileSharingPro): +    __name__ = "FilerioCom" +    __type__ = "hoster" +    __pattern__ = r"http://(?:\w*\.)*file(rio|keen).com/\w{12}" +    __version__ = "0.01" +    __description__ = """FileRio.com hoster plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +        +    FILE_OFFLINE_PATTERN = '<b>"File Not Found"</b>|File has been removed due to Copyright Claim' +    HOSTER_NAME = "filerio.com" +    DIRECT_LINK_PATTERN = r'Download Link:.*?<a href="(.*?)"' +     +    def setup(self): +        self.multiDL = False  + +getInfo = create_getInfo(FilerioCom)
\ No newline at end of file diff --git a/module/plugins/hoster/IcyFilesCom.py b/module/plugins/hoster/IcyFilesCom.py new file mode 100644 index 000000000..cda5d23b6 --- /dev/null +++ b/module/plugins/hoster/IcyFilesCom.py @@ -0,0 +1,115 @@ +# -*- 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: godofdream +""" + +import re +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(IcyFilesCom.FILE_OFFLINE_PATTERN, html): +            # File offline +            result.append((url, 0, 1, url)) +        else: +            # Get file info +            name = re.search(IcyFilesCom.FILE_NAME_PATTERN, html) +            size = re.search(IcyFilesCom.SIZE_PATTERN, html) +            if name is not None: +                name = name.group(1) +                size = size.group(1) +                result.append((name, size, 2, url)) +    yield result +         +         +class IcyFilesCom(Hoster): +    __name__ = "IcyFilesCom" +    __type__ = "hoster" +    __pattern__ = r"http://(?:www\.)?icyfiles\.com/.*" +    __version__ = "0.01" +    __description__ = """IcyFiles.com plugin - free only""" +    __author_name__ = ("godofdream") +    __author_mail__ = ("soilfiction@gmail.com") + +    FILE_NAME_PATTERN = r'<div id="file">(.*?)</div>' +    SIZE_PATTERN = r'<li>(\d+) <span>Size/mb' +    FILE_OFFLINE_PATTERN = r'The requested File cant be found' +    WAIT_LONGER_PATTERN = r'All download tickets are in use\. please try it again in a few seconds' +    WAIT_PATTERN = r'<div class="counter">(d+)</div>' +    TOOMUCH_PATTERN = r'Sorry dude, you have downloaded too much\. Please wait (\\d+) seconds' +    URL_PATTERN = r'http://.*?icyfiles\.com/(.*)' + +    def setup(self): +        self.multiDL = False +         +    def process(self, pyfile): +        self.html = self.load(pyfile.url, decode=True) +        # check if offline +        if re.search(self.FILE_OFFLINE_PATTERN, self.html): +            self.offline() +        # All Downloadtickets in use +        timmy = re.search(self.WAIT_LONGER_PATTERN, self.html) +        if timmy: +            self.waitForFreeSlot() +        # Wait the waittime +        timmy = re.search(self.WAIT_PATTERN, self.html) +        if timmy: +            self.waitSeconds(timmy.group(1)) +        # Downloaded to much +        timmy = re.search(self.TOOMUCH_PATTERN, self.html) +        if timmy: +            self.waitSeconds(timmy.group(1)) +        # Find Name +        found = re.search(self.FILE_NAME_PATTERN, self.html) +        if found is None: +            self.fail("Parse error (NAME)") +        pyfile.name = found.group(1) +        # Get the URL +        url = pyfile.url +        found = re.search(self.URL_PATTERN, url) +        if found is None: +            self.fail("Parse error (URL)") +        download_url = "http://icyfiles.com/download.php?key=" + found.group(1) + +	self.download(download_url) + +        # check download +        check = self.checkDownload({ +            "notfound": re.compile(r"^<head><title>404 Not Found</title>$"), +            "skippedcountdown": re.compile(r"^Dont skip the countdown$"), +            "waitforfreeslots": re.compile(self.WAIT_LONGER_PATTERN), +            "downloadedtoomuch": re.compile(self.TOOMUCH_PATTERN) +            }) +        if check == "skippedcountdown": +            self.fail("Countdown error") +        elif check == "notfound": +            self.fail("404 Not found") +        elif check == "waitforfreeslots": +            self.waitForFreeSlot() +        elif check == "downloadedtoomuch": +            self.retry()    + +    def waitForFreeSlot(self): +        self.setWait(900, True) +        self.wait() +        self.retry(60, 1, "Wait for free slot") + +    def waitSeconds(self, seconds): +        self.setWait(seconds + 2) +        self.wait()  | 
