En lo que ha sido del año pasado he dedicado poco tiempo a la TV, tras advertir como se viene abajo la calidad de la programación (o como cada vez uno se pone más exquisito), me da menos ímpetu. Veo la “caja boba” por la PC, como todo el que quiere ahorrar espacio, mediante una pequeña y económica placa sintonizadora (Encore ENLTV-FM) que funciona muy bien en Linux, incluso con control remoto.
Tratando de encontrar alguna emisión como la gente por el canal de cable, hace unos meses me dediqué a hacer funcionar la información en pantalla de tvtime. Básicamente, tvtime obtiene la información de programación a partir de un archivo con formato estándar XMLTV, por lo que del lado del software de visualización está todo hecho, lo que falta es conseguir una fuente desde la cual obtener la información y entregársela de la forma adecuada (es decir, generar el archivo XML).
De eso se encargan los scripts del paquete xmltv-util. En particular, el script tv_grab_ar toma la información de mi proveedor de cable en argentina, amasa los datos y escupe un xml que se puede pasar directo a tvtime. Lamentablemente no logré hacer funcionar la versión 1.6 de tv_grab_ar tal cual viene en el paquete, y tras varios minutos haciendo debugging sobre las líneas decidí dejar de descifrar perl y comenzar a escribir un nuevo script en python.
Las primeras versiones fueron bastante sencillas, la librería BeautifulSoup lxml (BeautifulSoup ya no funciona correctamente) facilita mucho nadar en el HTML del sitio web de MC. En versiones siguientes añadí la posibilidad de descargar la reseña de cada programa de TV, una funcionalidad que según creo no estaba en el paquete original.
Básicamente los pasos son: obtener la grilla de programación de la semana actual para cada canal, y luego para cada programa obtener el título, horario, descripción, género, etc. Como la descarga de descripciones es muy tediosa y lenta (es como mínimo una petición HTTP por programa) y como muchas veces los programas se repiten (en la misma semana o entre semanas) aproveché el módulo pickle para almacenar el diccionario de emisiones entre invocaciones al script, agilizando de esta manera la actualización de los datos.
Finalmente terminé con este script que dejo en el blog por si a alguien le sirve. Las capturas de pantalla son un indicio de como tvtime presenta la información. Como siempre, cualquier consulta, sugerencia, crítica o mejora es bienvenida.
Descarga: tv_grab_ar.py [ver. 2015.03.02-1]
Últimos cambios: Fix sutil por problemas en la codificación de los títulos. Reincorporación del caché y de la descarga de descripciones de los shows. Sean pacientes pues la descarga ahora demora bastante más tiempo que antes. Si quieren la programación rápidamente, aunque no tenga las descripciones, usen –skip-descriptions. Como no tengo forma de probarlo localmente, Please Test & Give Feedback!
Instalación:
- Descargar tv_grab_ar.py y mover el archivo al directorio de tvtime:
mv tv_grab_ar.py ~/.tvtime/tv_grab_ar.py
- Instalar la librería beautifulsoup:
apt-get install python-beautifulsoup
- Instalar la librería python lxml:
apt-get install python-lxml
- Ejecutar:
./tv_grab_ar.py --configure
e indicar la zona y los canales para los cuales se desea obtener la información. El valor de zone determina la grilla de canales según la localidad.
- Ejecutar:
./tv_grab_ar.py --verbose --output=programacion.xml
para obtener la programación y las descripciones de los programas. Este proceso demora varios minutos, sean pacientes.
- Iniciar tvtime e indicar que obtenga la programación desde el archivo:
tvtime --xmltv=programacion.xml
Para finalizar, lo ideal es colocar en el cron de usuario una entrada para ejecutar la actualización al menos una vez por semana.
usage: tv_grab_ar.py [-h] [--days N] [--offset N] [--skip-descriptions]
[--output FILE] [--configure] [--config-file FILE]
[--quiet] [--verbose] [--list-channels] [--zone N]
[--capabilities] [--describe] [--description]
[--cache FILE] [--version]
Get Argentinian television listings in XMLTV format
optional arguments:
-h, --help show this help message and exit
--days N Grab N days. The default is 3.
--offset N Start N days in the future. The default is to start
from today.
--skip-descriptions Do not download program descriptions.
--output FILE Write to FILE rather than standard output.
--configure Prompt for which channels and write the configuration
file.
--config-file FILE Set the name of the configuration file, the default is
</home/maurom/.xmltv/tv_grab_ar.conf>. This is the file
written by --configure and read when grabbing.
--quiet Suppress the progress messages normally written to
standard error. [not implemented]
--verbose Display additional information.
--list-channels Display only the channel listing.
--zone N Override user location for retrieval of channels.
--capabilities Show which capabilities the grabber supports. For more
information, see
<http://wiki.xmltv.org/index.php/XmltvCapabilities>
--describe Show a brief description of the grabber.
--description Show a brief description of the grabber.
--cache FILE Cache description data in FILE. The default is
</home/maurom/.xmltv/tv_grab_ar.db>.
--version show program's version number and exit