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
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")
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)]
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) y cuando el protocolo es rtmp:// se utiliza el binario rtmpdump que el user debe tener instalado. '''
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)
''' 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)
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)