Example #1
0
 def __modoSalonNuevo(self, streamXML):
     '''Nuevos vídeos con extensión .m4v'''
     printt(u"[INFO] Nuevos vídeos en formato f4v")
     if streamXML.find("000.f4v"):
         url2down1 = self.URL_DE_DESCARGA + streamXML.split("<archivo><![CDATA[")[1].split("]")[0]
     else:
         url2down1 = self.URL_DE_DESCARGA + \
             streamXML.split("<archivo><![CDATA[")[1].split("001.f4v]]></archivo>")[0] + "000.f4v"
     try: # Descargar entero
         urllib2.urlopen(url2down1)
         url2down = url2down1
         name = streamXML.split("<nombre><![CDATA[")[1].split("]]>")[0] + ".f4v"
     except urllib2.HTTPError: # Descargar por partes:
         printt(u"[!!!]  No se puede descargar el vídeo en un archivo (000.m4v)")
         printt(u"[INFO] El vídeo se descargará por partes")
         parts = re.findall("\<archivo\>\<\!\[CDATA\[.*\.f4v\]\]\>\<\/archivo\>", streamXML)
         if parts:
             name1 = streamXML.split("<nombre><![CDATA[")[1].split("]]>")[0]
             url2down = []
             name = []
             for i in parts:
                 url2down.append(self.URL_DE_DESCARGA + i.split("<archivo><![CDATA[")[1].split("]]></archivo>")[0])
                 name.append(name1 + "_" + i.split("]")[0].split("/")[-1])
         else:
             salir(u"[!!!] ERROR: No se encuentran las partes del vídeo")
     
     return [url2down,  name]
Example #2
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        streamHTML = self.__descHTML(self._URL_recibida)
        
        if streamHTML.find("<param name=\"movie\"") != -1:
            printt(u"[INFO] Vídeo")
            # Delimitar:
            streamVideo = streamHTML.split("<param name=\"movie\"")[1].split("/>")[0]
            url = streamVideo.split("file=")[1].split("&")[0]
            ext = "." + url.split(".")[-1]
            name = streamHTML.split("<meta name=\"title\" content=\"")[1].split("\"")[0] + ext
        else:
            salir(u"[!!!] No se reconoce el tipo de contenido")
        
        
        if name:
            name = formatearNombre(name)

        return [url, name]
Example #3
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        if self._URL_recibida.find("canalsuralacarta.es") != -1: # CSur a la carta:
            url, name = self.__alacarta()
        elif self._URL_recibida.find("canalsur.es/") != -1: # Vídeos normales
            url, name = self.__modoNormal()
        else: # No debería de suceder nuca
            salir(u"[!!!] Error inesperado")

        if name:
            name = formatearNombre(name)

        return [url, name]
Example #4
0
 def __playCuatro(self):
     '''return url y name pertenecientes a los vídeos de Play Cuatro'''
     streamHTML = self.__descHTML(self._URL_recibida).replace(" ", "")
     videoID = streamHTML.split("videoId:")[1].split(",")[0]
     printt(u"[INFO] Video ID:", videoID)
     streamStreams = self.__descHTML(self.URL_STREAMS_START + videoID + self.URL_STREAMS_END)
     streamStreams = streamStreams.replace(" ", "").replace("\n", "")
     videos = streamStreams.split("{")[1:]
     printt(u"[INFO] Se han detectado varios tipos de calidad:")
     b = 0
     for i in videos:
         printt(u"\t[%4d] %s" % (b, i.split("\"quality\":\"")[1].split("\"")[0]))
         b += 1
     # Presentar menú para elegir vídeo:
     printt(u"[-->] Introduce el número del tipo vídeo que quieres descargar (Ctrl+C para cancelar): ")
     while True:
         try:
             ID = int(raw_input())
         except ValueError:
             printt(u"[!!!] Parece que no has introducido un número. Prueba otra vez:")
             continue
         except KeyboardInterrupt:
             salir(u"\nBye!")
             
         if ID < 0 or ID > len(videos)-1:
             printt(u"[!!!] No existe el vídeo con número [%4d] Prueba otra vez:" % ID)
             continue
         else:
             break
     
     url = videos[ID].split("\"url\":\"")[1].split("\"")[0]
     ext = "." + url.split("?")[0].split(".")[-1]
     name = streamHTML.split("playerPageURL:\'")[1].split("\'")[0].split("/")[-1] + ext
     
     return [url, name]
Example #5
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        streamHTML = self.__descHTML(self._URL_recibida)
        if streamHTML.find(".WMV") != -1:
            name = streamHTML.split("<span id=\"lbltitulo_detalle\">")[1].split("<")[0]
            url = streamHTML.split("<input type=\"hidden\" id=\"hidden_url\" value=\'")[1].split("\'")[0]
            ext = "." + url.split(".")[-1].lower()
            name += ext
        elif streamHTML.find("youtube") != -1:
            salir(u"[!!!] No se reconoce el tipo de contenido.\nPuede que el vídeo sea de YouTube??")
        else:
            salir(u"[!!!] No se reconoce el tipo de contenido")
        
        
        if name:
            name = formatearNombre(name)

        return [url, name]
Example #6
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        if self._URL_recibida.find("tv-a-la-carta/") != -1 or self._URL_recibida.find("http://alacarta.canalextremadura.es/tv") != -1 or self._URL_recibida.find("canalextremadura.es/alacarta/tv/") != -1:
            printt(u"[INFO] TV a la carta")
            streamHTML = self.__descHTML(self._URL_recibida).replace(" ", "")
            
            if streamHTML.find("crea_video_hd(") != -1:
                urlFLV = streamHTML.split("crea_video_hd(\"")[1].split("\"")[0]
                streamFLV = self.__descHTML(urlFLV)
                url = "http://" + streamFLV.split("http://")[1]
                ext = "." + url.split(".")[-1].split("?")[0]
            elif streamHTML.find("file:'") != -1:
                try:
                    url = streamHTML.split("\'file\':\'")[1].split("\'")[0] #Modo nomal nuevo
                except: #Modo normal antiguo
                    url = streamHTML.split("streamer:\'")[1].split("\'")[0] + streamHTML.split("file:\'")[1].split("\'")[0]
                ext = "." + url.split(".")[-1]
            elif streamHTML.find("rel=\"rtmp://") != -1: #RTMP en alacarta
                url = "rtmp://" + streamHTML.split("rel=\"rtmp://")[1].split("\"")[0].replace("#", "")
                url = url.split(".mp4")[0] + ".mp4"
                ext = ".mp4"
            elif streamHTML.split("if(isiPad)") != -1: #HTTP para iPad
                url = streamHTML.split("<video")[1].split(".mp4")[0].split("\"")[-1] + ".mp4"
                ext = ".mp4"
            else:
                salir(u"[!!!] No se encuentra el vídeo")
            name = streamHTML.split("<title>")[1].split("<")[0] + ext
        elif self._URL_recibida.find("radio-a-la-carta/") != -1 or self._URL_recibida.find("http://alacarta.canalextremadura.es/radio") != -1 or self._URL_recibida.find("canalextremadura.es/alacarta/radio/") != -1:
            printt(u"[INFO] Radio A la Carta")
            streamHTML = self.__descHTML(self._URL_recibida).replace(" ", "")
            try: #Modo nuevo
                url = streamHTML.split("<divclass=\"descargar\">")[1].split("<ahref=\"")[1].split("\"")[0]
            except: #Modo antiguo
                url = streamHTML.split("s1.addVariable(\'file\',\'")[1].split("\'")[0]
            name = streamHTML.split("<title>")[1].split("<")[0] + ".mp3"
        else: #Modo normal nuevo con nueva url recibida
            printt(u"[INFO] Modo Genérico")
            streamHTML = self.__descHTML(self._URL_recibida).replace(" ", "")
            url = streamHTML.split("\'file\':\'")[1].split("\'")[0] #Modo nomal nuevo
            ext = "." + url.split(".")[-1]
            name = streamHTML.split("<title>")[1].split("<")[0] + ext
        
        if name:
            name = formatearNombre(name)

        return [url, name]
Example #7
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        streamHTML = self.__descHTML(self._URL_recibida)
        if self._URL_recibida.find("audios/") != -1 or self._URL_recibida.find("audioak/") != -1:
            printt(u"[INFO] Audio")
            name = streamHTML.split("<title>")[1].split("<")[0]
            streamMP3 = streamHTML.split("<a id=\"descargaMp3\"")[1].split(">")[0]
            url = self.URL_EITB + streamMP3.split("href=\"")[1].split("\"")[0]
            name += ".mp3"
            
        elif self._URL_recibida.find("videos/") != -1 or self._URL_recibida.find("bideoak/") != -1 or self._URL_recibida.find("video/") != -1 :
            if streamHTML.find("<a id=\"descargaMp4\"") != -1:
                name = streamHTML.split("<title>")[1].split("<")[0]
                streamMP4 = streamHTML.split("<a id=\"descargaMp4\"")[1].split(">")[0]
                url = self.URL_EITB + streamMP4.split("href=\"")[1].split("\"")[0]
            else:
                #streamHTML = self.__descHTML(self._URL_recibida)
                name = self._URL_recibida.split("/")[-1]
                playerID = streamHTML.split("<param name=\"playerID\" value=\"")[1].split("\"")[0]
                playerKey = streamHTML.split("<param name=\"playerKey\" value=\"")[1].split("\"")[0]
                const = "9f8617ac59091bcfd501ae5188e4762ffddb9925"
                publisherID = "102076681001"
                videoID = self._URL_recibida.split("/")[-1]
                
                rtmpdata = self.get_data(publisherID, playerID, const, videoID, playerKey)['renditions']
                URL = str(rtmpdata[0]['defaultURL'])
                r = URL.split("&")[0] 
                a = "/".join(r.split("/")[-3:])
                C1 = "B:0"
                C2 = "S:" + "&".join(URL.split("&")[1:])
                y = URL.split("&")[1]
                url = r
                
                #print "rtmpdump -r " + r + " -a " + a + " -C " + C1 + " -C " + C2 + " -y " + y + " -o " + name + ".mp4"
                
            name += ".mp4"
        else:
            salir(u"[!!!] No se reconoce el tipo de contenido")
        
        
        if name:
            name = formatearNombre(name)

        return [url, name, "-a", a, "-C", C1, "-C", C2, "-y", y]
Example #8
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        streamHTML = self.__descHTML(self._URL_recibida)
        
        if streamHTML.find("&videoId=") != -1:
            videoID = streamHTML.split("&videoId=")[1].split("\'")[0]
            printt(u"[INFO] Video ID:", videoID)
            streamStreams = self.__descHTML(self.URL_STREAMS_START + videoID + self.URL_STREAMS_END)
            streamStreams = streamStreams.replace(" ", "").replace("\n", "")
            videos = streamStreams.split("{")[1:]
            printt(u"[INFO] Se han detectado varios tipos de calidad:")
            b = 0
            for i in videos:
                printt(u"\t[%4d] %s" % (b, i.split("\"quality\":\"")[1].split("\"")[0]))
                b += 1
            # Presentar menú para elegir vídeo:
            printt(u"[-->] Introduce el número del tipo vídeo que quieres descargar (Ctrl+C para cancelar): ")
            while True:
                try:
                    ID = int(raw_input())
                except ValueError:
                    printt(u"[!!!] Parece que no has introducido un número. Prueba otra vez:")
                    continue
                except KeyboardInterrupt:
                    salir(u"\nBye!")
                    
                if ID < 0 or ID > len(videos)-1:
                    printt(u"[!!!] No existe el vídeo con número [%4d] Prueba otra vez:" % ID)
                    continue
                else:
                    break
            
            url = videos[ID].split("\"url\":\"")[1].split("\"")[0]
            ext = "." + url.split("?")[0].split(".")[-1]
            name = (streamHTML.split("<title>")[1].split("<")[0]).strip()
            name += ext
        else:
            salir(u"[!!!] No se encustra ningún vídeo en la página")
            

        if name:
            name = formatearNombre(name)

        return [url, name]
Example #9
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del audio a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
        '''
        # Primero: nos quedamos con le id dependiendo si el user metio la url con
        # una barra (/) final o no y si tiene extensión (no es alacarta)
        audioID = self._URL_recibida.split('/')[-1]
        if audioID == "":
            audioID = self._URL_recibida.split('/')[-2]
        elif audioID.find(".shtml") != -1 or audioID.find(".html") != -1 or \
            audioID.find(".html") != -1:
            audioID = audioID.split('.')[0]
        
        
        printt(u"[INFO] ID del Audio   :", audioID)
        xmlURL = "http://www.rtve.es/swf/data/es/audios/audio/" + audioID[-1] \
                + "/" + audioID[-2] + "/" + audioID[-3] \
                + "/" + audioID[-4] + "/" + audioID + ".xml"
        printt(u"[INFO] Url de xml     :", xmlURL)
        #print "[+] Procesando Descarga"

        sourceXML = self.__descXML(xmlURL)
        
        # Ahora la url final del audio puede estar entre las etiquetas <file></file>
        # o puede que tengamos que dar un rodeo
        if sourceXML.find("<file>") != -1 and sourceXML.find("</file>"): # Contiene la URL
            urlAudio = sourceXML.split("<file>")[1].split("</file>")[0]
        elif sourceXML.find("assetDataId::") != -1: # Dar el rodeo
            idAsset = sourceXML.split("assetDataId::")[1].split("\"/>")[0]
            printt(u"[INFO] Nuevo ID Asset :",  idAsset)
            urlXMLasset = "www.rtve.es/scd/CONTENTS/ASSET_DATA_AUDIO/" + idAsset[-1] \
                        + "/" + idAsset[-2] + "/" + idAsset[-3] \
                        + "/" + idAsset[-4] + "/ASSET_DATA_AUDIO-" + idAsset + ".xml"
            printt(u"[INFO] XML URL Asset  :",  urlXMLasset)
            sourceAssetXML = self.__descXML(urlXMLasset)
            urlInSourceAssetXML = sourceAssetXML.split("defaultLocation=\"")[1].split("\"")[0]
            #print "urllInSourceAssetXML =", urlInSourceAssetXML
            urlAudio = "http://www.rtve.es/resources/TE_NGVA/mp3/" + urlInSourceAssetXML.split("/mp3/")[1]
        else:
            salir(u"[!!!] No se encuentró la URL del Audio")
        
        

        # Nombre con el que se guardará la descarga:
        extension = '.' + urlAudio.split('.')[-1]
        name =  sourceXML.split("<name>")[1].split("</name")[0] + extension
        name = formatearNombre(name)

        return [urlAudio, name]
Example #10
0
    def procesarDescarga(self):
        """
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        """

        streamHTML = self.__descHTML(self._URL_recibida)  # .replace(" ", "")
        if streamHTML.find("contentArray[") != -1:
            printt(u"[INFO] Se han detectado varios vídeos en la página:")
            # Deleimitar los bloques de vídeos:
            bloques = streamHTML.split("contentArray[")[1:]
            # Delimitar en un diccionario los videos:
            videosSucio = {}
            for i in bloques:
                videosSucio[int(i.split("]")[0])] = i.split("=")[1].split(");")[0]
            # Mostrar el menú en pantalla:
            for i in videosSucio:
                printt("\t[%4d] %s" % (i, videosSucio[i].split("'")[1]))

            # Presentar menú para elegir vídeo:
            printt(u"[-->] Introduce el número del vídeo que quieres descargar (Ctrl+C para cancelar): ")
            while True:
                try:
                    ID = int(raw_input())
                except ValueError:
                    printt(u"[!!!] Parece que no has introducido un número. Prueba otra vez:")
                    continue
                except KeyboardInterrupt:
                    salir(u"\nBye!")

                if ID < 0 or ID > len(videosSucio) - 1:
                    printt(u"[!!!] No existe el vídeo con número [%4d] Prueba otra vez:" % ID)
                    continue
                else:
                    break

            # Consguir el vídeo según el ID:
            url = videosSucio[ID].split("'")[7]
            ext = "." + url.split(".")[-1]
            name = videosSucio[ID].split("'")[1] + ext
        else:
            salir(u"[!!!] ERROR: No se han econtrado vídeos en la página")

        if name:
            name = formatearNombre(name)

        return [url, name]
Example #11
0
 def __3cat24(self, nuevoID=None):
     '''
         Procesa los vídeos de 3cat24 si no se le pasa un nuevo ID.
         Si se le apsa ID puede que sea de 3cat24 o un vídeo a alacarta (si el ID es de alacarta)
     '''
     id = self._URL_recibida.split("/")[-1] if nuevoID is None else nuevoID
     streamHTML = self.__descHTML(self.URL_TOKEN_START + id + self.URL_TOKEN_END)
     if streamHTML.find("<error>") != -1:
         salir(u"[!!!] Error al capturar el vídeo")
     name = streamHTML.split("<media videoname=\"")[1].split("\"")[0] + ".mp4"
     url = "rtmp://" + streamHTML.split("rtmp://")[1].split("<")[0]
     
     return [url, name]
Example #12
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
        '''
        # print "[+] Procesando descarga"
        streamHTML = self.__descHTML(self._URL_recibida)
        if self._URL_recibida.find("antena3.com/videos/") != -1: # Modo Salón
            url2down,  name = self.__modoSalon(streamHTML)
        else: # Otro vídeos (No modo salón)
            printt(u"[INFO] Vídeo normal (no Modo Salón)")
            if streamHTML.find(".seoURL='") != -1: # Url directamente en HTML
                url2down, name = self.__modoNormalConURL(streamHTML)
            elif streamHTML.find("a3_gp_visor_player") != -1:
                url2down, name = self.__modoF1(streamHTML)
            else: # No está la url en el hmtl (buscar por varias partes)
                if streamHTML.find("<div class=\"visor\">") != -1: # Más de 1 parte # Quizas mejor "carrusel"?
                    url2down, name = self.__modoNormalVariasPartes(streamHTML)
                else: # Solo una parte
                    url2down, name = self.__modoNormalUnaParte(streamHTML)
        
        if type(url2down) == list:
            for i in url2down:
                if i.find("geobloqueo") != -1:
                    printt(u"[!!!] El vídeo \"" + i + "\" no se puedo descargar (geobloqueado)")
                    url2down.remove(i)
                    # TODO: Borrar también su nombre correspondiente
                
            # Comprobar si todas las partes están geobloqueadas (no quedan elementos en la lista):
            if len(url2down) == 0:
                salir(u"[!] No se puede descargar ninguna parte (geobloqueadas)")
        else:
            if url2down.find("geobloqueo") != -1:
                salir(u"[!] El vídeo no se puede descargar (geobloqueado)")

        if type(name) == list:
            for i in name:
                b = formatearNombre(i)
                name[name.index(i)] = b
        else:
            name = formatearNombre(name)
        
        return [url2down , name]
Example #13
0
 def __aGalegaInfo(self):
     """
         return url (mms) y nombre de los vídeos de A galega info de crtgv
     """
     # Creo que lo más recomendable es pedir el código javascript
     # de las WWW de debajo del vídeo
     printt(u"[INFO] A galega info")
     printt(u'El vídeo que intentas descargar pertenece a la sección "A galega Info".')
     printt(u"Para asegurar que se baja el vídeo deseado, haz click con el ratón a las WWW")
     printt(u"que aparecen debajo del vídeo (a la izquierda).")
     printt(u"Copia todo el contenido y pégalo aquí")
     try:
         javascript = raw_input("Pegua aquí: ")
     except KeyboardInterrupt, e:
         salir(u"\nKeyboardInterrupt: Ciao!")
Example #14
0
 def __getHtmlUrlFromAlacarta(self):
     '''
         Dada una URL de A la Carta de RTVV devuelve su URL normal
     '''
     id = self._URL_recibida.split("/")[-1]
     if id.find("#") == -1 or self._URL_recibida.endswith("rtvv.es/va/noualacarta/") or \
                                     self._URL_recibida.endswith("rtvv.es/va/noualacarta"):
         salir(u"[ERROR] Página general de \"A la Carta\". Introducir url específica")
     id = id.replace("#", "")
     printt(u"[INFO] ID:", id)
     frameIDsplit = "<li class=\"scr-item contentId_" + id + "\">"
     printt(u"[INFO] Separador:", frameIDsplit)
     frameID = self.__descHTML(self._URL_recibida).split(frameIDsplit)[1].split("</li>")[0]
     htmlURL = self.URL_RTVV + frameID.split("<a href=\"")[1].split("\"")[0]
     
     return htmlURL
Example #15
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
        '''
        
        streamHTML = self.__descHTML(self._URL_recibida)
        
        if streamHTML.find("http://level3/") != -1: # Método antiguo
            printt(u"[INFO] Método antiguo (mitele)")
            videoID = streamHTML.split("\'http://level3/")[1].split(".")[0]
            videoEXT = streamHTML.split("\'http://level3/")[1].split("\'")[0].split(".")[1]
            videoEXT = "." + videoEXT
            url2down = self.URL_DESCARGA_TELECINCO + videoID[-1] + "/" + videoID[-2] + "/" + videoID + videoEXT
            name = None
        elif streamHTML.find(self.string2split4id[0]) != -1: # Método nuevo
            newID = streamHTML.split(self.string2split4id[0])[1].split(self.string2split4id[1])[0].split(".")[0]
            printt(u"[INFO] Nuevo Video ID:", newID)
            ask4token = self.URL_ASK4TOKEN + newID[-3:] + "/" + newID + ".mp4"
            printt(u"[+] Pidiendo nuevo token")
            url2down = self.__descHTML(ask4token)
            name = streamHTML.split("var title = \'")[1].split("\'")[0] + ".mp4"
        elif self._URL_recibida.find("videoURL="): # Forma con el ID en la URL (nueva??)
            videoID = self._URL_recibida.split("videoURL=")[1]
            ask4token = self.URL_ASK4TOKEN + videoID[-3:] + "/" + videoID + ".mp4"
            printt(u"[+] Pidiendo nuevo token")
            url2down = self.__descHTML(ask4token)
            # Obtner nombre:
            xmlURL = "http://estaticos.telecinco.es/xml/Video/Video_" + videoID + ".xml"
            streamXML = self.__descHTML(xmlURL)
            name = streamXML.split("<![CDATA[")[1].split("]")[0] + ".mp4"
        else:
            salir(u"[!!!] No se encuentra URL de descarga")

        
        if name != None:
            name = formatearNombre(name)
        
        return [url2down, name]
Example #16
0
    def descargarVideo(self):
        '''
            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 cliente debe tener instalado.
        '''
        # Utilizar el binario de rtmpdump si el protocolo es rtmp://
        if type(self._URL) != list and self._URL.startswith("rtmp://"):
            printt(u"")
            printt(u"DESCARGAR:")
            printt(u"----------------------------------------------------------------")
            printt(u"[ URL DE DESCARGA FINAL ]", self._URL)
            printt(u"[   DESTINO   ]", self.outputName)
            printt(u"\n[INFO] Presiona \"Ctrl + C\" para cancelar\n")
            
            rtmpdump = "rtmpdump -o \"" + self.outputName +  "\" -r \"" + self._URL + "\""
            rtmpdump_resume = "rtmpdump --resume -o \"" + self.outputName +  "\" -r \"" + self._URL + "\""
            rtmpdump_win = "rtmpdump.exe -o \"" + self.outputName +  "\" -r \"" + self._URL + "\""
            rtmpdump_resume_win = "rtmpdump.exe --resume -o \"" + self.outputName +  "\" -r \"" + self._URL + "\""

            try:
                if path.isfile(self.outputName):
                    printt(u"Se ha encontrado una descarga parcial anterior, se continúa...\n")
                    printt(u"\nLanzando rtmpdump...\n")
                    if sys.platform == "win32":
                        system(rtmpdump_resume_win)
                    else:
                        system(rtmpdump_resume)
                else:
                    printt(u"\nLanzando rtmpdump...\n")
                    if sys.platform == "win32":
                        system(rtmpdump_win)
                    else:
                        system(rtmpdump)
            except OSError, e:
                printt(u"[!!!] ERROR. No se encuenta rtmpdump:", e)
            except KeyboardInterrupt:
                salir(u"Bye!")
Example #17
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        streamHTML = self.__descHTML(self._URL_recibida)
        if self._URL_recibida.find("audios/") != -1 or self._URL_recibida.find("audioak/") != -1:
            printt(u"[INFO] Audio")
            name = streamHTML.split("<title>")[1].split("<")[0]
            streamMP3 = streamHTML.split("<a id=\"descargaMp3\"")[1].split(">")[0]
            url = self.URL_EITB + streamMP3.split("href=\"")[1].split("\"")[0]
            name += ".mp3"
            
        elif self._URL_recibida.find("videos/") != -1 or self._URL_recibida.find("bideoak/") != -1:
            printt(u"[INFO] Vídeo de %s" % (self._URL_recibida.split("/")[4]))
            name = streamHTML.split("<title>")[1].split("<")[0]
            streamMP4 = streamHTML.split("<a id=\"descargaMp4\"")[1].split(">")[0]
            url = self.URL_EITB + streamMP4.split("href=\"")[1].split("\"")[0]
            name += ".mp4"
        else:
            salir(u"[!!!] No se reconoce el tipo de contenido")
        
        
        if name:
            name = formatearNombre(name)

        return [url, name]
Example #18
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        if self._URL_recibida.find("tv-a-la-carta/") != -1:
            printt(u"[INFO] TV a la carta")
            streamHTML = self.__descHTML(self._URL_recibida).replace(" ", "")
            urlFLV = streamHTML.split("crea_video_hd(\"")[1].split("\"")[0]
            streamFLV = self.__descHTML(urlFLV)
            url = "http://" + streamFLV.split("http://")[1]
            ext = "." + url.split(".")[-1].split("?")[0]
            name = streamHTML.split("<title>")[1].split("<")[0] + ext
        elif self._URL_recibida.find("radio-a-la-carta/") != -1:
            printt(u"[INFO] Radio A la Carta")
            streamHTML = self.__descHTML(self._URL_recibida).replace(" ", "")
            url = streamHTML.split("s1.addVariable(\'file\',\'")[1].split("\'")[0]
            name = streamHTML.split("<title>")[1].split("<")[0] + ".mp3"
        else:
            salir(u"[!!!] No se reconoce el tipo de contenido")
        
        
        if name:
            name = formatearNombre(name)

        return [url, name]
Example #19
0
    def descargar(self):
        '''
            Recoge una url la descarga y lo devuelve
            Pensado para descargar streams HTML y XML
        '''

        if self._URL.find("http://") == -1:
            self._URL = "http://" + self._URL

        try:
            # TVG necesita headers:
            if self._URL.find("crtvg.es/") != -1:
                request = urllib2.Request(self._URL, None, self.std_headers)
                f = urllib2.urlopen(request)
                stream = f.read()
                f.close()
                return stream
            elif self._URL == PdtVersion.URL_VERSION: # Si lo que se descarga es VERSION (convertir a utf-8)
                f = urllib2.urlopen(self._URL)
                Reader = codecs.getreader("utf-8")
                fh = Reader(f)
                stream = fh.read()
                return stream
            else:
                f = urllib2.urlopen(self._URL)
                stream = f.read()
                f.close()
                return stream
        except Exception, e:
            if self._URL.find("rtve.es") != -1: # No salir (para identificar si es a la carta o no)
                return -1
            elif self._URL == PdtVersion.URL_VERSION:
                return -1
            else:
                printt(u"[!!!] ERROR al descargar:", e)
                salir(u"")
Example #20
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        streamHTML = self.__descHTML(self._URL_recibida)
        if self._URL_recibida.find("detail.php?id") != -1: # Aun no es el vídeo
            if streamHTML.find("ShowPreviewMM(\'") != -1:
                url = streamHTML.split("ShowPreviewMM(\'")[1].split("\'")[0]
                name = streamHTML.split("); return false;\">")[1].split("<")[0]
            elif streamHTML.find("onClick=\"ShowPreviewMM(") != -1:
                printt(u"[INFO] Buscando ID del vídeo")
                nuevoID = streamHTML.split("onClick=\"ShowPreviewMM(")[1].split(")")[0]
                printt(u"[INFO] Vídeo ID:", nuevoID)
                name = streamHTML.split("); return false;\">")[1].split("<")[0]
                url, name = self.__paginaDvideo(streamHTML, nuevoID, name)
            elif streamHTML.find("onClick=\"ShowPreviewMM(") != -1:
                pass
            else:
                salir(u"[!!!] No se reconoce el tipo de contenido")
        elif self._URL_recibida.find("mm.php?id") != -1:
            url, name = self.__paginaDvideo(streamHTML)
        elif streamHTML.find("youtube"):
            salir(u"[!!!] No se reconoce el tipo de contenido.\nPuede que el vídeo sea de YouTube??")
        else:
            salir(u"[!!!] No se reconoce el tipo de contenido")
        
        url = url.replace("http://", "mms://")
        ext = "." + url.split(".")[-1]
        if name.find(ext) == -1:
            name += ext.lower()
        
        if name:
            name = formatearNombre(name)

        return [url, name]
Example #21
0
 def __modoSalon(self, streamHTML):
     printt(u"[INFO] Modo Salón")
     if streamHTML.find("so.addVariable(\"xml\"") != -1:
         streamXML = \
         self.__descXML(self.URL_DE_ANTENA3 + streamHTML.split("so.addVariable(\"xml\",\"")[1].split("\"")[0])
     elif streamHTML.find("player_capitulo.xml='") != -1:
         streamXML = \
         self.__descXML(self.URL_DE_ANTENA3 + streamHTML.split("player_capitulo.xml='")[1].split("'")[0])
     else:
         salir(u"[!!!] ERROR No se encuentra el XML")
     # Comprobar aquí si se puede descargar 000.mp4:
     if streamXML.find(".mp4") != -1:
         url2down1 = self.URL_DE_DESCARGA + \
             streamXML.split("<archivo><![CDATA[")[1].split("001.mp4]]></archivo>")[0] + "000.mp4"
     elif streamXML.find(".f4v") != -1:
         [url2down, name] = self.__modoSalonNuevo(streamXML)
         return [url2down, name]
     else:
         salir(u"[!!!] ERROR: No se encuentra vídeos mp4 o f4v")
     try: # Descargar entero
         urllib2.urlopen(url2down1)
         url2down = url2down1
         name = streamXML.split("<nombre><![CDATA[")[1].split("]]>")[0] + ".mp4"
     except urllib2.HTTPError: # Descargar por partes:
         printt(u"[!!!]  No se puede descargar el vídeo en un archivo (000.mp4)")
         printt(u"[INFO] El vídeo se descargará por partes")
         parts = re.findall("\<archivo\>\<\!\[CDATA\[.*\.mp4\]\]\>\<\/archivo\>", streamXML)
         if parts:
             name1 = streamXML.split("<nombre><![CDATA[")[1].split("]]>")[0]
             url2down = []
             name = []
             for i in parts:
                 url2down.append(self.URL_DE_DESCARGA + i.split("<archivo><![CDATA[")[1].split("]]></archivo>")[0])
                 name.append(name1 + "_" + i.split("]")[0].split("/")[-1])
         else:
             salir(u"[!!!] ERROR: No se encuentran las partes del vídeo")
     
     return [url2down,  name]
Example #22
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        streamHTML = self.__descHTML(self._URL_recibida)
        if streamHTML.find("_urlVideo=") != -1: # Vídeo en un sola parte
            codURL = streamHTML.split("_urlVideo=")[1].split("&")[0]
            url = self.__showURL(codURL)
            url = url.replace(" ", "%20")
            #print url
            url = url.replace("/mp4:", "/")
            url = url.replace("/flv:", "/")
            url = url.replace("/_definst_/", "/")
            url = url.replace("/manifest.f4m", "")
            url = url.replace("http://lasextavod-f.akamaihd.net/z/", "rtmp://vod.lasexta.com/vod/")
            name = streamHTML.split("<title>")[1].split("<")[0]
            if url.find("?start=") != -1: ext="." + url.split("?start=")[0].split(".")[-1]
            else: ext= "." + url.split(".")[-1]
            name += ext
        elif streamHTML.find("_url_list=") != -1: # Vídeo en varias partes
            name1 = streamHTML.split("<title>")[1].split("<")[0]
            codURL1 = streamHTML.split("_url_list=")[1].split("&")[0]
            url1 = self.__showURL(codURL1)
            streamHTML = self.__descHTML(url1)
            
            codURL2 = []
            urls =  streamHTML.strip().split("<title>")[1:]
            
            for i in urls:
                if i.find("<urlHD>"):
                    opc = None
                    while (opc != 's' and opc != 'n'):
                        opc = raw_input("[???] Se descarga en HD. Prefieres SD (s/n): ")
                    opc = False if opc == 's' else True
                    break
            
            for i in urls:
                #name2.append(i.split("<")[0])
                if i.find("<urlHD>") != -1:
                    if opc:
                        codURL2.append(i.split("<urlHD>")[1].split("<")[0])
                    else:
                        codURL2.append(i.split("<url>")[1].split("<")[0])
                else:
                    codURL2.append(i.split("<url>")[1].split("<")[0])
            
            url = []
            name = []
            b = 1
            for i in codURL2:
                #if i.find("rtmp://") != -1:
                #    tmp = i
                #else:
                #    tmp = self.__showURL(i)
                tmp = i
                try:
                    tmp = self.__showURL(i)
                except:
                    pass
                tmp = tmp.replace("/mp4:", "/")
                tmp = tmp.replace("/flv:", "/")
                tmp = tmp.replace("/_definst_/", "/")
                tmp = tmp.replace("/manifest.f4m", "")
                tmp = tmp.replace("http://lasextavod-f.akamaihd.net/z/", "rtmp://vod.lasexta.com/vod/")
                url.append(tmp)
                
                if tmp.find("?start=") != -1: ext="." + tmp.split("?start=")[0].split(".")[-1]
                else: ext= "." + tmp.split(".")[-1]
                name.append(name1 + "_part0" + str(b) + ext)
                b += 1
            del b
        elif streamHTML.find("_id_list=") != -1:
            id = streamHTML.split("_id_list=")[1].split("&")[0]
            sPlayList = self.__descHTML(self.URL_PLAYLIST + id)
            partes = sPlayList.split("<video>")[1:]
            url = []
            name = []
            for i in partes:
                tmpURL = i.split("<url>")[1].split("<")[0]
                ext = "." + tmpURL.split(".")[-1]
                tmpURL = tmpURL.replace("/mp4:", "/")
                tmpURL = tmpURL.replace("/flv:", "/")
                tmpURL = tmpURL.replace("/_definst_/", "/")
                tmpURL = tmpURL.replace("/manifest.f4m", "")
                tmpURL = tmpURL.replace("http://lasextavod-f.akamaihd.net/z/", "rtmp://vod.lasexta.com/vod/")
                url.append(tmpURL)
                name.append(i.split("<title>")[1].split("<")[0].capitalize() + ext)
        else:
            salir(u"[!!!] ERROR: No se ha encontrado el vídeo")
        
        # Cambiar a HTTP y ver si existe el vídeo:
        # En listas se presupone que si funciona la primera parte funcionan todas..
        tmp = url[0] if type(url) is list else url
        tmp = tmp.replace("rtmp://vod.lasexta.com/vod/", "http://descarga.lasexta.com/")
        try:
            urllib2.urlopen(tmp)
        except urllib2.HTTPError, e:
            pass
Example #23
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
        '''
        # Primero: nos quedamos con le id dependiendo si el user metio la url con
        # una barra (/) final o no y si tiene extensión (no es alacarta)
        videoID = self._URL_recibida.split('/')[-1]
        if videoID == "":
            videoID = self._URL_recibida.split('/')[-2]
        elif videoID.find(".shtml") != -1 or videoID.find(".html") != -1 or \
            videoID.find(".html") != -1:
            videoID = videoID.split('.')[0]
        
        
        printt(u"[INFO] ID del Vídeo :", videoID)
        xmlURL = "www.rtve.es/swf/data/es/videos/video/" + videoID[-1] \
                + "/" + videoID[-2] + "/" + videoID[-3] \
                + "/" + videoID[-4] + "/" + videoID + ".xml"
        printt(u"[INFO] Url de xml   :", xmlURL)
        #print "[+] Procesando Descarga"

        sourceXML = self.__descXML(xmlURL)
        if sourceXML == -1:    # Comprobar si existe (No es tve a la carta)
            sourceHTML = self.__descHTML(self._URL_recibida)
            if sourceHTML.find("<div id=\"video") != -1:
                id = sourceHTML.split("<div id=\"video")[1].split("\"")[0]
            elif sourceHTML.find("<div id=\"vid") != -1:
                id = sourceHTML.split("<div id=\"vid")[1].split("\"")[0]
            else:
                salir(u"[!] ERROR al generear el nuevo id")
            xmlURL = "www.rtve.es/swf/data/es/videos/video/" + id[-1] \
                + "/" + id[-2] + "/" + id[-3] \
                + "/" + id[-4] + "/" + id + ".xml"
            sourceXML = self.__descXML(xmlURL)
            printt(u"[INFO] Nuevo vídeo ID:",  id)
            printt(u"[INFO] Nuevo url de xml:", xmlURL)  
            

        # Ahora la url final del video puede estar entre las etiquetas <file></file>
        # o puede que tengamos que dar un rodeo
        if sourceXML.find("<file>") != -1 and sourceXML.find("</file>"): # Contiene la URL
            urlVideo = sourceXML.split("<file>")[1].split("</file>")[0]
        elif sourceXML.find("assetDataId::") != -1: # Dar el rodeo
            idAsset = sourceXML.split("assetDataId::")[1].split("\"/>")[0]
            urlXMLasset = "www.rtve.es/scd/CONTENTS/ASSET_DATA_VIDEO/" + idAsset[-1] \
                        + "/" + idAsset[-2] + "/" + idAsset[-3] \
                        + "/" + idAsset[-4] + "/ASSET_DATA_VIDEO-" + idAsset + ".xml"
            sourceAssetXML = self.__descXML(urlXMLasset)
            urlInSourceAssetXML = sourceAssetXML.split("defaultLocation=\"")[1].split("\"")[0]
            #print "urllInSourceAssetXML =", urlInSourceAssetXML

            # Es flv o mp4?
            if urlInSourceAssetXML.find("/flv/") != -1:
                urlVideo = "http://www.rtve.es/resources/TE_NGVA/flv/" \
                        + urlInSourceAssetXML.split("/flv/")[1]
            elif urlInSourceAssetXML.find("/mp4/") != -1:
                urlVideo = "http://www.rtve.es/resources/TE_NGVA/mp4/" \
                        + urlInSourceAssetXML.split("/mp4/")[1]
            else:
                salir(u"Vídeo no encontrado")
            
            
        else:
            salir(u"No se encuentra la URL del vídeo")

        # Nombre con el que se guardará la descarga:
        extension = '.' + urlVideo.split('.')[-1]
        name =  sourceXML.split("<name>")[1].split("</name")[0] + extension
        name = formatearNombre(name)

        return [urlVideo, name]
Example #24
0
    def descargarVideoWindows(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.
        '''
        url = self._URL
        name = nombre if nombre != None else self._URL.split('/')[-1]
        
        printt(u"")
        printt(u"DESCARGAR:")
        printt(u"----------------------------------------------------------------")

        if type(self._URL) == list:
            b=1
            for i in self._URL:
                printt(u"[ URL DE DESCARGA FINAL ] [Parte %d] %s" % (b, i))
                b += 1
        else:
            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))
                            
        #######
                            
        if type(self._URL) == list:
            printt(u"[?] Quieres descargar todas las partes? [s/n]:")
            opc = ""
            while opc != "s" and opc != "n":
                opc = raw_input()
                if opc is not "s" or opc is not "n":
                    printt(u"[!!!] [s/n]")
            
            if opc is "s":
                for i in range(0, len(self._URL)):
                    printt(u"[Descargando %d parte]" % (int(i) + 1))
                    printt(u"[Destino]", name[i])
                    try:
                        urllib.urlretrieve(url[i], name[i], reporthook=estadodescarga)
                        print ""
                    #except KeyboardInterrupt:
                    #    sys.exit("\nCiao!")
                    except:
                        pass
                    print "\n"
            elif opc is "n":
                printt(u"\n[?] Qué partes quieres descargar?")
                printt(u"[INFO] Puedes introducir varias partes separadas por comas")
                
                ERROR = True
                while ERROR is True: 
                    ERROR = False
                    printt(u"[INFO] Partes:")
                    b = 1
                    for i in range(0, len(self._URL)):
                        printt(u"[Parte %s] %s" % (str(b), self._URL[i]))
                        b += 1
                    del b
                    printt(u"[?] --> ")
                    partes = raw_input()
                    partes = partes.split(",")
                    for i in partes:
                        if not i.isdigit():
                            printt(u"[!!!] ERROR. No se reconoce la parte \"%s\"" % i)
                            ERROR = True
                            break
                        if int(i) < 1 or int(i) > len(self._URL):
                            printt(u"[!!!] ERROR. La parte \"%s\" no existe" % int(i))
                            ERROR = True
                            break
                            
                printt(u"[OK] Se descargarán las partes")
                for i in partes:
                    printt(u"[Descargando %d parte]" % (int(i)))
                    printt(u"[Destino]", name[int(i)-1])
                    try:
                        urllib.urlretrieve(url[int(i)-1], name[int(i)-1], reporthook=estadodescarga)
                        print ""
                    #except KeyboardInterrupt:
                    #    sys.exit("\nCiao!")
                    except:
                        pass
                    print "\n"
        else:
            try:
                printt(u"[Destino]", name)
                urllib.urlretrieve(url, name, reporthook=estadodescarga)
                print ""
            except KeyboardInterrupt:
                salir("\nCiao!")
Example #25
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
            
            Tanto "ruta_url" como "nombre" pueden ser listas (por supuesto, el nombre del ruta_url[0]
            tiene que ser nombre[0] y así sucesivamente).
        '''
        
        streamHTML = self.__descHTML(self._URL_recibida)
        if streamHTML.find("_urlVideo=") != -1: # Vídeo en un sola parte
            codURL = streamHTML.split("_urlVideo=")[1].split("&")[0]
            url = self.__showURL(codURL)
            name = streamHTML.split("<title>")[1].split("<")[0]
            if url.find("?start=") != -1: ext="." + url.split("?start=")[0].split(".")[-1]
            else: ext= "." + url.split(".")[-1]
            name += ext
        elif streamHTML.find("_url_list=") != -1: # Vídeo en varias partes
            name1 = streamHTML.split("<title>")[1].split("<")[0]
            codURL1 = streamHTML.split("_url_list=")[1].split("&")[0]
            url1 = self.__showURL(codURL1)
            streamHTML = self.__descHTML(url1)
            
            codURL2 = []
            urls =  streamHTML.strip().split("<title>")[1:]
            for i in urls:
                #name2.append(i.split("<")[0])
                codURL2.append(i.split("<url>")[1].split("<")[0])
            
            url = []
            name = []
            b = 1
            for i in codURL2:
                tmp = self.__showURL(i)
                url.append(tmp)
                
                if tmp.find("?start=") != -1: ext="." + tmp.split("?start=")[0].split(".")[-1]
                else: ext= "." + tmp.split(".")[-1]
                name.append(name1 + "_part0" + str(b) + ext)
                b += 1
            del b
        elif streamHTML.find("_id_list=") != -1:
            id = streamHTML.split("_id_list=")[1].split("&")[0]
            sPlayList = self.__descHTML(self.URL_PLAYLIST + id)
            partes = sPlayList.split("<video>")[1:]
            url = []
            name = []
            for i in partes:
                tmpURL = i.split("<url>")[1].split("<")[0]
                ext = "." + tmpURL.split(".")[-1]
                if tmpURL.find("/mp4:") != -1: tmpURL = tmpURL.replace("/mp4:", "/")
                if tmpURL.find("/flv:") != -1: tmpURL = tmpURL.replace("/flv:", "/")
                url.append(tmpURL)
                name.append(i.split("<title>")[1].split("<")[0].capitalize() + ext)
        else:
            salir(u"[!!!] ERROR: No se ha encontrado el vídeo")
        
        if type(name) is list:
            for i in name:
                b = formatearNombre(i)
                name[name.index(i)] = b
        else:
            name = formatearNombre(name)
            
        return [url, name]
Example #26
0
                 printt(u"Se ha encontrado una descarga parcial anterior, se continúa...\n")
                 printt(u"\nLanzando rtmpdump...\n")
                 if sys.platform == "win32":
                     system(rtmpdump_resume_win)
                 else:
                     system(rtmpdump_resume)
             else:
                 printt(u"\nLanzando rtmpdump...\n")
                 if sys.platform == "win32":
                     system(rtmpdump_win)
                 else:
                     system(rtmpdump)
         except OSError, e:
             printt(u"[!!!] ERROR. No se encuenta rtmpdump:", e)
         except KeyboardInterrupt:
             salir(u"Bye!")
             
             print "\n"
 elif opc is "n":
     printt(u"\n[?] Qué partes quieres descargar?")
     printt(u"[INFO] Puedes introducir varias partes separadas por comas")
     
     ERROR = True
     while ERROR is True: 
         ERROR = False
         printt(u"[INFO] Partes:")
         b = 1
         for i in range(0, len(self._URL)):
             printt(u"[Parte %s] %s" % (str(b), self._URL[i]))
             b += 1
         del b
Example #27
0
    def procesarDescarga(self):
        '''
            Procesa lo necesario para obtener la url final del vídeo a descargar y devuelve
            esta y el nombre como se quiere que se descarge el archivo de la siguiente forma:
            return [ruta_url, nombre]

            Si no se quiere especificar un nombre para el archivo resultante en disco, o no se
            conoce un procedimiento para obtener este automáticamente se utilizará:
            return [ruta_url, None]
            Y el método de Descargar que descarga utilizará el nombre por defecto según la url.
        '''
        # Primero: nos quedamos con le id dependiendo si el user metio la url con
        # una barra (/) final o no y si tiene extensión (no es alacarta)
        videoID = self._URL_recibida.split('/')[-1]
        if videoID == "":
            videoID = self._URL_recibida.split('/')[-2]
        elif videoID.find(".shtml") != -1 or videoID.find(".html") != -1 or \
            videoID.find(".html") != -1:
            videoID = videoID.split('.')[0]
        
        # Añadido para vídeos nuevos (periodo de prueba):
        sourceHTML = self.__descHTML(self._URL_recibida)
        if sourceHTML.find("flashcontentId:\'videoplayer") != -1:
            videoID_comp = sourceHTML.split("flashcontentId:\'videoplayer")[1].split("\'")[0]
            if videoID_comp != videoID: videoID = videoID_comp
        if sourceHTML.find("<div id=\"video") != -1:
            videoID_comp = sourceHTML.split("<div id=\"video")[1].split("\"")[0]
            if videoID_comp != videoID: videoID = videoID_comp
        ########################################################
        
        
        printt(u"[INFO] ID del Vídeo :", videoID)
        
        #Primero probar nuevo método:
        url = self.__ztnr(videoID)
        #print "URL:",url
        if url != "http://www.rtve.es/resources/.mp4" or url != url != "http://www.rtve.es/resources/.flv":
            name = sourceHTML.split("<title>")[1].split("</")[0] + ".mp4"
            name = formatearNombre(name)
            return [url, name]
            
        xmlURL = "www.rtve.es/swf/data/es/videos/video/" + videoID[-1] \
                + "/" + videoID[-2] + "/" + videoID[-3] \
                + "/" + videoID[-4] + "/" + videoID + ".xml"
        printt(u"[INFO] Url de xml   :", xmlURL)
        
        # Este bloque o debería de entrar si funciona el bloque de prueba:
        sourceXML = self.__descXML(xmlURL)
        if sourceXML == -1:    # Comprobar si existe (No es tve a la carta)
            sourceHTML = self.__descHTML(self._URL_recibida)
            if sourceHTML.find("<div id=\"video") != -1:
                id = sourceHTML.split("<div id=\"video")[1].split("\"")[0]
            elif sourceHTML.find("<div id=\"vid") != -1:
                id = sourceHTML.split("<div id=\"vid")[1].split("\"")[0]
            else:
                salir(u"[!] ERROR al generear el nuevo id")
            
            xmlURL = "www.rtve.es/swf/data/es/videos/video/" + id[-1] \
                + "/" + id[-2] + "/" + id[-3] \
                + "/" + id[-4] + "/" + id + ".xml"
            sourceXML = self.__descXML(xmlURL)
            printt(u"[INFO] Nuevo vídeo ID:",  id)
            printt(u"[INFO] Nuevo url de xml:", xmlURL)  
        
            

        # Ahora la url final del video puede estar entre las etiquetas <file></file>
        # o puede que tengamos que dar un rodeo
        if sourceXML.find("<file>") != -1 and sourceXML.find("</file>") != -1: # Contiene la URL
            urlVideo = sourceXML.split("<file>")[1].split("</file>")[0]
        elif sourceXML.find("assetDataId::") != -1: # Dar el rodeo
            idAsset = sourceXML.split("assetDataId::")[1].split("\"/>")[0]
            urlXMLasset = "www.rtve.es/scd/CONTENTS/ASSET_DATA_VIDEO/" + idAsset[-1] \
                        + "/" + idAsset[-2] + "/" + idAsset[-3] \
                        + "/" + idAsset[-4] + "/ASSET_DATA_VIDEO-" + idAsset + ".xml"
            sourceAssetXML = self.__descXML(urlXMLasset)
            try:
                urlInSourceAssetXML = sourceAssetXML.split("defaultLocation=\"")[1].split("\"")[0]
            except AttributeError:
                urlInSourceAssetXML = "retrochapuza"
                url = self.__getUrlIpad()
                if url == "ERROR": # Buscar vídeo en A la Carta
                    try:
                        self._URL_recibida = sourceXML.split("<url>")[1].split("<")[0]
                    except:
                        printt(u"[!!!] No he encontrado el vídeo :(")
                        salir(u"")
                    url = self.__getUrlIpad()
                sourceHTML = self.__descHTML(url)
                urlVideo = "http://www.rtve.es" + sourceHTML.split(".mp4")[0].split("urlContent=")[1] + ".mp4" 
                # Probar esta url (obtener nueva url, necesario para el script!!):
                u = urllib2.urlopen(urlVideo)
                meta = u.info()
                file_size = int(meta.getheaders("Content-Length")[0])
                if file_size == 0:
                    urlVideo = meta.getheaders("Location")[0]
                u.close()
                
                
            #print "urllInSourceAssetXML =", urlInSourceAssetXML

            # Es flv o mp4?
            if urlInSourceAssetXML.find("/flv/") != -1:
                urlVideo = "http://www.rtve.es/resources/TE_NGVA/flv/" \
                        + urlInSourceAssetXML.split("/flv/")[1]
            elif urlInSourceAssetXML.find("/mp4/") != -1:
                urlVideo = "http://www.rtve.es/resources/TE_NGVA/mp4/" \
                        + urlInSourceAssetXML.split("/mp4/")[1]
            elif urlInSourceAssetXML == "retrochapuza": pass
            else:
                salir(u"Vídeo no encontrado")
            
            
        else:
            salir(u"No se encuentra la URL del vídeo")

        # Nombre con el que se guardará la descarga:
        extension = '.' + urlVideo.split('.')[-1]
        name =  sourceXML.split("<name>")[1].split("</name")[0] + extension
        name = formatearNombre(name)

        return [urlVideo, name]
Example #28
0
 def __init__(self, url=None):
     self._outputName = None
     self._URL = url
     if self._URL == None:
         salir(u"ERROR: No se puede descargar la url")