예제 #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)
        '''
        
        url_img = None
        streamHTML = Descargar.getHtml(self.url)
        
        if streamHTML.find("http://level3/") != -1: # Método antiguo
            self.info(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]
            self.info(u"[INFO] Nuevo Video ID:", newID)
            ask4token = self.URL_ASK4TOKEN + newID[-3:] + "/" + newID + ".mp4"
            self.debug(u"[+] Pidiendo nuevo token")
            url2down = Descargar.getHtml(ask4token)
            name = streamHTML.split("var title = \'")[1].split("\'")[0] + ".mp4"
        elif self.url.find("videoURL=") != -1: # Forma con el ID en la URL (nueva??)
            videoID = self.url.split("videoURL=")[1]
            ask4token = self.URL_ASK4TOKEN + videoID[-3:] + "/" + videoID + ".mp4"
            self.debug(u"[+] Pidiendo nuevo token")
            url2down = Descargar.getHtml(ask4token)
            # Obtner nombre:
            xmlURL = "http://estaticos.telecinco.es/xml/Video/Video_" + videoID + ".xml"
            streamXML = Descargar.getHtml(xmlURL)
            name = streamXML.split("<![CDATA[")[1].split("]")[0] + ".mp4"
        elif streamHTML.find("MDS.embedObj(video") != -1:
            contentID = streamHTML.split("MDS.embedObj(video, \"")[1].split("\"")[0]
            try: clippingID = streamHTML.split("imageClippingId: \'")[1].split("\'")[0] # try por que en la API no funcionaba oO
            except: clippingID = "1.jpg"
            try: imageContentID = streamHTML.split("imageContentId: \'")[1].split("\'")[0] # try por problemas com la API oO
            except: imageContentID = streamHTML.split("MDS.embedObj(video, \"")[1].split("\"")[0]
            self.debug(u"URL JSON: " + self.URL_JSON + "contentId=" + contentID + "&clippingId=" + clippingID + "&imageContentId=" + imageContentID)
            streamJSON = Descargar.getHtml(self.URL_JSON +
                                         "contentId=" + contentID +
                                         "&clippingId=" + clippingID +
                                         "&imageContentId=" + imageContentID
                                         )
            url2down = streamJSON.split("({\"sources\":[{\"src\":\"")[1].split("\"")[0].replace("\/", "/")
            name = streamHTML.split("<title>")[1].split("<")[0]
            name += "." + url2down.split(".")[-1].split("?")[0]
            url_img = streamJSON.split("\"poster\":\"")[1].split("\"")[0].replace("\/", "/")
        elif streamHTML.find("MSV.embedData") != -1:
            #rx=re.compile(r"MSV\.embedData\[(.*)\]", re.MULTILINE|re.DOTALL)
            rx=re.compile(r'/mdsvideo/popup\.html\?(.*)"')
            videos = rx.findall(streamHTML)
            if not videos: Error.GeneralPyspainTVsError("Telecinco.es. No se encuentra contenido.")
            ret =   {
                    "exito" : True,
                    "num_videos" : len(videos),
                    "mensaje"   : u"URL obtenido correctamente",
                    "videos": [],
                    "titulos": [],
                    "descs": []
                    }
            for js in videos:
                vid = {
                "url_video" : None,
                "url_img"   : None,
                "filename"  : [],
                "tipo"      : "http",
                "partes"    : 1,
                "rtmpd_cmd" : None,
                "menco_cmd" : None,
                "url_publi" : None,
                "otros"     : None,
                "mensaje"   : None
                }
                stream = Descargar.getHtmlUtf8(self.URL_JSON + js + "&imageContentId=" + Utiles.recortar(js, 'contentId=', '&'))
                info = json.loads(stream[1:-1])
                vid['url_video'] = [info['sources'][0]['src']]
                vid['url_img'] = info['poster']
                try: vid['filename'].append(Utiles.formatearNombre(info['nielsen']['title']+'.mp4'))
                except: vid['filename'].append('VideosDeTelecinco.mp4')
                ret['videos'].append(vid)
                ret['titulos'].append(unicode(info['nielsen']['title']).encode('utf8').replace('"','').replace("'",""))
                ret['descs'].append(u'Cat.: %s. Subcat.: %s. %s'.encode('utf8') % (info['nielsen']['category'].encode('utf8'),info['nielsen']['subcategory'].encode('utf8'),info['nielsen']['title'].encode('utf8')))
            return ret      
        else:
            Error.GeneralPyspainTVsError("Telecinco.es. No se encuentra contenido.")
        

        tit_vid = None
        if name != None:
            name = name.replace("Ver vídeo online","")
            tit_vid = name.split(".")[0]
            name = Utiles.formatearNombre(name)
        
        desc = None        
        try:
            desc = Utiles.recortar(streamHTML, "<h3 class=\"subtitle\">", "<").strip()
        except:
            desc = tit_vid if tit_vid is not None else None
        
        #TIT FIX:
        tit_vid = tit_vid.replace('"','').replace("'","")

        return {"exito" : True,
                "num_videos" : 1,
                "mensaje"   : u"URL obtenido correctamente",
                "videos":[{
                        "url_video" : [url2down],
                        "url_img"   : url_img if url_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_vid] if tit_vid is not None else None,
                "descs": [desc] if desc is not None else None
                }
예제 #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)
     '''
     url_img = None
     streamHTML = Descargar.getHtml(self.url).decode('string-escape')
     if streamHTML.find("CUAVID") != -1:
         self.debug(u"CUAVID")
         ContentID = streamHTML.split("imageContentId: \'")[1].split("\'")[0]
         streamJSON = Descargar.getHtml(self.URL_SOURCES + ContentID)
         url2down = streamJSON.split("\"src\":\"")[1].split("\"")[0].replace("\/", "/")
         name = streamJSON.split("\"wrpContent\":\"")[1].split("\"")[0] + ".mp4"
     elif streamHTML.find("MDS.embedObj(video") != -1: # Este parece ser el único método a 16/10/2012 (pero dejo los demás..)
         self.debug(u"MDS.embedObj")
         contentID = streamHTML.split("MDS.embedObj(video, \"")[1].split("\"")[0]
         clippingID = streamHTML.split("imageClippingId: \'")[1].split("\'")[0]
         imageContentID = streamHTML.split("imageContentId: \'")[1].split("\'")[0]
         self.debug("URL Json: "+self.URL_JSON + "contentId=" + contentID + "&clippingId=" + clippingID + "&imageContentId=" + imageContentID)
         streamJSON = Descargar.getHtml( self.URL_JSON +
                                         "contentId=" + contentID +
                                          "&clippingId=" + clippingID +
                                          "&imageContentId=" + imageContentID
                                          )
         
         #streamJSON = dict(streamJSON)
         #url2down = streamJSON["sources"][0]["src"]
         url2down = streamJSON.split("({\"sources\":[{\"src\":\"")[1].split("\"")[0].replace("\/", "/")
         name = streamHTML.split("<title>")[1].split("<")[0]
         name += "." + url2down.split(".")[-1].split("?")[0]
         url_img = streamJSON.split("\"poster\":\"")[1].split("\"")[0].replace("\/", "/")
     elif streamHTML.find("src_iframe:") != -1:
         self.info(u"[INFO] Vídeo Común")
         name = streamHTML.split("<title>")[1].split("<")[0]
         urlComunes = self.URL_CUATRO + streamHTML.split("src_iframe:")[1].replace(" ", "").split("\'")[1].split("\'")[0]
         streamComunes = Descargar.getHtml(urlComunes)
         url2down = streamComunes.split("document.write(\'<video id=")[1].split("src=\"")[1].split("\"")[0]
         ext= "." + url2down.split(".")[-1]
         name += ext
     elif streamHTML.find("MSV.embedData") != -1:
         #rx=re.compile(r"MSV\.embedData\[(.*)\]", re.MULTILINE|re.DOTALL)
         rx=re.compile(r'/mdsvideo/popup\.html\?(.*)"')
         videos = rx.findall(streamHTML)
         if not videos: Error.GeneralPyspainTVsError("Telecinco.es. No se encuentra contenido.")
         ret =   {
                 "exito" : True,
                 "num_videos" : len(videos),
                 "mensaje"   : u"URL obtenido correctamente",
                 "videos": [],
                 "titulos": [],
                 "descs": []
                 }
         for js in videos:
             vid = {
             "url_video" : None,
             "url_img"   : None,
             "filename"  : None,
             "tipo"      : "http",
             "partes"    : 1,
             "rtmpd_cmd" : None,
             "menco_cmd" : None,
             "url_publi" : None,
             "otros"     : None,
             "mensaje"   : None
             }
             stream = Descargar.getHtmlUtf8(self.URL_JSON + js + "&imageContentId=" + Utiles.recortar(js, 'contentId=', '&'))
             info = json.loads(stream[1:-1])
             vid['url_video'] = [info['sources'][0]['src']]
             vid['url_img'] = info['poster']
             try: vid['filename'] = Utiles.formatearNombre(info['nielsen']['title']+'.mp4')
             except: vid['filename'] = 'VideosDeTelecinco.mp4'
             ret['videos'].append(vid)
             ret['titulos'].append(unicode(info['nielsen']['title']).encode('utf8'))
             ret['descs'].append(u'Cat.: %s. Subcat.: %s. %s'.encode('utf8') % (info['nielsen']['category'].encode('utf8'),info['nielsen']['subcategory'].encode('utf8'),info['nielsen']['title'].encode('utf8')))
         return ret   
     else:
         raise Error.GeneralPyspainTVsError("Cuatro.com: No se encuentra contenido")
     
     
     tit_vid = None
     if name:
         name = name.replace("Ver vídeo online","")
         tit_vid = name.split(".")[0]
         name = Utiles.formatearNombre(name)
     
     desc = None        
     try:
         desc = Utiles.recortar(streamHTML, "<h3 class=\"subtitle\">", "<").strip()
     except:
         desc = tit_vid if tit_vid is not None else None
 
     return {"exito" : True,
             "num_videos" : 1,
             "mensaje"   : u"URL obtenido correctamente",
             "videos":[{
                     "url_video" : [url2down],
                     "url_img"   : url_img if url_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_vid] if tit_vid is not None else None,
             "descs": [desc] if desc is not None else None
             }
예제 #3
0
    def __modoF1(self, streamHTML):  # TODO: ¡¡¡Acabar esta función para devolver todos los videos y sus partes!!!
        """
           <param value="_urlData=http://www.antena3.com/gestorf1/swf/player_hitos/xml/data.xml&_image=http://www.antena3.com/gestorf1/pictures/361/361/malasia-portada_crop1.png&_id_list=1405&_promo1=http://www.smartadserver.com/call/pubx/15272/241149/4654/S/&_promo2=http://www.smartadserver.com/call/pubx/15272/241148/4654/S/" name="flashVars">
        """
        streamHTML = Descargar.getHtmlUtf8(self.url)
        # Qué vídeo:
        streamVids = streamHTML.split('<ul class="a3_gp_visor_menu">')[1].split("</ul>")[0].replace("\t", "")
        streamVids = streamVids.split("<li>")[1:]

        desc = None
        try:
            desc = Utiles.recortar(streamHTML, '<meta property="og:description" content="', '"').strip()
        except:
            desc = None

        # self.debug(streamVids)
        ret = {
            "exito": True,
            "num_videos": 0,
            "mensaje": u"URLs obtenido correctamente",
            "videos": [],
            "titulos": [],
            "descs": [],
        }

        v = -1
        for i in streamVids:  # todos los vídeos con todas sus partes
            video = {
                "url_video": [],
                "url_img": None,
                "filename": [],
                "tipo": "http",
                "partes": 0,
                "rtmpd_cmd": None,
                "menco_cmd": None,
                "url_publi": None,
                "otros": None,
                "mensaje": None,
            }
            v += 1
            streamVid = streamVids[v]
            streamVidUrl = self.URL_DE_ANTENA3 + streamVid.split('href="')[1].split('"')[0]
            self.debug(u"URL Video: " + streamVidUrl)
            streamHTML = Descargar.getHtml(streamVidUrl)

            # Partes
            id_list = streamHTML.split("_id_list=")[1].split("&")[0]
            listXMLurl = self.URL_DE_F1 + id_list + "_playlist.xml"
            self.debug(u"URL XML list: " + listXMLurl)
            listxml = Descargar.getHtml(listXMLurl)
            video["url_img"] = listxml.split("<picture>")[1].split("</picture>")[0].strip()
            listxml = listxml.split("<video>")[1:]
            # print listxml
            for b in listxml:
                video["partes"] += 1
                # video["mensaje"] = unicode(i.split(">")[1].split("<")[0].capitalize())
                endurl = b.split("<url>")[1].split("<")[0]
                # video["url_video"].append(endurl.replace(endurl.split("mp_")[0],"http://desprogresiva.antena3.com/"))
                video["url_video"].append(endurl.replace(endurl.split("mp_")[0], self.URL_DE_DESCARGA_LA_SEXTA))
                ext = "." + video["url_video"][-1].split(".")[-1]
                tit = b.split("<title>")[1].split("<")[0] + ext
                tit = Utiles.formatearNombre(tit)
                video["filename"].append(tit)

            ret["titulos"].append(unicode(i.split(">")[1].split("<")[0].capitalize()).encode("utf8"))
            ret["videos"].append(video)
            ret["num_videos"] += 1
            ret["descs"].append(unicode(desc).encode("utf8"))

        return ret
예제 #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)
        '''

        try:  #Tratar de quitar caracteres especiales de las urls que no lo necesitan
            self.url = self.url.split(
                "video:")[0] + "video:_" + self.url.split("_")[1]
            self.debug(u"Adaptar URL: %s" % self.url)
        except:
            pass

        streamHTML = htmlBackup = Descargar.getHtml(
            self.url).decode('iso-8859-1').encode(
                'utf8')  #rtpa codigicada en iso..
        streamHTML = streamHTML.replace("\n", "").replace("\t", "")

        partes = None
        #método 12/11/2012:
        #if streamHTML.find("html5") != -1:
        if re.findall("[\'\"]type[\'\"]\ *:\ *[\'\"]html5[\'\"]", streamHTML):
            partes = 1
            videoID = re.findall("\:\_(.*)\.", self.url)[0]
            url = re.findall("[\'\"]file[\'\"]\ *?:\ *?[\'\"](.*?)[\'\"]",
                             streamHTML)[0]
            info = json.loads(
                Descargar.getHtmlUtf8(self.RTPA_API_INFO_ENDPOINT + videoID))
            try:
                name = Utiles.formatearNombre(
                    "%s (%s).mp4" % (info["VOD"][0]["nombre_programa"],
                                     info["VOD"][0]["fecha_emision"]))
            except:
                name = u"ProgramaRTPA.mp4"
        else:
            # Cuantas partes son:
            try:
                partes = int(streamHTML.split("&partes=")[1].split("&")[0])
            except IndexError:  # No existe "&partes"
                partes = 1

            if partes == 1:
                videoID = streamHTML.split("<param value=\"video1=")[1].split(
                    "&")[0]
                if videoID.find("http://") != -1:
                    url = videoID
                    name = streamHTML.split("data-text=\"")[1].split(
                        "\"")[0].strip() + "." + url.split(".")[-1]
                else:
                    # Probar entre TOKEN nuevo y antiguo por reproductor:
                    repro = streamHTML.split(
                        "<param value=\"player/")[1].split("\"")[0]
                    if repro == "reproductorVideoOnDemmand-mp4-rtpa.swf":  # Antiguo
                        streamINFO = self.__descHTML(self.TOKEN_ARCHIVO +
                                                     videoID)
                        url = "http://" + streamINFO.split("http://")[1]
                    else:  # Reproductor nuevo: "reproductorVideoOnDemmand.swf"
                        streamINFO = self.__descHTML(self.TOKEN + videoID +
                                                     "_1")
                        streamINFO = self.__descHTML(
                            streamINFO.split("&url=")[1])
                        url = "http://" + streamINFO.split("http://")[1]
                    name = streamHTML.split("<div id=\"sobreElVideo\">")[
                        1].split("<h3>")[1].split("</h3>")[0]
                    if name == "":
                        name = streamHTML.split("<title>")[1].split(
                            "</title>")[0] + ".mp4"
                    else:
                        name + ".mp4"
            else:
                # Recordar que hay videos que ponen varias partes en las que realmente solo existe una:
                videoID = streamHTML.split("<param value=\"video1=")[1].split(
                    "&")[0]
                url = []
                name = []
                for i in range(1, partes + 1):
                    streamINFO = self.__descHTML(self.TOKEN + videoID + "_" +
                                                 str(i))
                    streamINFO = self.__descHTML(streamINFO.split("&url=")[1])

                    tmp_url = "http://" + streamINFO.split("http://")[1]
                    tmp_name = streamHTML.split(
                        "<div id=\"sobreElVideo\">")[1].split("<h3>")[1].split(
                            "</h3>")[0] + "_part" + str(i)
                    if tmp_name == "":
                        tmp_name = streamHTML.split("<title>")[1].split(
                            "</title>")[0] + "_part" + str(i) + ".mp4"
                    else:
                        tmp_name + ".mp4"

                    if Descargar.isReachable(tmp_url):
                        url.append(tmp_url)
                        name.appen(tmp_name)
                        continue
                    else:
                        break

        #FIXME: Gran fixme aquí, arreglar todo esto de desc y de tit_vid

        if info:
            img = info["VOD"][0]["url_imagen"]
            desc = u"%s (%s)" % (info["VOD"][0]["nombre_programa"],
                                 info["VOD"][0]["fecha_emision"])
            try:
                desc = unicode(desc).encode("utf8")
            except:
                desc = u"Vídeo de la web de Radio Televisión del Principado de Asturias".encode(
                    "utf8")
            tit_vid = desc
        else:
            try:  #imagen del vídeo
                img = self.URL_RTPA + Utiles.recortar(htmlBackup,
                                                      "\'image\': \'", "\'")
            except:
                img = None

            desc = u""
            try:  # Descripción del vídeo
                d = htmlBackup.split("<div class=\"overview\">")[1].split(
                    "<div>")[1].split("</div>")[0].strip()
            except:
                try:
                    d = htmlBackup.split("<div class=\"overview\">")[1].split(
                        "<p>")[1].split("</p>")[0].strip()
                except:
                    pass
            try:  # desc coding
                desc = unicode(d).encode("utf8")
            except:
                desc = u"Vídeo de la web de Radio Televisión del Principado de Asturias".encode(
                    "utf8")
            if desc == u"":
                desc = u"Vídeo de la web de Radio Televisión del Principado de Asturias".encode(
                    "utf8")

            tit_vid = u""
            try:  #Título del vídeo
                tit = htmlBackup.split("<div id=\"sobreElVideo\">")[1].split(
                    "<h3>")[1].split("</h3>")[0].strip()
            except:
                try:
                    tit = htmlBackup.split("<div id=\"sobreElVideo\">"
                                           )[1].split("<h4 class=\"")[1].split(
                                               ">")[1].split("<")[0].strip()
                except:
                    pass
            try:  #titulo coding
                tit = Utiles.tituloFormat(tit)
                tit_vid = unicode(tit).encode("utf8")
            except:
                tit_vid = u"Vídeo de la web de Radio Televisión del Principado de Asturias".encode(
                    "utf8")
            if tit_vid == u"":
                tit_vid = u"Vídeo de la web de Radio Televisión del Principado de Asturias".encode(
                    "utf8")

            if type(name) == list:
                for i in name:
                    b = Utiles.formatearNombre(i)
                    name[name.index(i)] = b
            else:
                name = Utiles.formatearNombre(name)

        return {
            "exito":
            True,
            "num_videos":
            1,
            "mensaje":
            u"URL obtenida correctamente",
            "videos": [{
                "url_video": [url] if type(url) != list else url,
                "url_img": img if img is not None else None,
                "filename": [name] if name is not None else None,
                "tipo": "http",
                "partes": partes if partes is not None else 1,
                "rtmpd_cmd": None,
                "menco_cmd": None,
                "url_publi": None,
                "otros": None,
                "mensaje": None
            }],
            "titulos": [tit_vid] if tit_vid is not None else None,
            "descs": [desc] if desc is not None else None
        }
예제 #5
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)
        """

        try:  # Tratar de quitar caracteres especiales de las urls que no lo necesitan
            self.url = self.url.split("video:")[0] + "video:_" + self.url.split("_")[1]
            self.debug(u"Adaptar URL: %s" % self.url)
        except:
            pass

        streamHTML = htmlBackup = (
            Descargar.getHtml(self.url).decode("iso-8859-1").encode("utf8")
        )  # rtpa codigicada en iso..
        streamHTML = streamHTML.replace("\n", "").replace("\t", "")

        partes = None
        # método 12/11/2012:
        # if streamHTML.find("html5") != -1:
        if re.findall("['\"]type['\"]\ *:\ *['\"]html5['\"]", streamHTML):
            partes = 1
            videoID = re.findall("\:\_(.*)\.", self.url)[0]
            url = re.findall("['\"]file['\"]\ *?:\ *?['\"](.*?)['\"]", streamHTML)[0]
            info = json.loads(Descargar.getHtmlUtf8(self.RTPA_API_INFO_ENDPOINT + videoID))
            try:
                name = Utiles.formatearNombre(
                    "%s (%s).mp4" % (info["VOD"][0]["nombre_programa"], info["VOD"][0]["fecha_emision"])
                )
            except:
                name = u"ProgramaRTPA.mp4"
        else:
            # Cuantas partes son:
            try:
                partes = int(streamHTML.split("&partes=")[1].split("&")[0])
            except IndexError:  # No existe "&partes"
                partes = 1

            if partes == 1:
                videoID = streamHTML.split('<param value="video1=')[1].split("&")[0]
                if videoID.find("http://") != -1:
                    url = videoID
                    name = streamHTML.split('data-text="')[1].split('"')[0].strip() + "." + url.split(".")[-1]
                else:
                    # Probar entre TOKEN nuevo y antiguo por reproductor:
                    repro = streamHTML.split('<param value="player/')[1].split('"')[0]
                    if repro == "reproductorVideoOnDemmand-mp4-rtpa.swf":  # Antiguo
                        streamINFO = self.__descHTML(self.TOKEN_ARCHIVO + videoID)
                        url = "http://" + streamINFO.split("http://")[1]
                    else:  # Reproductor nuevo: "reproductorVideoOnDemmand.swf"
                        streamINFO = self.__descHTML(self.TOKEN + videoID + "_1")
                        streamINFO = self.__descHTML(streamINFO.split("&url=")[1])
                        url = "http://" + streamINFO.split("http://")[1]
                    name = streamHTML.split('<div id="sobreElVideo">')[1].split("<h3>")[1].split("</h3>")[0]
                    if name == "":
                        name = streamHTML.split("<title>")[1].split("</title>")[0] + ".mp4"
                    else:
                        name + ".mp4"
            else:
                # Recordar que hay videos que ponen varias partes en las que realmente solo existe una:
                videoID = streamHTML.split('<param value="video1=')[1].split("&")[0]
                url = []
                name = []
                for i in range(1, partes + 1):
                    streamINFO = self.__descHTML(self.TOKEN + videoID + "_" + str(i))
                    streamINFO = self.__descHTML(streamINFO.split("&url=")[1])

                    tmp_url = "http://" + streamINFO.split("http://")[1]
                    tmp_name = (
                        streamHTML.split('<div id="sobreElVideo">')[1].split("<h3>")[1].split("</h3>")[0]
                        + "_part"
                        + str(i)
                    )
                    if tmp_name == "":
                        tmp_name = streamHTML.split("<title>")[1].split("</title>")[0] + "_part" + str(i) + ".mp4"
                    else:
                        tmp_name + ".mp4"

                    if Descargar.isReachable(tmp_url):
                        url.append(tmp_url)
                        name.appen(tmp_name)
                        continue
                    else:
                        break

        # FIXME: Gran fixme aquí, arreglar todo esto de desc y de tit_vid

        if info:
            img = info["VOD"][0]["url_imagen"]
            desc = u"%s (%s)" % (info["VOD"][0]["nombre_programa"], info["VOD"][0]["fecha_emision"])
            try:
                desc = unicode(desc).encode("utf8")
            except:
                desc = u"Vídeo de la web de Radio Televisión del Principado de Asturias".encode("utf8")
            tit_vid = desc
        else:
            try:  # imagen del vídeo
                img = self.URL_RTPA + Utiles.recortar(htmlBackup, "'image': '", "'")
            except:
                img = None

            desc = u""
            try:  # Descripción del vídeo
                d = htmlBackup.split('<div class="overview">')[1].split("<div>")[1].split("</div>")[0].strip()
            except:
                try:
                    d = htmlBackup.split('<div class="overview">')[1].split("<p>")[1].split("</p>")[0].strip()
                except:
                    pass
            try:  # desc coding
                desc = unicode(d).encode("utf8")
            except:
                desc = u"Vídeo de la web de Radio Televisión del Principado de Asturias".encode("utf8")
            if desc == u"":
                desc = u"Vídeo de la web de Radio Televisión del Principado de Asturias".encode("utf8")

            tit_vid = u""
            try:  # Título del vídeo
                tit = htmlBackup.split('<div id="sobreElVideo">')[1].split("<h3>")[1].split("</h3>")[0].strip()
            except:
                try:
                    tit = (
                        htmlBackup.split('<div id="sobreElVideo">')[1]
                        .split('<h4 class="')[1]
                        .split(">")[1]
                        .split("<")[0]
                        .strip()
                    )
                except:
                    pass
            try:  # titulo coding
                tit = Utiles.tituloFormat(tit)
                tit_vid = unicode(tit).encode("utf8")
            except:
                tit_vid = u"Vídeo de la web de Radio Televisión del Principado de Asturias".encode("utf8")
            if tit_vid == u"":
                tit_vid = u"Vídeo de la web de Radio Televisión del Principado de Asturias".encode("utf8")

            if type(name) == list:
                for i in name:
                    b = Utiles.formatearNombre(i)
                    name[name.index(i)] = b
            else:
                name = Utiles.formatearNombre(name)

        return {
            "exito": True,
            "num_videos": 1,
            "mensaje": u"URL obtenida correctamente",
            "videos": [
                {
                    "url_video": [url] if type(url) != list else url,
                    "url_img": img if img is not None else None,
                    "filename": [name] if name is not None else None,
                    "tipo": "http",
                    "partes": partes if partes is not None else 1,
                    "rtmpd_cmd": None,
                    "menco_cmd": None,
                    "url_publi": None,
                    "otros": None,
                    "mensaje": None,
                }
            ],
            "titulos": [tit_vid] if tit_vid is not None else None,
            "descs": [desc] if desc is not None else None,
        }
예제 #6
0
    def __modoF1(
        self, streamHTML
    ):  #TODO: ¡¡¡Acabar esta función para devolver todos los videos y sus partes!!!
        '''
           <param value="_urlData=http://www.antena3.com/gestorf1/swf/player_hitos/xml/data.xml&_image=http://www.antena3.com/gestorf1/pictures/361/361/malasia-portada_crop1.png&_id_list=1405&_promo1=http://www.smartadserver.com/call/pubx/15272/241149/4654/S/&_promo2=http://www.smartadserver.com/call/pubx/15272/241148/4654/S/" name="flashVars">
        '''
        streamHTML = Descargar.getHtmlUtf8(self.url)
        # Qué vídeo:
        streamVids = streamHTML.split(
            "<ul class=\"a3_gp_visor_menu\">")[1].split("</ul>")[0].replace(
                "\t", "")
        streamVids = streamVids.split("<li>")[1:]

        desc = None
        try:
            desc = Utiles.recortar(
                streamHTML, "<meta property=\"og:description\" content=\"",
                "\"").strip()
        except:
            desc = None

        #self.debug(streamVids)
        ret = {
            "exito": True,
            "num_videos": 0,
            "mensaje": u"URLs obtenido correctamente",
            "videos": [],
            "titulos": [],
            "descs": []
        }

        v = -1
        for i in streamVids:  #todos los vídeos con todas sus partes
            video = {
                "url_video": [],
                "url_img": None,
                "filename": [],
                "tipo": "http",
                "partes": 0,
                "rtmpd_cmd": None,
                "menco_cmd": None,
                "url_publi": None,
                "otros": None,
                "mensaje": None
            }
            v += 1
            streamVid = streamVids[v]
            streamVidUrl = self.URL_DE_ANTENA3 + streamVid.split(
                "href=\"")[1].split("\"")[0]
            self.debug(u"URL Video: " + streamVidUrl)
            streamHTML = Descargar.getHtml(streamVidUrl)

            #Partes
            id_list = streamHTML.split("_id_list=")[1].split("&")[0]
            listXMLurl = self.URL_DE_F1 + id_list + "_playlist.xml"
            self.debug(u"URL XML list: " + listXMLurl)
            listxml = Descargar.getHtml(listXMLurl)
            video["url_img"] = listxml.split("<picture>")[1].split(
                "</picture>")[0].strip()
            listxml = listxml.split("<video>")[1:]
            #print listxml
            for b in listxml:
                video["partes"] += 1
                #video["mensaje"] = unicode(i.split(">")[1].split("<")[0].capitalize())
                endurl = b.split("<url>")[1].split("<")[0]
                video["url_video"].append(
                    endurl.replace(
                        endurl.split("mp_")[0],
                        "http://desprogresiva.antena3.com/"))
                ext = "." + video["url_video"][-1].split(".")[-1]
                tit = b.split("<title>")[1].split("<")[0] + ext
                tit = Utiles.formatearNombre(tit)
                video["filename"].append(tit)

            ret["titulos"].append(
                unicode(
                    i.split(">")[1].split("<")[0].capitalize()).encode('utf8'))
            ret["videos"].append(video)
            ret["num_videos"] += 1
            ret["descs"].append(unicode(desc).encode('utf8'))

        return ret
예제 #7
0
파일: cuatro.py 프로젝트: spds1/PyDownTV2
 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)
     '''
     url_img = None
     streamHTML = Descargar.getHtml(self.url).decode('string-escape')
     if streamHTML.find("CUAVID") != -1:
         self.debug(u"CUAVID")
         ContentID = streamHTML.split("imageContentId: \'")[1].split("\'")[0]
         streamJSON = Descargar.getHtml(self.URL_SOURCES + ContentID)
         url2down = streamJSON.split("\"src\":\"")[1].split("\"")[0].replace("\/", "/")
         name = streamJSON.split("\"wrpContent\":\"")[1].split("\"")[0] + ".mp4"
     elif streamHTML.find("MDS.embedObj(video") != -1: # Este parece ser el único método a 16/10/2012 (pero dejo los demás..)
         self.debug(u"MDS.embedObj")
         contentID = streamHTML.split("MDS.embedObj(video, \"")[1].split("\"")[0]
         clippingID = streamHTML.split("imageClippingId: \'")[1].split("\'")[0]
         imageContentID = streamHTML.split("imageContentId: \'")[1].split("\'")[0]
         self.debug("URL Json: "+self.URL_JSON + "contentId=" + contentID + "&clippingId=" + clippingID + "&imageContentId=" + imageContentID)
         streamJSON = Descargar.getHtml( self.URL_JSON +
                                         "contentId=" + contentID +
                                          "&clippingId=" + clippingID +
                                          "&imageContentId=" + imageContentID
                                          )
         
         #streamJSON = dict(streamJSON)
         #url2down = streamJSON["sources"][0]["src"]
         url2down = streamJSON.split("({\"sources\":[{\"src\":\"")[1].split("\"")[0].replace("\/", "/")
         name = streamHTML.split("<title>")[1].split("<")[0]
         name += "." + url2down.split(".")[-1].split("?")[0]
         url_img = streamJSON.split("\"poster\":\"")[1].split("\"")[0].replace("\/", "/")
     elif streamHTML.find("src_iframe:") != -1:
         self.info(u"[INFO] Vídeo Común")
         name = streamHTML.split("<title>")[1].split("<")[0]
         urlComunes = self.URL_CUATRO + streamHTML.split("src_iframe:")[1].replace(" ", "").split("\'")[1].split("\'")[0]
         streamComunes = Descargar.getHtml(urlComunes)
         url2down = streamComunes.split("document.write(\'<video id=")[1].split("src=\"")[1].split("\"")[0]
         ext= "." + url2down.split(".")[-1]
         name += ext
     elif streamHTML.find("MSV.embedData") != -1:
         #rx=re.compile(r"MSV\.embedData\[(.*)\]", re.MULTILINE|re.DOTALL)
         rx=re.compile(r'/mdsvideo/popup\.html\?(.*)"')
         videos = rx.findall(streamHTML)
         if not videos: Error.GeneralPyspainTVsError("Telecinco.es. No se encuentra contenido.")
         ret =   {
                 "exito" : True,
                 "num_videos" : len(videos),
                 "mensaje"   : u"URL obtenido correctamente",
                 "videos": [],
                 "titulos": [],
                 "descs": []
                 }
         for js in videos:
             vid = {
             "url_video" : None,
             "url_img"   : None,
             "filename"  : None,
             "tipo"      : "http",
             "partes"    : 1,
             "rtmpd_cmd" : None,
             "menco_cmd" : None,
             "url_publi" : None,
             "otros"     : None,
             "mensaje"   : None
             }
             stream = Descargar.getHtmlUtf8(self.URL_JSON + js + "&imageContentId=" + Utiles.recortar(js, 'contentId=', '&'))
             info = json.loads(stream[1:-1])
             vid['url_video'] = [info['sources'][0]['src']]
             vid['url_img'] = info['poster']
             try: vid['filename'] = Utiles.formatearNombre(info['nielsen']['title']+'.mp4')
             except: vid['filename'] = 'VideosDeTelecinco.mp4'
             ret['videos'].append(vid)
             ret['titulos'].append(unicode(info['nielsen']['title']).encode('utf8').replace("\'",""))
             ret['descs'].append(u'Cat.: %s. Subcat.: %s. %s'.encode('utf8') % (info['nielsen']['category'].encode('utf8'),info['nielsen']['subcategory'].encode('utf8'),info['nielsen']['title'].encode('utf8')))
         return ret   
     else:
         raise Error.GeneralPyspainTVsError("Cuatro.com: No se encuentra contenido")
     
     
     tit_vid = None
     if name:
         name = name.replace("Ver vídeo online","")
         tit_vid = name.split(".")[0]
         name = Utiles.formatearNombre(name)
     
     desc = None        
     try:
         desc = Utiles.recortar(streamHTML, "<h3 class=\"subtitle\">", "<").strip()
     except:
         desc = tit_vid if tit_vid is not None else None
 
     return {"exito" : True,
             "num_videos" : 1,
             "mensaje"   : u"URL obtenido correctamente",
             "videos":[{
                     "url_video" : [url2down],
                     "url_img"   : url_img if url_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_vid] if tit_vid is not None else None,
             "descs": [desc] if desc is not None else None
             }
예제 #8
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)
        '''

        url_img = None
        streamHTML = Descargar.getHtml(self.url)

        if streamHTML.find("http://level3/") != -1:  # Método antiguo
            self.info(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]
            self.info(u"[INFO] Nuevo Video ID:", newID)
            ask4token = self.URL_ASK4TOKEN + newID[-3:] + "/" + newID + ".mp4"
            self.debug(u"[+] Pidiendo nuevo token")
            url2down = Descargar.getHtml(ask4token)
            name = streamHTML.split("var title = \'")[1].split(
                "\'")[0] + ".mp4"
        elif self.url.find(
                "videoURL=") != -1:  # Forma con el ID en la URL (nueva??)
            videoID = self.url.split("videoURL=")[1]
            ask4token = self.URL_ASK4TOKEN + videoID[
                -3:] + "/" + videoID + ".mp4"
            self.debug(u"[+] Pidiendo nuevo token")
            url2down = Descargar.getHtml(ask4token)
            # Obtner nombre:
            xmlURL = "http://estaticos.telecinco.es/xml/Video/Video_" + videoID + ".xml"
            streamXML = Descargar.getHtml(xmlURL)
            name = streamXML.split("<![CDATA[")[1].split("]")[0] + ".mp4"
        elif streamHTML.find("MDS.embedObj(video") != -1:
            contentID = streamHTML.split("MDS.embedObj(video, \"")[1].split(
                "\"")[0]
            try:
                clippingID = streamHTML.split("imageClippingId: \'")[1].split(
                    "\'")[0]  # try por que en la API no funcionaba oO
            except:
                clippingID = "1.jpg"
            try:
                imageContentID = streamHTML.split("imageContentId: \'")[
                    1].split("\'")[0]  # try por problemas com la API oO
            except:
                imageContentID = streamHTML.split(
                    "MDS.embedObj(video, \"")[1].split("\"")[0]
            self.debug(u"URL JSON: " + self.URL_JSON + "contentId=" +
                       contentID + "&clippingId=" + clippingID +
                       "&imageContentId=" + imageContentID)
            streamJSON = Descargar.getHtml(self.URL_JSON + "contentId=" +
                                           contentID + "&clippingId=" +
                                           clippingID + "&imageContentId=" +
                                           imageContentID)
            url2down = streamJSON.split("({\"sources\":[{\"src\":\"")[1].split(
                "\"")[0].replace("\/", "/")
            name = streamHTML.split("<title>")[1].split("<")[0]
            name += "." + url2down.split(".")[-1].split("?")[0]
            url_img = streamJSON.split("\"poster\":\"")[1].split(
                "\"")[0].replace("\/", "/")
        elif streamHTML.find("MSV.embedData") != -1:
            #rx=re.compile(r"MSV\.embedData\[(.*)\]", re.MULTILINE|re.DOTALL)
            rx = re.compile(r'/mdsvideo/popup\.html\?(.*)"')
            videos = rx.findall(streamHTML)
            if not videos:
                raise Error.GeneralPyspainTVsError(
                    "Telecinco.es. No se encuentra contenido.")
            ret = {
                "exito": True,
                "num_videos": len(videos),
                "mensaje": u"URL obtenido correctamente",
                "videos": [],
                "titulos": [],
                "descs": []
            }
            for js in videos:
                vid = {
                    "url_video": None,
                    "url_img": None,
                    "filename": [],
                    "tipo": "http",
                    "partes": 1,
                    "rtmpd_cmd": None,
                    "menco_cmd": None,
                    "url_publi": None,
                    "otros": None,
                    "mensaje": None
                }
                self.debug(u"API ENDPOINT: %s" % self.URL_JSON + js +
                           "&imageContentId=" +
                           Utiles.recortar(js, 'contentId=', '&'))
                stream = Descargar.getHtmlUtf8(
                    self.URL_JSON + js + "&imageContentId=" +
                    Utiles.recortar(js, 'contentId=', '&'))
                info = json.loads(stream[1:-1])
                vid['url_video'] = [info['sources'][0]['src']]
                vid['url_img'] = info['poster']
                try:
                    vid['filename'].append(
                        Utiles.formatearNombre(info['nielsen']['title'] +
                                               '.mp4'))
                except:
                    vid['filename'].append('VideosDeTelecinco.mp4')
                ret['videos'].append(vid)
                ret['titulos'].append(
                    unicode(info['nielsen']['title']).encode('utf8').replace(
                        '"', '').replace("'", ""))
                ret['descs'].append(
                    u'Cat.: %s. Subcat.: %s. %s'.encode('utf8') %
                    (info['nielsen']['category'].encode('utf8'),
                     info['nielsen']['subcategory'].encode('utf8'),
                     info['nielsen']['title'].encode('utf8')))
            return ret
        else:
            raise Error.GeneralPyspainTVsError(
                "Telecinco.es. No se encuentra contenido.")

        tit_vid = None
        if name != None:
            name = name.replace("Ver vídeo online", "")
            tit_vid = name.split(".")[0]
            name = Utiles.formatearNombre(name)

        desc = None
        try:
            desc = Utiles.recortar(streamHTML, "<h3 class=\"subtitle\">",
                                   "<").strip()
        except:
            desc = tit_vid if tit_vid is not None else None

        #TIT FIX:
        tit_vid = tit_vid.replace('"', '').replace("'", "")

        return {
            "exito":
            True,
            "num_videos":
            1,
            "mensaje":
            u"URL obtenido correctamente",
            "videos": [{
                "url_video": [url2down],
                "url_img": url_img if url_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_vid] if tit_vid is not None else None,
            "descs": [desc] if desc is not None else None
        }