La Gaceta de Linux ...¡ haciendo a Linux un poco más divertido !
Por Bill Lovett
Traducción al español por José Antonio Magro Cortés
el día 6 de Abril de 2005, para La Gaceta de Linux
¿Dónde podrías buscar para ver la programación de la televisión? Normalmente, en un periódico, en un número reciente de la revista TV Guide, en tu sitio Web favorito o en Tivo, ReplayTV o cualquier otro PVR. Pero no olvides añadir Linux a la lista. Puedes dejar que la máquina haga el trabajo sucio y que te muestre la programación. XMLTV, un pequeño script de bash, y una tarea de cron es todo lo que necesitas para empezar.
Lo primero es lo primero: instalar el programa. XMLTV es una suite de scripts en Perl que se pueden descargar desde membled.com/work/apps/xmltv. Éstas son versiones para entornos Unix y Windows, aunque, por razones obvias, nos centraremos en las primeras. Si vamos a instalarlo desde el código fuente, el procedimiento normal es:
% perl Makefile.PL % make % make test % make install
Si trabajamos con Debian, es tan simple como usar apt-cache search xmltv. En la página principal del proyecto se pueden encontrar vínculos a paquetes para OS X, Red Hat 8 y Red Hat 9.
Antes de poder utilizar XMLTV, debemos tener en cuenta dónde estamos. XMLTV es internacional: puede recoger programaciones de TV para Canadá y EEUU, Reino Unido, Austria y Alemania, Nueva Zelanda, Finlandia, Italia, España, Países Bajos, Dinamarca y Hungría. Actualmente se trabaja para incorporar a esta lista a Bélgica y Francia. Los scripts que recopilan las listas de un país concreto se conocen con el nombre de "grabbers" y se pueden llamar desde la línea de comandos mediante tv_grab_*. Vamos a utilizar el "grabber" de EEUU, tv_grab_na.
La primera vez que lo ejecutemos, lo haremos con la opción --configure. De esta forma se inicia una sesión interactiva, en la que el usuario y el "grabber" se conocerán algo mejor, debido a que se incluye el código postal, el proveedor de servicios de TV y los canales. Los resultados del script se escriben en ~/.xmltv/tv_grab_na.conf y se pueden editar fácilmente a mano.
En este momento, XMLTV está listo para servirte. Ejecutamos man tv_grab_na para conocer las posibles opciones. Por ahora, sólo necesitaremos dos:
% tv_grab_na --days 1 --output /tmp/tv.xmlDe esta forma, le decimos al "grabber" capture la lista de un día y la guarde en
/tmp/tv.xml.
Los ficheros de XMLTV tienen un formato que no facilitan precisamente la lectura, a menos que disfrutemos con el código puro y duro. La suite proporciona algunos scripts que pueden solucionar este problema. tv_sort ordena los contenidos de un fichero de fechas de xmltv. tv_grep permite eliminar parte de la basura de las listas. Yo suelo ejecutarlo así:
% tv_sort --output /tmp/tv_sorted.xml /tmp/tv.xml
% tv_grep --output /tmp/tv_grepped.xml --ignore-case --not --category Children \
--not --category Sports --not --title "Paid Programming" \
--not --title "Local Origination" \
--on-after now /tmp/tv_sorted.xml
Los comandos anteriores ordenan el fichero original y, posteriormente, descarta cualquier cosa categorizada como "Children" o "Sports" así como cualquiera que contenga "Paid Programming" (infomercials) o "Local Origination" (acceso público) en el título. Además, descartamos todo lo que se haya emitido antes de la ejecución del script.
Por ahora, seguimos teniendo un fichero XML. ¡A mí los conversores! tv_to_text es una de las herramientas que nos pueden ayudar a pasar de XML a otro formato. (Entre otras posibilidades se incluyen LaTeX, HTML y PDF. Echa un vistazo al archivo readme para ver el número de formatos disponibles actualmente. Después de ejecutar esto:
% tv_to_text --output /tmp/tv.txt /tmp/tv_grepped.xmlObtenemos una salida así:
21:00--21:30 Spy School 38 21:00--21:30 Designing for the Sexes // European Kitchen 64 21:00--21:30 Chappelle's Show 67 21:00--21:30 The Real World // Las Vegas 71 21:00--22:00 Law & Order: Special Victims Unit // Guilt 44 21:00--22:00 Wild Card // Auntie Venom 45 21:00--22:00 Cold Case Files // The Accidental Killer; Little Sister Lost 57 21:00--22:00 America's Most Wanted: America Fights Back // Top Ten Most Wanted Fugitives 5 21:00--22:00 The FBI Files // The Price of Greed 60 21:00--22:00 Trading Spaces // Nashville: Murphywood Crossing 61 21:00--22:00 Great Chowder Cook-Off 63 21:00--22:00 Ends of the Earth // Secrets of the Holy Land 65 21:00--22:00 The E! True Hollywood Story // The Hilton Sisters 68 ...Simple y sin complicaciones. Justo lo que necesitamos para el paso final: entrega por correo electrónico.
Hasta el momento, hemos utilizado algunas posibilidades de XMLTV, aunque poco más. Además, hemos utilizado un método poco cómodo y poco automatizado. Por suerte, podemos agrupar todos los comandos que hemos utilizado hasta ahora en un script de shell y enviarlo a nosotros mismos por correo. El comando mail se ocupa de ello:
% mail -s "Today's TV listings from XMLTV" user@localhost < /tmp/tv.txtEl script completo quedaría así (versión texto de la lista):
#!/bin/sh # Grab today's listings: tv_grab_na --days 1 --output /tmp/tv.xml # Sort tv_sort --output /tmp/tv_sorted.xml /tmp/tv.xml # Grep tv_grep --output /tmp/tv_grepped.xml --ignore-case --not --category Children \ --not --category Sports --not --title "Paid Programming" \ --not --title "Local Origination" \ --on-after now /tmp/tv_sorted.xml # Convert To Text tv_to_text --output /tmp/tv.txt /tmp/tv_grepped.xml # Email mail -s "Today's TV listings from XMLTV" user@localhost < /tmp/tv.txtAhora sólo tenemos que ponerlo como una tarea de cron que se ejecute una vez al día y tendremos toda la programación de TV sin publicidad exterior, así como ningún canal o espectáculo que no nos interese.
Y lo que es más importante, conocemos la base para añadirle más características. Lo que hemos tratado es sólo el principio; más allá de los scripts de línea de comandos existe un cliente GUI. Por supuesto, hay muchas más cosas que se pueden hacer desde la línea de comandos, como por ejemplo:
tv_imdb
tv_split
Bill Lovett es un desarrollador Web de New York. Es uno de esos tipos de PHP/MySQL. Tiene un extraño interés por ejecutar sistemas Linux sobre viejas máquinas que ya deberían estar en la basura. Se puede leer más sobre Bill y sus proyectos de Open Source en http://www.ilovett.com/