diff options
Diffstat (limited to 'module/plugins')
| -rw-r--r-- | module/plugins/hoster/ARD.py | 80 | 
1 files changed, 80 insertions, 0 deletions
| diff --git a/module/plugins/hoster/ARD.py b/module/plugins/hoster/ARD.py new file mode 100644 index 000000000..60a40e69d --- /dev/null +++ b/module/plugins/hoster/ARD.py @@ -0,0 +1,80 @@ + +import subprocess +import re +import os.path +import os + +from module.utils import save_join, save_path +from module.plugins.Hoster import Hoster + +# Requires rtmpdump +# by Roland Beermann + +class RTMP: +    # TODO: Port to some RTMP-library like rtmpy or similar +    # TODO?: Integrate properly into the API of pyLoad + +    command = "rtmpdump" + +    @classmethod +    def download_rtmp_stream(cls, url, output_file, playpath=None): +        opts = [ +            "-r", url, +            "-o", output_file, +        ] +        if playpath: +            opts.append("--playpath") +            opts.append(playpath) + +        cls._invoke_rtmpdump(opts) + +    @classmethod +    def _invoke_rtmpdump(cls, opts): +        args = [ +            cls.command +        ] +        args.extend(opts) + +        return subprocess.check_call(args) + +class ARD(Hoster): +    __name__ = "ARD Mediathek" +    __version__ = "0.1" +    __pattern__ = r"http://www\.ardmediathek\.de/.*" +    __config__ = [] + +    def process(self, pyfile): +        site = self.load(pyfile.url) + +        avail_videos = re.findall(r"""mediaCollection.addMediaStream\(0, ([0-9]*), "([^\"]*)", "([^\"]*)", "[^\"]*"\);""", site) +        avail_videos.sort(key=lambda videodesc: int(videodesc[0]), reverse=True) # The higher the number, the better the quality + +        quality, url, playpath = avail_videos[0] + +        pyfile.name = re.search(r"<h1>([^<]*)</h1>", site).group(1) + +        if url.startswith("http"): +            # Best quality is available over HTTP. Very rare. +            self.download(url) +        else: +            pyfile.setStatus("downloading") + +            download_folder = self.config['general']['download_folder'] + +            location = save_join(download_folder, pyfile.package().folder) + +            if not os.path.exists(location): +                os.makedirs(location, int(self.core.config["permission"]["folder"], 8)) + +                if self.core.config["permission"]["change_dl"] and os.name != "nt": +                    try: +                        uid = getpwnam(self.config["permission"]["user"])[2] +                        gid = getgrnam(self.config["permission"]["group"])[2] + +                        chown(location, uid, gid) +                    except Exception, e: +                        self.log.warning(_("Setting User and Group failed: %s") % str(e)) + +            output_file = save_join(location, save_path(pyfile.name)) + +            RTMP.download_rtmp_stream(url, playpath=playpath, output_file=output_file) | 
