|
|
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
nordri Forista
Registrado: 25 Mar 2005 Mensajes: 8
|
Publicado: Sab Mar 22, 2008 6:37 pm Asunto: Script para listado de videos |
|
|
Hola,
He creado este script que funciona de la siguiente manera: Tengo un disco externo de 500gb donde voy metiendo las descargas del torrent, el disco cuelga de /mnt/backup/ en un directorio tengo las pelis (agrupadas por géneros), series y documentales. El script recorre este árbol y va generando una lista numerada html por géneros con enlaces a FilmAffinity, con el contenido del disco, tras eso, se envía por correo electrónico a los usuarios del disco. Trabaja 100% desatendido.
Requisitos:
| Código: | #!/bin/bash
#
# Genera un listado con las peliculas del disco externo.
#
# Fede Diaz (nordri@gmail.com)
# Febrero 2008 - Version 0.1
# Marzo 2008 - Version 0.2 Genera informes en html con enlaces a filmaffinity
#
PPATH="/mnt/backup/pelis"
EMAILS="LISTA DE EMAILS SEPARADAS POR COMA"
TMPPATH="/tmp/pelis.script"
LISTA_TITULOS=$TMPPATH/listaTitulos.html
LISTA_GENEROS=$TMPPATH/generos
TITULOS_SIN_BARRAS=$TMPPATH/auxBarras.txt
TITULOS_SIN_PUNTOS=$TMPPATH/auxPuntos.txt
SERIES=$TMPPATH/series.lista
DOCUS=$TMPPATH/docus.lista
# Funcion que elimina las barras ("/") de la cadena (Genero)
function limpiaBarrasCadena() {
echo $1 | awk -F"/" '{ print $4 }'
}
# Funcion que elimina el punto de extension de la cadena (Genero)
function limpiaPuntoCadena() {
echo $1 | awk -F"." '{ print $1 }'
}
# Funcion que formatea la cadena de pelicula para que solo quede el titulo
function formateaPelicula() {
cat $1 | awk -F"/" '{ print $6 }' >> $TITULOS_SIN_BARRAS
cat $TITULOS_SIN_BARRAS | awk -F"." '{ print $1 }' >> $TITULOS_SIN_PUNTOS
rm $TITULOS_SIN_BARRAS
}
# Funcion para anadir titulos
function anadir(){
case $1 in
"pelicula")
TAM=`wc -l $2 | awk -F" " '{ print $1 }'`
for i in `seq 1 $TAM`; do
TITULO=`head -n $i $2 | tail -1`;
generaHTML titulo "$TITULO";
done
rm $TITULOS_SIN_PUNTOS
;;
"serie")
ls $PPATH/Series >> $SERIES
TAM=`wc -l $SERIES | awk -F" " '{ print $1 }'`
for i in `seq 1 $TAM`; do
TITULO=`head -n $i $SERIES | tail -1`;
generaHTML titulo "$TITULO";
done
;;
"docu")
ls $PPATH/Documentales >> $DOCUS
TAM=`wc -l $DOCUS | awk -F" " '{ print $1 }'`
for i in `seq 1 $TAM`; do
TITULO=`head -n $i $DOCUS | tail -1`;
generaHTML titulo "$TITULO";
done
;;
esac
}
# Genera el código HTML por casos. HEAD : Cabezera, GENERO : Genero del video,
# TITULO : Titulo del video + link, CIERRA : Cierra la página.
function generaHTML() {
case $1 in
"head")
echo "<html><head><title>El Listado de Películas</title></head><body bgcolor=\"#efefef\" text=\"black\" link=\"blue\" vlink=\"#551A8B\" alink=\"red\">" >> $LISTA_TITULOS
;;
"genero")
echo "<p><b>Peliculas del Genero: "$2"</b></p>" >> $LISTA_TITULOS
;;
"titulo")
echo "<li><a href=\"http://www.filmaffinity.com/es/search.php?stext=$2&stype%5B%5D=title&genre=&country=&fromyear=&toyear=\">"$2"</a></li>" >> $LISTA_TITULOS
;;
"cierra")
echo "</body></html>" >> $LISTA_TITULOS
;;
esac
}
function lista(){
if [ $1 == "empieza" ]; then
echo "<ol>" >> $LISTA_TITULOS
else
echo "</ol>" >> $LISTA_TITULOS
fi
}
# START HERE!!
# Comprobamos que existe el directorio de trabajo
if [ ! -d $TMPPATH ]; then
mkdir $TMPPATH
fi
# Obtenemos los generos disponibles
ls $PPATH > $LISTA_GENEROS
# Hacemos un bucle que clasificara el contenido de las carpetas
# segun su genero y los guardara en ficheros distintos
for GENERO in `cat $LISTA_GENEROS`; do
find $PPATH/$GENERO -iname "*.avi" | sort > $TMPPATH/$GENERO.lista;
done
# Una vez que tenemos las pelis separas por genero las juntamos poniendo una
# cabezera con el genero. Se hace en un nuevo bucle en el que al mismo tiempo
# se le añade el formato a la cadena para que solo aparezca el titulo de la
# pelicula.
generaHTML head # Inserta la cabezera del código HTML
for GENERO in `ls $TMPPATH/*.lista`; do
GENERO_SIN_BARRAS=`limpiaBarrasCadena $GENERO`
GENERO_SIN_PUNTO=`limpiaPuntoCadena $GENERO_SIN_BARRAS`
generaHTML genero $GENERO_SIN_PUNTO
lista empieza # Inserta la etiqueta de lista HTML superada
case $GENERO_SIN_PUNTO in
"Series")
anadir serie
;;
"Documentales")
anadir docu
;;
*)
formateaPelicula $GENERO # Se da formato al listado de pelis del Genero.
anadir pelicula $TITULOS_SIN_PUNTOS # Se anade el listado de pelis del Genero.
;;
esac
lista termina # Cierra la lista HTML numerada
done
# Escribimos el código HTML para cerrar la página
generaHTML cierra
# Enviar la lista por correo.
cat $LISTA_TITULOS | email --quiet --html --subject "Nuevo listado de peliculas" $EMAILS
# Limpiamos los ficheros generados.
rm $TMPPATH/*
|
TODOLIST: Hay que trabajar un poco más con los géneros de Series y Documentales ya que aun no se tratan.
Saludos. |
|
| Volver arriba |
|
 |
AZATHOR BOFH

Registrado: 13 Sep 2004 Mensajes: 866 Ubicación: Santiago, Chile
|
Publicado: Lun Mar 24, 2008 6:18 pm Asunto: |
|
|
muchas gracias excelente aporte, no tengo tantas pelis pero funciona muy bien.
podrias ponerlo en mygnet.net yo siempre busco codigos ahi y me son de mucha ayuda como en este caso. me servira mucho en mi proceso de aprendiz.
Salu2  _________________
 |
|
| Volver arriba |
|
 |
nordri Forista
Registrado: 25 Mar 2005 Mensajes: 8
|
Publicado: Dom May 18, 2008 4:54 pm Asunto: |
|
|
Ahora aprendo un poco de Python y me dedico a reescribir códigos Bash. Alucino con la rapidez y simpleza de este nuevo lenguaje (nuevo para mi se entiende )
| Código: |
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Tercer script Python.
# Fede Diaz (nordri) Mayo 2008
# Este script recorre el disco externo y genera un listado de las peliculas
# en HTML con enlaces a film affinity.
import os
# Eliminamos la extension al nombre del archivo
def formateaNombrePeli(n):
t = n.split(".avi")
return t[0]
path = "/home/nordri/target/mnt/backup/pelis"
listadoPelis = open("/home/nordri/listado.html", "w")
# Escribimos en el fichero la cabezera HTML
listadoPelis.write("<html><head><title>El Listado de Peliculas</title>"\
"</head><body bgcolor=\"#efefef\" text=\"black\" " \
"link=\"blue\" vlink=\"#551A8B\" alink=\"red\">")
# Creamos la lista de generos y los ordenamos
generos = os.listdir(path)
generos.sort()
# En generos tenemos la lista de generos, luego, por cada uno recorremos los
# archivos y los metemos en pelis. De igual forma, por cada peli la formateamos
# (le quitamos la extensión) y la añadimos a la lista.
# Se hace una discriminación para evitar archivos de subtitulo y añadir algun
# subdirectorio (de Series y Documentales)
for nombreGenero in generos:
listadoPelis.write("<p><b>Peliculas del genero: " + nombreGenero + "</b></p><ol>")
pelis = os.listdir(path + "/" + nombreGenero)
pelis.sort()
for nombrePeli in pelis:
if nombrePeli.endswith("avi") or os.path.isdir(path + "/" + nombreGenero + "/" + nombrePeli):
nombrePeliFormato = formateaNombrePeli(nombrePeli)
listadoPelis.write("<li><a href=\"http://www.filmaffinity.com/es/" \
"search.php?stext=" + nombrePeliFormato + \
"&stype%5B%5D=title&genre=&country=&fromyear=&" \
"toyear=\">" + nombrePeliFormato + "</a></li>")
listadoPelis.write("</ol>")
# Cerramos la página HTML
listadoPelis.write("</body></html>")
# Cerramos el fichero
listadoPelis.close()
|
Lo he publicado debajo del primero para comparar bien entre los dos.
Saludos. |
|
| Volver arriba |
|
 |
|
|
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
|
La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute", el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros países
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute, the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries
Powered by phpBB © 2001, 2002 phpBB Group
Directorio web -
Contactos -
Doraemon Games
|