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