示例#1
0
def qCanal(url, opcs):
    '''
        Comprueba utlizando la clase Servidor de que servicio ha recibido la url
        y devuelve el objeto según el servicio que del cual se haya pasado la
        url
    '''
    mod_tv = _mod_tv
    for canal in mod_tv.values():
        if isUrlEnCanal(url, canal["urls"]):
            uiUtiles.printt(canal["comentario"])
            return canal["mod"](url, opcs)
    return None
示例#2
0
def qCanal(url, opcs):
    '''
        Comprueba utlizando la clase Servidor de que servicio ha recibido la url
        y devuelve el objeto según el servicio que del cual se haya pasado la
        url
    '''
    mod_tv = _mod_tv
    for canal in mod_tv.values():
        if isUrlEnCanal(url, canal["urls"]):
            uiUtiles.printt(canal["comentario"])              
            return canal["mod"](url, opcs)
    return None
示例#3
0
def comprobar_version():
    '''
        Comprueba la versión del cliente con la última lanzada utilizando la clase
        PdtVersion() de utilies.py
    '''
    uiUtiles.printt(u"[INFO VERSIÓN] Comprobando si existen nuevas versiones de PyDownTV")
    pdtv = uiUtiles.PdtVersion()
    try:
        new_version, changelog = pdtv.get_new_version()
        if new_version == -1:
            uiUtiles.printt(u"[!!!] ERROR al comprobar la versión del cliente")
        else:
            pdtv.comp_version(new_version, changelog)
    except KeyboardInterrupt:
        uiUtiles.printt(u"[+] Comprobación cancelada")
    except Exception:
        uiUtiles.printt(u"[!!!] ERROR al comprobar la versión del cliente")
示例#4
0
def isURL(url):
    '''
        Compara de forma muy básica si la cadena que se le pasa como parámetro es una URL válida
    '''
    p = re.compile(
    '^(https?)://([-a-z0-9\.]+)(?:(/[^\s]+)(?:\?((?:\w+=[-a-z0-9/%:,._]+)?(?:&\w+=[-a-zA-Z0-9/%:,._]+)*)?)?)?$', 
    re.IGNORECASE)
    m = p.match(url)
    return True if m else False



if __name__ == "__main__":
    (options, urls) = argsparse()
    
    if not urls: uiUtiles.printt(u"PyDownTV (Descarga vídeos de las webs de TV españolas):\n--------\n")
    if not options.check_version: comprobar_version()
    
    # Serializar las opciones que se mandaran al módulo de la TV:
    opcs =  {
            "log": options.silent if options.silent is not None else True,
            "debug": options.debug if options.debug is not None else False
            }
    ####
    
    if not urls:
        uiUtiles.printt(u"[--->] Introduce las URL de los vídeos (separadas por espacios):")
        inPut = raw_input()
        urls = inPut.split(" ")
    
    vUrls = [url for url in urls if isURL(url)]
示例#5
0
    def __getRTMP(self):
        command = "rtmpdump"
        if sys.platform == "win32":
            command += ".exe"

        printt(u"")
        printt(u"DESCARGAR:")
        printt(
            u"----------------------------------------------------------------"
        )
        printt(
            u"[ COMANDO ]", self.__COMANDO_RTMPD
            if self.__COMANDO_RTMPD is not None else self.__COMANDO_MENCO)
        printt(u"[   DESTINO   ]", self.__TITULO)
        printt(u"\n[INFO] Presiona \"Ctrl + C\" para cancelar\n")

        # TODO: mejorar esto!
        args = self.__COMANDO_RTMPD.split(
        ) if self.__COMANDO_RTMPD is not None else self.__COMANDO_MENCO.split(
        )

        try:
            printt(u"\nLanzando rtmpdump...\n")
            out = subprocess.call(args)
            if out == 0:  # Descarga realizada con éxito
                printt(u"[OK] Descarga realizada con éxito")
            else:
                printt(u"[ERROR] Ha fallado la descarga")
        except OSError, e:
            printt(u"[!!!] ERROR. No se encuenta rtmpdump o mplayer:", e)
示例#6
0
 def __getHTTP(self):
     if sys.platform == "win32": self.__descargaVideoWindows()
     else:
         printt(u"")
         printt(u"DESCARGAR:")
         printt(
             u"----------------------------------------------------------------"
         )
         printt(u"[ URL DE DESCARGA FINAL ]", self.__URL)
         printt(u"[INFO] Presiona \"Ctrl + C\" para cancelar")
         printt(u"")
         options = {
             "output_file": self.__TITULO,
             "verbose": True,
             "max_speed": None,
             "num_connections": 4
         }
         pyaxel.download(self.__URL, options)
示例#7
0
    def descargaVideoWindows(self, nombre=None):
        '''
            Procesa la descarga del vídeo llamanda a la función download de pyaxel para la mayoría de los
            vídeos en GNU/Linux y Mac OS X. Para sistemas win32, se llama a descargarVideoWindows() y tanto para
            GNU/Linux como para Mac OS X y Windows cuando el protocolo es mms:// se utiliza libmms (por ahora Windows no)
            y cuando el protocolo es rtmp:// se utiliza el binario rtmpdump que el user debe tener instalado.
        '''

        printt(u"")
        printt(u"DESCARGAR:")
        printt(
            u"----------------------------------------------------------------"
        )

        printt(u"[ URL DE DESCARGA FINAL ]", self.__URL)

        printt(u"[INFO] Presiona \"Ctrl + C\" para cancelar")
        printt(u"")

        def estadodescarga(bloque, tamano_bloque, tamano_total):
            '''
                función reporthook que representa en pantalla información mientras
                se realiza la descarga
            '''
            # En Megas
            try:
                cant_descargada = (
                    (bloque * tamano_bloque) / 1024.00) / 1024.00
                tamano_total = (tamano_total / 1024.00) / 1024.00
                porcentaje = cant_descargada / (tamano_total / 100.00)
                if porcentaje > 100.00:
                    porcentaje = 100.00
            except ZeroDivisionError:
                pass
                #print "[DEBUG] Error de divisiñon entre cero"
            # TODO: Agregar velocidad de descarga al progreso
            sys.stdout.write("\r[Descargando]: [ %.2f MiB / %.2f MiB ]\t\t[ %.1f%% ]" \
                            % (cant_descargada, tamano_total, porcentaje))

        #######
        try:
            printt(u"[Destino]", self.__TITULO)
            urllib.urlretrieve(self.__URL,
                               self.__TITULO,
                               reporthook=estadodescarga)
            print ""
        except KeyboardInterrupt:
            salir("\nCiao!")
示例#8
0
    def __getMMS(self):
        printt(u"")
        printt(u"DESCARGAR:")
        printt(
            u"----------------------------------------------------------------"
        )
        printt(u"[ URL DE DESCARGA FINAL ]", self.__URL)
        printt(u"[   DESTINO   ]", self.__TITULO)

        if sys.platform == "win32":
            msg = '''Protocolo MMS aun no disponible en Windows.
            La URL FINAL DE DESCARGA que se muestra, es la localización final del archivo.
            Puedes descargar el archivo mediante esta URL a través de algún gestor de
            descargas que soporte la descarga a través del protocolo mms://
            '''
            printt(msg)
            return

        try:
            from pylibmms import core as libmmscore
        except ImportError, e:
            print e
            salir(u"[!!!] ERROR al importar libmms")
示例#9
0
        if sys.platform == "win32":
            msg = '''Protocolo MMS aun no disponible en Windows.
            La URL FINAL DE DESCARGA que se muestra, es la localización final del archivo.
            Puedes descargar el archivo mediante esta URL a través de algún gestor de
            descargas que soporte la descarga a través del protocolo mms://
            '''
            printt(msg)
            return

        try:
            from pylibmms import core as libmmscore
        except ImportError, e:
            print e
            salir(u"[!!!] ERROR al importar libmms")

        printt(u"\n[INFO] Presiona \"Ctrl + C\" para cancelar\n")
        options = [self.__URL, self.__TITULO]
        libmmscore.run(options)

    def descargarVideo(self):
        if self.__TIPO == "http": self.__getHTTP()
        elif self.__TIPO == "rtmp" or self.__TIPO == "rtmpe": self.__getRTMP()
        elif self.__TIPO == "mms": self.__getMMS()

    def descargaVideoWindows(self, nombre=None):
        '''
            Procesa la descarga del vídeo llamanda a la función download de pyaxel para la mayoría de los
            vídeos en GNU/Linux y Mac OS X. Para sistemas win32, se llama a descargarVideoWindows() y tanto para
            GNU/Linux como para Mac OS X y Windows cuando el protocolo es mms:// se utiliza libmms (por ahora Windows no)
            y cuando el protocolo es rtmp:// se utiliza el binario rtmpdump que el user debe tener instalado.
        '''
示例#10
0
 def __getRTMP(self):
     command = "rtmpdump"
     if sys.platform == "win32":
         command += ".exe"
     
     printt(u"")
     printt(u"DESCARGAR:")
     printt(u"----------------------------------------------------------------")
     printt(u"[ COMANDO ]", self.__COMANDO_RTMPD if self.__COMANDO_RTMPD is not None else self.__COMANDO_MENCO)
     printt(u"[   DESTINO   ]", self.__TITULO)
     printt(u"\n[INFO] Presiona \"Ctrl + C\" para cancelar\n")
     
     # TODO: mejorar esto!
     args = self.__COMANDO_RTMPD.split() if self.__COMANDO_RTMPD is not None else self.__COMANDO_MENCO.split()
     
     try:
         printt(u"\nLanzando rtmpdump...\n")
         out = subprocess.call(args)
         if out == 0: # Descarga realizada con éxito
             printt(u"[OK] Descarga realizada con éxito")
         else:
             printt(u"[ERROR] Ha fallado la descarga")
     except OSError, e:
         printt(u"[!!!] ERROR. No se encuenta rtmpdump o mplayer:", e)
 def __getHTTP(self):
     if sys.platform == "win32": self.__descargaVideoWindows()
     else:
         printt(u"")
         printt(u"DESCARGAR:")
         printt(u"----------------------------------------------------------------")
         printt(u"[ URL DE DESCARGA FINAL ]", self.__URL)
         printt(u"[INFO] Presiona \"Ctrl + C\" para cancelar")
         printt(u"")
         options = {"output_file": self.__TITULO, "verbose": True, "max_speed": None, "num_connections": 4}
         pyaxel.download(self.__URL, options)
    def descargaVideoWindows(self, nombre=None):
        '''
            Procesa la descarga del vídeo llamanda a la función download de pyaxel para la mayoría de los
            vídeos en GNU/Linux y Mac OS X. Para sistemas win32, se llama a descargarVideoWindows() y tanto para
            GNU/Linux como para Mac OS X y Windows cuando el protocolo es mms:// se utiliza libmms (por ahora Windows no)
            y cuando el protocolo es rtmp:// se utiliza el binario rtmpdump que el user debe tener instalado.
        '''
        
        printt(u"")
        printt(u"DESCARGAR:")
        printt(u"----------------------------------------------------------------")

        printt(u"[ URL DE DESCARGA FINAL ]", self.__URL)
            
        printt(u"[INFO] Presiona \"Ctrl + C\" para cancelar")
        printt(u"")
        
        def estadodescarga(bloque, tamano_bloque, tamano_total):
            '''
                función reporthook que representa en pantalla información mientras
                se realiza la descarga
            '''
            # En Megas
            try:
                cant_descargada = ((bloque * tamano_bloque) / 1024.00) / 1024.00
                tamano_total = (tamano_total / 1024.00) / 1024.00
                porcentaje = cant_descargada / (tamano_total / 100.00)
                if porcentaje > 100.00:
                    porcentaje = 100.00
            except ZeroDivisionError:
                pass
                #print "[DEBUG] Error de divisiñon entre cero"
            # TODO: Agregar velocidad de descarga al progreso
            sys.stdout.write("\r[Descargando]: [ %.2f MiB / %.2f MiB ]\t\t[ %.1f%% ]" \
                            % (cant_descargada, tamano_total, porcentaje))
                            
        #######
        try:
            printt(u"[Destino]", self.__TITULO)
            urllib.urlretrieve(self.__URL, self.__TITULO, reporthook=estadodescarga)
            print ""
        except KeyboardInterrupt:
            salir("\nCiao!")
 def __getMMS(self):
     printt(u"")
     printt(u"DESCARGAR:")
     printt(u"----------------------------------------------------------------")
     printt(u"[ URL DE DESCARGA FINAL ]", self.__URL)
     printt(u"[   DESTINO   ]", self.__TITULO)
     
     
     if sys.platform == "win32":
         msg = '''Protocolo MMS aun no disponible en Windows.
         La URL FINAL DE DESCARGA que se muestra, es la localización final del archivo.
         Puedes descargar el archivo mediante esta URL a través de algún gestor de
         descargas que soporte la descarga a través del protocolo mms://
         '''
         printt(msg)
         return
     
     try:
         from pylibmms import core as libmmscore
     except ImportError, e:
         print e
         salir(u"[!!!] ERROR al importar libmms")
        if sys.platform == "win32":
            msg = '''Protocolo MMS aun no disponible en Windows.
            La URL FINAL DE DESCARGA que se muestra, es la localización final del archivo.
            Puedes descargar el archivo mediante esta URL a través de algún gestor de
            descargas que soporte la descarga a través del protocolo mms://
            '''
            printt(msg)
            return
        
        try:
            from pylibmms import core as libmmscore
        except ImportError, e:
            print e
            salir(u"[!!!] ERROR al importar libmms")
        
        printt(u"\n[INFO] Presiona \"Ctrl + C\" para cancelar\n")
        options = [self.__URL, self.__TITULO]
        libmmscore.run(options)

    
    def descargarVideo(self):
        if self.__TIPO == "http": self.__getHTTP()
        elif self.__TIPO == "rtmp" or self.__TIPO == "rtmpe": self.__getRTMP()
        elif self.__TIPO == "mms": self.__getMMS()
            
        
    def descargaVideoWindows(self, nombre=None):
        '''
            Procesa la descarga del vídeo llamanda a la función download de pyaxel para la mayoría de los
            vídeos en GNU/Linux y Mac OS X. Para sistemas win32, se llama a descargarVideoWindows() y tanto para
            GNU/Linux como para Mac OS X y Windows cuando el protocolo es mms:// se utiliza libmms (por ahora Windows no)
示例#15
0
    '''
        Compara de forma muy básica si la cadena que se le pasa como parámetro es una URL válida
    '''
    p = re.compile(
        '^(https?)://([-a-z0-9\.]+)(?:(/[^\s]+)(?:\?((?:\w+=[-a-z0-9/%:,._]+)?(?:&\w+=[-a-zA-Z0-9/%:,._]+)*)?)?)?$',
        re.IGNORECASE)
    m = p.match(url)
    return True if m else False


if __name__ == "__main__":
    (options, urls) = argsparse()

    if not urls:
        uiUtiles.printt(
            u"PyDownTV (Descarga vídeos de las webs de TV españolas):\n--------\n"
        )
    #if not options.check_version: comprobar_version()

    # Serializar las opciones que se mandaran al módulo de la TV:
    opcs = {
        "log":
        options.silent if options.silent is not None else True,
        "debug":
        options.debug if options.debug is not None else False,
        "partes": [int(p) for p in options.partes.split(",")]
        if options.partes is not None else None,
        "formula1":
        options.formula1 if options.formula1 is not None else None
    }
    ####
    def __getRTMP(self):
        command = "rtmpdump"
        if sys.platform == "win32":
            command += ".exe"
        
        printt(u"")
        printt(u"DESCARGAR:")
        printt(u"----------------------------------------------------------------")
        printt(u"[ COMANDO ]", self.__COMANDO_RTMPD if self.__COMANDO_RTMPD is not None else self.__COMANDO_MENCO)
        printt(u"[   DESTINO   ]", self.__TITULO)
        printt(u"\n[INFO] Presiona \"Ctrl + C\" para cancelar\n")
        
        # TODO: mejorar esto!
        old_args = self.__COMANDO_RTMPD.split() if self.__COMANDO_RTMPD is not None else self.__COMANDO_MENCO.split()
        args = []
        # Clean the command args
        for arg in old_args:
            new_arg = arg
            first_char = arg[0]
            # The arguments cannot be enclosed in ' or " when passing them to subprocess
            if first_char in ['\'', '"'] and first_char == arg[-1]:
                new_arg = arg[1:-1]
            args.append(new_arg)

        try:
            printt(u"\nLanzando rtmpdump...\n")
            out = subprocess.call(args)
            if out == 0: # Descarga realizada con éxito
                printt(u"[OK] Descarga realizada con éxito")
            else:
                printt(u"[ERROR] Ha fallado la descarga")
        except OSError, e:
            printt(u"[!!!] ERROR. No se encuenta rtmpdump o mplayer:", e)
示例#17
0
    def __getRTMP(self):
        command = "rtmpdump"
        if sys.platform == "win32":
            command += ".exe"

        printt(u"")
        printt(u"DESCARGAR:")
        printt(
            u"----------------------------------------------------------------"
        )
        printt(
            u"[ COMANDO ]", self.__COMANDO_RTMPD
            if self.__COMANDO_RTMPD is not None else self.__COMANDO_MENCO)
        printt(u"[   DESTINO   ]", self.__TITULO)
        printt(u"\n[INFO] Presiona \"Ctrl + C\" para cancelar\n")

        # TODO: mejorar esto!
        old_args = self.__COMANDO_RTMPD.split(
        ) if self.__COMANDO_RTMPD is not None else self.__COMANDO_MENCO.split(
        )
        args = []
        # Clean the command args
        for arg in old_args:
            new_arg = arg
            first_char = arg[0]
            # The arguments cannot be enclosed in ' or " when passing them to subprocess
            if first_char in ['\'', '"'] and first_char == arg[-1]:
                new_arg = arg[1:-1]
            args.append(new_arg)

        try:
            printt(u"\nLanzando rtmpdump...\n")
            out = subprocess.call(args)
            if out == 0:  # Descarga realizada con éxito
                printt(u"[OK] Descarga realizada con éxito")
            else:
                printt(u"[ERROR] Ha fallado la descarga")
        except OSError, e:
            printt(u"[!!!] ERROR. No se encuenta rtmpdump o mplayer:", e)