Linux en Espanol Espontaneas - De tu ojo a la web
 
Script para listado de videos (tema #20685)
Publicar nuevo tema   Responder al tema    Foros de discusión -> Compartir Codigos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
nordri
Forista


Registrado: 25 Mar 2005
Mensajes: 8

MensajePublicado: Sab Mar 22, 2008 6:37 pm    Asunto: Script para listado de videos Responder citando

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
Ver perfil de usuario Enviar mensaje privado
AZATHOR
BOFH


Registrado: 13 Sep 2004
Mensajes: 866
Ubicación: Santiago, Chile

MensajePublicado: Lun Mar 24, 2008 6:18 pm    Asunto: Responder citando

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 Wink
_________________
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
nordri
Forista


Registrado: 25 Mar 2005
Mensajes: 8

MensajePublicado: Dom May 18, 2008 4:54 pm    Asunto: Responder citando

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 Wink )

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Publicar nuevo tema   Responder al tema    Foros de discusión -> Compartir Codigos Todas las horas son GMT
Página 1 de 1

 
Cambiar a:  
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