예제 #1
0
 def __modoSalonNuevo(self, streamXML):
     '''Nuevos vídeos con extensión .m4v'''
     self.log(u"[INFO] Modo Salón")
     self.log(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"
     
     if Descargar.isReachable(url2down1): # Vídeo en una parte
         url2down = url2down1
         name = streamXML.split("<nombre><![CDATA[")[1].split("]]>")[0] + ".f4v"
     else: # Vídeo en varias partes
         self.info(u"[!!!]  No se puede encuentra el vídeo en un archivo (000.m4v)")
         self.info(u"[INFO] El vídeo consta de varias 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:
             raise Error.GeneralPyspainTVsError("Grupo Antena 3. No se encuentra ninguna parte de contenido.")
     return [url2down,  name]
예제 #2
0
 def __modoNormalConURL(self,  streamHTML):
     url2down = streamHTML.split(".seoURL='")[1].split("'")[0]
     if not Descargar.isReachable(url2down): # A veces el vídeo de .seoURL da NOT FOUND!
         xmlURL = Utiles.recortar(streamHTML, ".xml=\'", "\'")
         streamXML = Descargar.getHtml(self.URL_DE_ANTENA3 + xmlURL)
         self.URL_DE_DESCARGA = self.__getUrlDescarga(streamXML)
         url2down =  self.URL_DE_DESCARGA + \
         streamXML.split("<archivo><![CDATA[")[1].split("]]></archivo>")[0]
         name = streamXML.split("<nombre><![CDATA[")[1].split("]]>")[0] + ".mp4"
         return [url2down, name]
     url2down = url2down.replace("deslasexta", "desprogresiva")
     try: # Parece que a veces aunque en el código aparezca el html, este no existe..
         name = Descargar.getHtml(self.URL_DE_ANTENA3 + streamHTML.split(".xml='")[1].split("'")[0]).split("<nombre><![CDATA[")[1].split("]]>")[0] + ".mp4"
     except:
         name = Utiles.recortar(streamHTML, "<title>", "</title>").replace("ANTENA 3 TV", "").replace("-", "").strip() + ".mp4" 
     return [url2down,  name]
예제 #3
0
 def __modoSalon(self, streamHTML):
     #TODO: Poner cada Canal su URL, no solo a todos la de antena 3 ;)
     self.log(u"[INFO] Modo Salón")
     if streamHTML.find("so.addVariable(\"xml\"") != -1:
         streamXML = \
         Descargar.getHtml(self.URL_DE_ANTENA3 + streamHTML.split("so.addVariable(\"xml\",\"")[1].split("\"")[0])
     elif streamHTML.find("player_capitulo.xml='") != -1:
         streamXML = \
         Descargar.getHtml(self.URL_DE_ANTENA3 + streamHTML.split("player_capitulo.xml='")[1].split("'")[0])
     else:
         raise Error.GeneralPyspainTVsError("Grupo Antena 3. No se encuentra XML.")
     
     # Comprobar aquí si se puede descargar 000.mp4:
     if streamXML.find(".mp4") != -1:
         tipo = ".mp4"
         url2down1 = self.URL_DE_DESCARGA + \
             streamXML.split("<archivo><![CDATA[")[1].split("001.mp4]]></archivo>")[0] + "000.mp4"
     elif streamXML.find(".flv") != -1:
         tipo = ".flv"
         url2down1 = self.URL_DE_DESCARGA + \
             streamXML.split("<archivo><![CDATA[")[1].split("001.flv]]></archivo>")[0] + "000.flv"
     elif streamXML.find(".f4v") != -1:
         [url2down, name] = self.__modoSalonNuevo(streamXML)
         return [url2down, name]
     else:
         raise Error.GeneralPyspainTVsError("Grupo Antena 3. No se encuentra mp4, f4v ni flv")
     
     if Descargar.isReachable(url2down1): # Vídeo completo en una parte
         url2down = url2down1
         name = streamXML.split("<nombre><![CDATA[")[1].split("]]>")[0] + tipo
     else: # Vídeo en varias partes
         self.info(u"[!!!]  No se puede encuentra el vídeo en un archivo (000.m4v)")
         self.info(u"[INFO] El vídeo consta de varias partes")
         parts = re.findall("\<archivo\>\<\!\[CDATA\[.*"+tipo+"\]\]\>\<\/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:
             raise Error.GeneralPyspainTVsError("Grupo Antena 3. No se encuentra niguna parte de contenido.")
     return [url2down,  name]
예제 #4
0
 def __modoNormalConURL(self, streamHTML):
     url2down = streamHTML.split(".seoURL='")[1].split("'")[0]
     if not Descargar.isReachable(
             url2down):  # A veces el vídeo de .seoURL da NOT FOUND!
         xmlURL = Utiles.recortar(streamHTML, ".xml=\'", "\'")
         streamXML = Descargar.getHtml(self.URL_DE_ANTENA3 + xmlURL)
         self.URL_DE_DESCARGA = self.__getUrlDescarga(streamXML)
         url2down =  self.URL_DE_DESCARGA + \
         streamXML.split("<archivo><![CDATA[")[1].split("]]></archivo>")[0]
         name = streamXML.split("<nombre><![CDATA[")[1].split(
             "]]>")[0] + ".mp4"
         return [url2down, name]
     url2down = url2down.replace("deslasexta", "desprogresiva")
     try:  # Parece que a veces aunque en el código aparezca el html, este no existe..
         name = Descargar.getHtml(self.URL_DE_ANTENA3 + streamHTML.split(
             ".xml='")[1].split("'")[0]).split(
                 "<nombre><![CDATA[")[1].split("]]>")[0] + ".mp4"
     except:
         name = Utiles.recortar(streamHTML, "<title>", "</title>").replace(
             "ANTENA 3 TV", "").replace("-", "").strip() + ".mp4"
     return [url2down, name]
예제 #5
0
파일: rtpa.py 프로젝트: rkmax/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)
        '''

        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]
        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:
            partes = 1
            name = streamHTML.split("<div id=\"sobreElVideo\">")[1].split(
                "<h3>")[1].split("</h3>")[0] + ".mp4"
            streamHTML = streamHTML.replace(" ", "")
            try:
                url = streamHTML.split("html5")[1].split(
                    "\'file\':\'")[1].split("\'")[0]
            except:
                url = streamHTML.split("html5")[0].split(
                    "\'file\':\'")[1].split("\'")[0]
        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í, arreglat todo esto de desc y de tit_vid
        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 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,
        }
예제 #7
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)
     
     rtmp = False
     try: url = html.split("<param name=\"movie\"")[1].split("file=")[1].split("&")[0]
     except:
         try:
             url = Utiles.unescape(Utiles.recortar(html, "value=\"src=", "&"))
             rtmp = True
         except: #TODO: Añadir vídeos de listas
             raise Error.GeneralPyspainTVsError("No se pudo obtener la url de descarga")
     
     try: tit = html.split("<td class=\"contentheading\"")[1].split(">")[1].split("<")[0].decode('iso-8859-1').encode('utf8')
     except:
         try:
             tit = Utiles.recortar(html, "<meta name=\"title\" content=\"", "\"").decode('iso-8859-1').encode('utf8')
         except:
             tit = u"Vídeo de Rias Baixas Televisión".encode('utf8')
     try:
         desc = html.split("<table class=\"contentpaneopen\">")[1].split("</strong>")[1].split("</table>")[0].decode('iso-8859-1').encode('utf8')
         #desc = desc.replace(desc.find("<!-- JW AllVideos"), new)
     except:
         desc = tit
     try:
         if rtmp:
             imgs = html.split("MM_preloadImages('")[1]
             for i in imgs.split("<a href="):
                 if i.find(self.url) != -1:
                     img = self.URL_RB + "/" + i.split("MM_swapImage(")[1].split(",")[2].replace("\'", "").strip()
                     break
                 else: img = None
         else:
             img = html.split("<param name=\"movie\"")[1].split("image=")[1].split("&")[0]
             if Descargar.isReachable(img): pass
             else: img = None
     except: img = None
     try: name = Utiles.formatearNombre(tit) + ".flv"
     except: name = "Video_RiasBaixas.mp4"
 
     if rtmp: rtmpd_cmd = "rtmpdump -r \'"+url+"\' -o \'"+name+"\'"
     
     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" if not rtmp else "rtmp",
                     "partes"    : 1,
                     "rtmpd_cmd" : [rtmpd_cmd] if rtmp else 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
             }
예제 #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)
     '''
     
     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]
     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:
         partes = 1
         name = streamHTML.split("<div id=\"sobreElVideo\">")[1].split("<h3>")[1].split("</h3>")[0] + ".mp4"
         streamHTML = streamHTML.replace(" ", "")
         try:
             url = streamHTML.split("html5")[1].split("\'file\':\'")[1].split("\'")[0]
         except:
             url = streamHTML.split("html5")[0].split("\'file\':\'")[1].split("\'")[0]
     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
                 
     try: #imagen del vídeo
         img = self.URL_RTPA + Utiles.recortar(htmlBackup, "\'image\': \'", "\'")
     except:
         img = None
     
     desc = None 
     try: # Descripción del vídeo
         desc = htmlBackup.split("<div class=\"overview\">")[1].split("<div>")[1].split("</div>")[0].strip()
     except:
         desc = u"Vídeo de la web de Radio Televisión del Principado de Asturias"
     else:
         if desc is not None and desc == "":
             desc = u"Vídeo de la web de Radio Televisión del Principado de Asturias"
     
     tit_vid = None
     try: #Título del vídeo
         tit_vid = htmlBackup.split("<div id=\"sobreElVideo\">")[1].split("<h3>")[1].split("</h3>")[0]
     except:
         tit_vid = None
     else:
         if tit_vid is not None and tit_vid == "":
             tit_vid = u"Vídeo de la web de Radio Televisión del Principado de Asturias"
     
     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
             }
     
예제 #9
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)

        rtmp = False
        try:
            url = html.split("<param name=\"movie\"")[1].split(
                "file=")[1].split("&")[0]
        except:
            try:
                url = Utiles.unescape(
                    Utiles.recortar(html, "value=\"src=", "&"))
                rtmp = True
            except:  #TODO: Añadir vídeos de listas
                raise Error.GeneralPyspainTVsError(
                    "No se pudo obtener la url de descarga")

        try:
            tit = html.split("<td class=\"contentheading\"")[1].split(
                ">")[1].split("<")[0].decode('iso-8859-1').encode('utf8')
        except:
            try:
                tit = Utiles.recortar(html, "<meta name=\"title\" content=\"",
                                      "\"").decode('iso-8859-1').encode('utf8')
            except:
                tit = u"Vídeo de Rias Baixas Televisión".encode('utf8')
        try:
            desc = html.split("<table class=\"contentpaneopen\">")[1].split(
                "</strong>")[1].split("</table>")[0].decode(
                    'iso-8859-1').encode('utf8')
            #desc = desc.replace(desc.find("<!-- JW AllVideos"), new)
        except:
            desc = tit
        try:
            if rtmp:
                imgs = html.split("MM_preloadImages('")[1]
                for i in imgs.split("<a href="):
                    if i.find(self.url) != -1:
                        img = self.URL_RB + "/" + i.split(
                            "MM_swapImage(")[1].split(",")[2].replace(
                                "\'", "").strip()
                        break
                    else:
                        img = None
            else:
                img = html.split("<param name=\"movie\"")[1].split(
                    "image=")[1].split("&")[0]
                if Descargar.isReachable(img): pass
                else: img = None
        except:
            img = None
        try:
            name = Utiles.formatearNombre(tit) + ".flv"
        except:
            name = "Video_RiasBaixas.mp4"

        if rtmp: rtmpd_cmd = "rtmpdump -r \'" + url + "\' -o \'" + name + "\'"

        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" if not rtmp else "rtmp",
                "partes": 1,
                "rtmpd_cmd": [rtmpd_cmd] if rtmp else 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
        }