Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
162 lines (143 sloc) 7.28 KB
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# This file is part of spaintvs.
#
# spaintvs is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# spaintvs is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with spaintvs. If not, see <http://www.gnu.org/licenses/>.
# Módulo de ejemplo para la creación de un canal
__author__="nombre"
__date__ ="$xx-xxx-20xx xx:xx:xx$"
import Canal
import Utiles
import Descargar
import Error
url_validas = ["ejemplo.es", "ejemplo.com"]
class Ejemplo(Canal.Canal):
'''
Clase para manejar los vídeos del canal XXXXX
'''
def __init__(self, url="", opcs=None):
Canal.Canal.__init__(self, url, opcs, url_validas, __name__)
# Métodos propios del canal:
# Atributos disponibles:
# ** self.url (url recibida)
# ** self.opcs (diccionario de opciones) Ver Módulo Canal "_default_opcs" para opciones
# Métodos disponibles de clase Canal:
# ** self.log() para mostrar por pantalla (está disponible si self.opcs["log"] es True)
# ** self.info() = log()
# ** self.debug() mostrar información de debug (está disponible si self.opcs["debug"] es True)
# Comunicación de errores con nivel de aplicación:
# ** lanzar la excepción: raise Errors.GeneralPyspainTVsError("mensaje")
# Funciones de Utiles:
# ** Utiles.formatearNombre("cadena") y Utiles.stringFormat("cadena") para quitar caracteres extraños
# Funciones de Descargar:
# ** Descargar.getHtml(url, withHeader=False, utf8=False, header=std_headers)
# Recibe:
# - url (http://ejemplo.com/ruta/de/ejemplo)
# - withHeader (True or False)
# - utf8 (True or False)
# - header, de la forma:
# {
# 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; '
# 'en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6',
# 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
# 'Accept': 'text/xml,application/xml,application/xhtml+xml,'
# 'text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
# 'Accept-Language': 'en-us,en;q=0.5',
# } <-- Esto se enviará en caso de omitir el header.
# Return:
# - Respuesta GET
# ** Descargar.isReachable(url)
# Recibe:
# - url (http://ejemplo.com/ruta/de/ejemplo)
# Return:
# - True or False
# Comprueba si se puede acceder a una web
# ** Descargar.doPost(url, path, post_args, doseq=True, headers=None)
# Recibe:
# - url (http://ejemplo.com)
# - path (/ruta/de/ejemplo.php)
# - post_args (dicy, ej.: {"usuario":"antonio", "password":"pass"})
# - doseq (bool)
# - headers, de la forma:
# {
# 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; '
# 'en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6',
# 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
# 'Accept': 'text/xml,application/xml,application/xhtml+xml,'
# 'text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
# 'Accept-Language': 'en-us,en;q=0.5',
# } <-- Esto se enviará en caso de omitir el header.
# Return:
# - Respuesta del POST
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)
'''
#Ejemplo:
try:
html = Descargar.getHtml(self.url)
html.split("blabla")[0] # Buscar vídeo en html
except Exception, e:
raise Error.GeneralPyspainTVsError("No se encuentra la URL: "+e)
url_video = "http://ejmeplo.com/ruta/de/ejemplo.mp4"
url_img = "http://ejemplo.com/ruta/de/ejemplo.jpg"
tit_vid = "título de ejemplo"
titulo = Utiles.formatearNombre(tit_vid + ".mp4")
ejemplo = {
"exito" : True,
"num_videos" : 1,
"mensaje" : u"URL obtenida correctamente",
"videos":[{
"url_video" : [url_video],
"url_img" : url_img if url_img is not None else None,
"filename" : [titulo] if titulo 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": None
}
return ejemplo