jueves, 10 de junio de 2010

Fortunes con javascript y perl

¿Quien no conoce las miticas frases que suelen salir cuando se hace login en un sistema? (al menos en Slackware), tambien conocidas como Galletas de la suerte, fortunes, o algo asi...

¿Seria curioso poder usarlas tambien en una pagina web y que cada vez que carge la pagina salga una diferente, no?, pues no es demasiado dificil. Si las instalaste " sudo apt-get install fortune " puedes encontrar varias en /usr/share/games/fortunes/ , el formato que siguen es bastante sencillo, es texto plano, separando una "galleta" de otra con una linea con solo un %, seria algo asi:

Frase nº 1
%
Frase nº 2
%
Frase nº 3
...

Siendo tan sencillo el formato, se pueden aprovechar facilmente los archivos para cualquier cosa, por ejemplo (o para descargar [fort2js.pl] ):


#!/usr/bin/env perl

if ($#ARGV != 1){ # Se comprueba que se especificaron los dos archivos
    print "./fort2js.pl <fortune> <javascript>\n";
    exit(0);
}

$fname = $ARGV[0];
$foutname = $ARGV[1];

print "fort2js: ".$fname." -> ".$foutname."\r\n";

$fname = "<".$fname; # Archivo que se lee
$foutname = ">".$foutname; # Archivo que se escribe
$i = 0; # nº de fortunes
open (F, $fname);
open (O, $foutname);
print O "function get_cookie(v){var cookie = new Array(\""; # Cabecera de la funcion

while ($line = <F>){
    if (substr($line,0,1) eq "%"){ # Si es el fin de una fortune
        print O "\",\""; # Nueva posicion en el array
        $i++; # Una fortune mas
    }
    else{
        $line =~ s/\ \ /\ /g; # Se eliminan los dobles espacion
        $line =~ s/"/\\"/g; # Se escapan las comillas
        $line =~ s/\n/<br\/>/g; # Se cambian los saltos de linea por <br/>
        $line =~ s/\r//g; # Se eliminan los retornos de carro
        print O $line;
    }
}
print O "\");return cookie[v]}"; # Fin de la funcion
print O "function max_cookie(){return ".$i.";}"; # Funcion max_cookie()
close F, O;


Esto sirve para convertir un archivo de fortune's en uno de Javascript que permita usar las "galletas" con dos funciones, get_cookie(i) para recuperar la frase numero i y max_cookie() que servira para saber de cuantas "galletas" podemos hacer uso.
El archivo que resulta de hacer ./fort2js.pl <archivo de galletas> < archivo de salida> se puede usar muy facilmente, solo habria que subirlo a algun lugar, y añadir algo como esto al codigo HTML donde queramos que se muestre:


<div id="cookie">[Cargando...]</div>
<script type="text/javascript" src="http://sitio.donde.esta/archivo/donde/esta"></script>
<script type="text/javascript"><!--//

var rand=Math.floor(Math.random()*max_cookie());
document.getElementById('cookie').innerHTML=get_cookie(rand); //--></script>

Y ya estan listas las galletas de la fortuna :D

Hasta ahora!
[Referencias]
http://www.w3schools.com/js/default.asp
http://en.wikipedia.org/wiki/Fortune_(Unix)

No hay comentarios:

Publicar un comentario