Beispiel #1
0
    def getInfo(self):
        '''
            Devuelve toda la información asociada a la URL recibida, de la siguiente forma:
            {
             "exito"     : bool,  <-- True (si se han obtenido videos)
             "num_video" : int,   <-- Número de vídeos obtenidos
             "mensaje"   : u"" ,  <-- Mensajes de la API (ej.: El vídeo no ha sido encontrado ["exito": False])
             "videos"    :  [{
                            "url_video" : [],   <-- Url de descarga de vídeo
                            "url_img"   : "",   <-- Url de la miniatura del video
                            "filename"  : [],   <-- Nombre de las partes para guardar en disco
                            "tipo"      : "",   <-- http, rtmp[e,..], mms, ...
                            "partes"    : int,  <-- Número de partes que tiene el vídeo
                            "rtmpd_cmd" : [],   <-- Comando rtmpdump (si tipo == rtmp) sino None
                            "menco_cmd" : [],   <-- Comando mencoder (Si tipo == rtmp) sino None
                            "url_publi" : "",   <-- Url del vídeo de publicidad asociado al vídeo
                            "otros"     : [],   <-- Lista donde se pueden pasar cosas opcionales
                            "mensaje"   : ""    <-- Mensajes de la API
                            }], <-- Debe ser una lista de tamaño "num_videos"
             "titulos"   : [u""], <-- Titulos de los videos
             "descs"     : [u""] <-- Descripción de cada vídeo
            }
            
            Los valores que no se rellenen, deberán devolver None.
            La clave "exito" es obligatoria, sino se puede encontrar el vídeo se puede devolver directamente:
            {
            "exito": False,
            "mensaje": "No se pudo descargar el video"  
            }
            
            "videos", "mesajes" y "descs" deben ser listas de cadenas (si no son None)
            "url_video", "filename", "rtmp_cmd", "menco_cmd" (de "videos") deben ser listas de cadenas (si no son None)
        '''
        
        html = Descargar.get(self.url)

        #Por ahora solo soportados para brightcove:
        if not re.findall("ORIGEN[ \=\"\']*([a-zA-Z]*)[ \"\']*;", html)[0] == "bc":
            raise Error.GeneralPyspainTVsError(u'Tipo de vídeo aun no soportado para ABC. Por favor, comunica la incidencia.')

        self.Publisher_ID = re.findall("publisherID=([0-9]*)", html)[0]
        self.Player_ID = re.findall("playerID=([0-9]*)", html)[0]
        VideoPlayer = re.findall("RUTA_VIDEO[ \=\"\']*([0-9]*)[ \"\']*;", html)[0]

        info = self.__get_info(VideoPlayer)
        self.debug(u"info:",info)
        #TODO: Soltar todos los vídeos con las distintas calidades, ahora está solo la de mayor
        big = 0
        for video in info['renditions']:
            if video['encodingRate'] >= big:
                big = video['encodingRate']
                url = video['defaultURL']
        ext = "." + url.split(".")[-1]
        
        try: img = info['videoStillURL']
        except: img = None
        
        desc = None
        try: desc1 = info['longDescription'].encode('utf8') if info['longDescription'] is not None else None
        except: pass
        try: desc2 = info['shortDescription'].encode('utf8') if info['shortDescription'] is not None else None
        except: pass
        try:
            if desc1 is not None: desc = desc1
            else:
                if desc2 is not None: desc = desc2
        except: desc = u"Vídeo de ABC".encode('utf8')
        else:
            if desc is None: desc = u"Vídeo de ABC".encode('utf8')
            else:
                if type(desc) is unicode:
                    if desc == u"": desc = u"Vídeo de ABC".encode('utf8')
                elif type(desc) is str:
                    if desc == "": desc = u"Vídeo de ABC".encode('utf8')
        
        tit = None   
        try: tit = info['displayName'].encode('utf8')
        except: tit = u"Vídeo de ABC".encode('utf8')
        else:
            if tit is None: tit = u"Vídeo de ABC".encode('utf8')
            if type(tit) is unicode:
                if tit == u"": tit = u"Vídeo de ABC".encode('utf8')
            elif type(tit) is str:
                if tit == "": tit = u"Vídeo de ABC".encode('utf8')
        
        #FIXME: Ver qué pasa aquí!! --> name = Utiles.formatearNombre(tit + ext)
        try:
            name = Utiles.formatearNombre2(tit+ext)
        except:
            name = "VideoABC"+ext
        
        # Parece que NO funciona lo siguiente para ABC, solo para Telemadrid
        #url = "/".join(img.split("/")[:3])+"/"+"/".join(url.split("/")[3:])
        rtmpd_cmd = "rtmpdump -r '"+url.replace("&mp4:","mp4/")+"' -o '"+name+"'"

        
        return {"exito" : True,
                "num_videos" : 1,
                "mensaje"   : u"URL obtenido correctamente",
                "videos":[{
                        "url_video" : [url.replace("&mp4:","mp4/")],
                        "url_img"   : img if img is not None else None,
                        "filename"  : [name] if name is not None else None,
                        "tipo"      : "rtmp",
                        "partes"    : 1,
                        "rtmpd_cmd" : [rtmpd_cmd],
                        "menco_cmd" : None,
                        "url_publi" : None,
                        "otros"     : None,
                        "mensaje"   : None
                        }],
                "titulos": [tit] if tit is not None else None,
                "descs": [desc] if desc is not None else None
                }
Beispiel #2
0
 def getInfo(self):
     '''
         Devuelve toda la información asociada a la URL recibida, de la siguiente forma:
         {
          "exito"     : bool,  <-- True (si se han obtenido videos)
          "num_video" : int,   <-- Número de vídeos obtenidos
          "mensaje"   : u"" ,  <-- Mensajes de la API (ej.: El vídeo no ha sido encontrado ["exito": False])
          "videos"    :  [{
                         "url_video" : [],   <-- Url de descarga de vídeo
                         "url_img"   : "",   <-- Url de la miniatura del video
                         "filename"  : [],   <-- Nombre de las partes para guardar en disco
                         "tipo"      : "",   <-- http, rtmp[e,..], mms, ...
                         "partes"    : int,  <-- Número de partes que tiene el vídeo
                         "rtmpd_cmd" : [],   <-- Comando rtmpdump (si tipo == rtmp) sino None
                         "menco_cmd" : [],   <-- Comando mencoder (Si tipo == rtmp) sino None
                         "url_publi" : "",   <-- Url del vídeo de publicidad asociado al vídeo
                         "otros"     : [],   <-- Lista donde se pueden pasar cosas opcionales
                         "mensaje"   : ""    <-- Mensajes de la API
                         }], <-- Debe ser una lista de tamaño "num_videos"
          "titulos"   : [u""], <-- Titulos de los videos
          "descs"     : [u""] <-- Descripción de cada vídeo
         }
         
         Los valores que no se rellenen, deberán devolver None.
         La clave "exito" es obligatoria, sino se puede encontrar el vídeo se puede devolver directamente:
         {
         "exito": False,
         "mensaje": "No se pudo descargar el video"  
         }
         
         "videos", "mesajes" y "descs" deben ser listas de cadenas (si no son None)
         "url_video", "filename", "rtmp_cmd", "menco_cmd" (de "videos") deben ser listas de cadenas (si no son None)
     '''
     
     html = Descargar.get(self.url)
     # NO BORRAR, ver FIXME abajo --> name = html.split("<meta name=\"dc.title\" content=\"")[1].split("\"")[0]
     VideoPlayer = html.split("<param name=\"@videoPlayer\" value=\"")[1].split("\"")[0]
     info = self.__get_info(VideoPlayer)
     self.debug(u"info:",info)
     
     #TODO: Soltar todos los vídeos con las distintas calidades, ahora está solo la de mayor
     big = 0
     for video in info['renditions']:
         if video['encodingRate'] >= big:
             big = video['encodingRate']
             url = video['defaultURL']
     ext = "." + url.split(".")[-1]
     
     try: img = info['videoStillURL']
     except: img = None
     
     desc = None
     try: desc1 = info['longDescription'].encode('utf8') if info['longDescription'] is not None else None
     except: pass
     try: desc2 = info['shortDescription'].encode('utf8') if info['shortDescription'] is not None else None
     except: pass
     try:
         if desc1 is not None: desc = desc1
         else:
             if desc2 is not None: desc = desc2
     except: desc = u"Vídeo de Telemadrid".encode('utf8')
     else:
         if desc is None: desc = u"Vídeo de Telemadrid".encode('utf8')
         else:
             if type(desc) is unicode:
                 if desc == u"": desc = u"Vídeo de Telemadrid".encode('utf8')
             elif type(desc) is str:
                 if desc == "": desc = u"Vídeo de Telemadrid".encode('utf8')
     
     tit = None   
     try: tit = info['displayName'].encode('utf8')
     except: tit = u"Vídeo de Telemadrid".encode('utf8')
     else:
         if tit is None: tit = u"Vídeo de Telemadrid".encode('utf8')
         if type(tit) is unicode:
             if tit == u"": tit = u"Vídeo de Telemadrid".encode('utf8')
         elif type(tit) is str:
             if tit == "": tit = u"Vídeo de Telemadrid".encode('utf8')
     
     #FIXME: Ver qué pasa aquí!! --> name = Utiles.formatearNombre(tit + ext)
     try:
         name = Utiles.formatearNombre2(tit+ext)
     except:
         name = "VideoTelemadrid"+ext
     
     url = "/".join(img.split("/")[:3])+"/"+"/".join(url.split("/")[3:])
     
     return {"exito" : True,
             "num_videos" : 1,
             "mensaje"   : u"URL obtenido correctamente",
             "videos":[{
                     "url_video" : [url],
                     "url_img"   : img if img is not None else None,
                     "filename"  : [name] if name is not None else None,
                     "tipo"      : "http",
                     "partes"    : 1,
                     "rtmpd_cmd" : None,
                     "menco_cmd" : None,
                     "url_publi" : None,
                     "otros"     : None,
                     "mensaje"   : None
                     }],
             "titulos": [tit] if tit is not None else None,
             "descs": [desc] if desc is not None else None
             }
Beispiel #3
0
    def getInfo(self):
        '''
            Devuelve toda la información asociada a la URL recibida, de la siguiente forma:
            {
             "exito"     : bool,  <-- True (si se han obtenido videos)
             "num_video" : int,   <-- Número de vídeos obtenidos
             "mensaje"   : u"" ,  <-- Mensajes de la API (ej.: El vídeo no ha sido encontrado ["exito": False])
             "videos"    :  [{
                            "url_video" : [],   <-- Url de descarga de vídeo
                            "url_img"   : "",   <-- Url de la miniatura del video
                            "filename"  : [],   <-- Nombre de las partes para guardar en disco
                            "tipo"      : "",   <-- http, rtmp[e,..], mms, ...
                            "partes"    : int,  <-- Número de partes que tiene el vídeo
                            "rtmpd_cmd" : [],   <-- Comando rtmpdump (si tipo == rtmp) sino None
                            "menco_cmd" : [],   <-- Comando mencoder (Si tipo == rtmp) sino None
                            "url_publi" : "",   <-- Url del vídeo de publicidad asociado al vídeo
                            "otros"     : [],   <-- Lista donde se pueden pasar cosas opcionales
                            "mensaje"   : ""    <-- Mensajes de la API
                            }], <-- Debe ser una lista de tamaño "num_videos"
             "titulos"   : [u""], <-- Titulos de los videos
             "descs"     : [u""] <-- Descripción de cada vídeo
            }
            
            Los valores que no se rellenen, deberán devolver None.
            La clave "exito" es obligatoria, sino se puede encontrar el vídeo se puede devolver directamente:
            {
            "exito": False,
            "mensaje": "No se pudo descargar el video"  
            }
            
            "videos", "mesajes" y "descs" deben ser listas de cadenas (si no son None)
            "url_video", "filename", "rtmp_cmd", "menco_cmd" (de "videos") deben ser listas de cadenas (si no son None)
        '''

        html = Descargar.get(self.url)
        # NO BORRAR, ver FIXME abajo --> name = html.split("<meta name=\"dc.title\" content=\"")[1].split("\"")[0]
        VideoPlayer = html.split(
            "<param name=\"@videoPlayer\" value=\"")[1].split("\"")[0]
        info = self.__get_info(VideoPlayer)
        self.debug(u"info:", info)

        #TODO: Soltar todos los vídeos con las distintas calidades, ahora está solo la de mayor
        big = 0
        for video in info['renditions']:
            if video['encodingRate'] >= big:
                big = video['encodingRate']
                url = video['defaultURL']
        ext = "." + url.split(".")[-1]

        try:
            img = info['videoStillURL']
        except:
            img = None

        desc = None
        try:
            desc1 = info['longDescription'].encode(
                'utf8') if info['longDescription'] is not None else None
        except:
            pass
        try:
            desc2 = info['shortDescription'].encode(
                'utf8') if info['shortDescription'] is not None else None
        except:
            pass
        try:
            if desc1 is not None: desc = desc1
            else:
                if desc2 is not None: desc = desc2
        except:
            desc = u"Vídeo de Telemadrid".encode('utf8')
        else:
            if desc is None: desc = u"Vídeo de Telemadrid".encode('utf8')
            else:
                if type(desc) is unicode:
                    if desc == u"":
                        desc = u"Vídeo de Telemadrid".encode('utf8')
                elif type(desc) is str:
                    if desc == "": desc = u"Vídeo de Telemadrid".encode('utf8')

        tit = None
        try:
            tit = info['displayName'].encode('utf8')
        except:
            tit = u"Vídeo de Telemadrid".encode('utf8')
        else:
            if tit is None: tit = u"Vídeo de Telemadrid".encode('utf8')
            if type(tit) is unicode:
                if tit == u"": tit = u"Vídeo de Telemadrid".encode('utf8')
            elif type(tit) is str:
                if tit == "": tit = u"Vídeo de Telemadrid".encode('utf8')

        #FIXME: Ver qué pasa aquí!! --> name = Utiles.formatearNombre(tit + ext)
        try:
            name = Utiles.formatearNombre2(tit + ext)
        except:
            name = "VideoTelemadrid" + ext

        #url = "/".join(img.split("/")[:3])+"/"+"/".join(url.split("/")[3:])
        url += "?v=&fp=&r=&g="

        return {
            "exito":
            True,
            "num_videos":
            1,
            "mensaje":
            u"URL obtenido correctamente",
            "videos": [{
                "url_video": [url],
                "url_img": img if img is not None else None,
                "filename": [name] if name is not None else None,
                "tipo": "http",
                "partes": 1,
                "rtmpd_cmd": None,
                "menco_cmd": None,
                "url_publi": None,
                "otros": None,
                "mensaje": None
            }],
            "titulos": [tit] if tit is not None else None,
            "descs": [desc] if desc is not None else None
        }
Beispiel #4
0
    def getInfo(self):
        '''
            Devuelve toda la información asociada a la URL recibida, de la siguiente forma:
            {
             "exito"     : bool,  <-- True (si se han obtenido videos)
             "num_video" : int,   <-- Número de vídeos obtenidos
             "mensaje"   : u"" ,  <-- Mensajes de la API (ej.: El vídeo no ha sido encontrado ["exito": False])
             "videos"    :  [{
                            "url_video" : [],   <-- Url de descarga de vídeo
                            "url_img"   : "",   <-- Url de la miniatura del video
                            "filename"  : [],   <-- Nombre de las partes para guardar en disco
                            "tipo"      : "",   <-- http, rtmp[e,..], mms, ...
                            "partes"    : int,  <-- Número de partes que tiene el vídeo
                            "rtmpd_cmd" : [],   <-- Comando rtmpdump (si tipo == rtmp) sino None
                            "menco_cmd" : [],   <-- Comando mencoder (Si tipo == rtmp) sino None
                            "url_publi" : "",   <-- Url del vídeo de publicidad asociado al vídeo
                            "otros"     : [],   <-- Lista donde se pueden pasar cosas opcionales
                            "mensaje"   : ""    <-- Mensajes de la API
                            }], <-- Debe ser una lista de tamaño "num_videos"
             "titulos"   : [u""], <-- Titulos de los videos
             "descs"     : [u""] <-- Descripción de cada vídeo
            }
            
            Los valores que no se rellenen, deberán devolver None.
            La clave "exito" es obligatoria, sino se puede encontrar el vídeo se puede devolver directamente:
            {
            "exito": False,
            "mensaje": "No se pudo descargar el video"  
            }
            
            "videos", "mesajes" y "descs" deben ser listas de cadenas (si no son None)
            "url_video", "filename", "rtmp_cmd", "menco_cmd" (de "videos") deben ser listas de cadenas (si no son None)
        '''
        
        html = Descargar.get(self.url)

        #Método 4DIC2013: #TODO: Acabar esto
        #return self.__newABC(html)

        #Por ahora solo soportados para brightcove:
        if not re.findall("ORIGEN[ \=\"\']*([a-zA-Z]*)[ \"\']*;", html)[0] == "bc":
            raise Error.GeneralPyspainTVsError(u'Tipo de vídeo aun no soportado para ABC. Por favor, comunica la incidencia.')

        self.Publisher_ID = re.findall("publisherID=([0-9]*)", html)[0]
        self.Player_ID = re.findall("playerID=([0-9]*)", html)[0]
        VideoPlayer = re.findall("RUTA_VIDEO[ \=\"\']*([0-9]*)[ \"\']*;", html)[0]

        info = self.__get_info(VideoPlayer)
        self.debug(u"info:",info)
        #TODO: Soltar todos los vídeos con las distintas calidades, ahora está solo la de mayor
        big = 0
        for video in info['renditions']:
            if video['encodingRate'] >= big:
                big = video['encodingRate']
                url = video['defaultURL']
        ext = "." + url.split(".")[-1]
        
        try: img = info['videoStillURL']
        except: img = None
        
        desc = None
        try: desc1 = info['longDescription'].encode('utf8') if info['longDescription'] is not None else None
        except: pass
        try: desc2 = info['shortDescription'].encode('utf8') if info['shortDescription'] is not None else None
        except: pass
        try:
            if desc1 is not None: desc = desc1
            else:
                if desc2 is not None: desc = desc2
        except: desc = u"Vídeo de ABC".encode('utf8')
        else:
            if desc is None: desc = u"Vídeo de ABC".encode('utf8')
            else:
                if type(desc) is unicode:
                    if desc == u"": desc = u"Vídeo de ABC".encode('utf8')
                elif type(desc) is str:
                    if desc == "": desc = u"Vídeo de ABC".encode('utf8')
        
        tit = None   
        try: tit = info['displayName'].encode('utf8')
        except: tit = u"Vídeo de ABC".encode('utf8')
        else:
            if tit is None: tit = u"Vídeo de ABC".encode('utf8')
            if type(tit) is unicode:
                if tit == u"": tit = u"Vídeo de ABC".encode('utf8')
            elif type(tit) is str:
                if tit == "": tit = u"Vídeo de ABC".encode('utf8')
        
        #FIXME: Ver qué pasa aquí!! --> name = Utiles.formatearNombre(tit + ext)
        try:
            name = Utiles.formatearNombre2(tit+ext)
        except:
            name = "VideoABC"+ext
        
        # Parece que NO funciona lo siguiente para ABC, solo para Telemadrid
        #url = "/".join(img.split("/")[:3])+"/"+"/".join(url.split("/")[3:])
        rtmpd_cmd = "rtmpdump -r '"+url.replace("&mp4:","mp4/")+"' -o '"+name+"'"

        #Convertir a HTTP, paso intermedio de método: #Método 4DIC2013
        try: change = re.findall("rtmp://.*videos/" ,url)[0]
        except: change = "#####"
        url = url.replace(change, "http://comeresa.uds.ak.o.brightcove.com/")
        if url.startswith("http://"): typem = "http"
        else: typem = "rtmp"
        
        return {"exito" : True,
                "num_videos" : 1,
                "mensaje"   : u"URL obtenido correctamente",
                "videos":[{
                        "url_video" : [url.replace("&mp4:","mp4/")],
                        "url_img"   : img if img is not None else None,
                        "filename"  : [name] if name is not None else None,
                        "tipo"      : typem,
                        "partes"    : 1,
                        "rtmpd_cmd" : [rtmpd_cmd],
                        "menco_cmd" : None,
                        "url_publi" : None,
                        "otros"     : None,
                        "mensaje"   : None
                        }],
                "titulos": [tit] if tit is not None else None,
                "descs": [desc] if desc is not None else None
                }