|
1. El codigo en Perl, ubicado en la carpeta CGI-BIN (o similar) de tu sitio.
2. El mini formulario de busqueda dentro de tus paginas HTML
3. Los delimitadores de "bloques" dentro de cada una de las paginas HTML de tu Sitio que quieras que sean exploradas.
<FORM ACTION="http://www.tu-dominio/cgi-bin/buscador.pl">
Palabras a buscar: <INPUT TYPE=TEXT NAME=topicos></FORM>
(lo unico importante de este formulario es nombrar "topicos" a la variable donde se deben ingresar las palabras a buscar, y la ubicacion correcta del script "buscador.pl" dentro de tu sitio).
Los delimitadores de bloques son solo dos TAGS HTML que deberas agregar en todas las paginas que quieras que sean dadas como resultados de las busquedas.
Estos dos TAGS (inicio y final del bloque) deberan estar al comienzo del texto que quieras que sea analizado, y al final del mismo.
Un ejemplo seria el siguiente:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Este texto no quiero que sea analizado por el buscador
por lo que sera omitido de la busqueda
<!$>
pero este texto SI quiero que sea analizado y aparezca en los resultados
si el usuario ingreso alguna palabra incluida en este bloque
<!\$>
Finalmente, este texto tampoco sera analizado ya que no se encuentra
encerrado entre los TAGS delimitadores
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
La posibilidad de delimitar por bloques determinados contenidos de cada una de las paginas te permitira omitir de los resultados de busqueda textos irrelevantes (menues, cabeceras, etc).
Recuerda que el codigo es para uso libre y su finalidad es introducirte en los conceptos que trata y animarte a que experimentes por tu cuenta.
Si publicas u ofreces a terceros una version modificada del mismo, no olvides mencionar al autor original como figura en su cabecera.
.
BUSCADOR.PL
###################################
# (C) 2001 Christian Gustavo Riva #
# http://www.cgrsoftware.com #
###################################
#!/usr/bin/perl
use strict;
## Utilizamos el modulo CGI para tomar el formulario Web:
use CGI;
my $cgi = new CGI;
## Capturamos las palabras a buscar:
my $topicos = $cgi->param('topicos');
## Direccion URL de nuestro Sitio Web:
## (no agregues un slash "/" al final!!)
my $host = 'http://www.cgrsoftware.com';
## Path local de nuestro Sitio Web:
## (agrega un slash "/" al final!!)
my $directorio = '/www/docs/cgrsoftware.com/public_html/';
my $coincidencias = 0;
my $titulo;
print "Content-type: text/html\n\n";
## Comenzamos a dar salida a los resultados:
print "Buscando por <B>$topicos</B>:<BR>";
## Abrimos (si podemos) el directorio a explorar:
unless( opendir(DIR, $directorio ) )
{ print "Error: $!"; exit; }
## Codigo HTML para mostrar resultados numerados:
print '<ol>';
## Tomamos uno por uno a los archivos del directorio:
while ($_=readdir(DIR))
{
## No vamos a analizar carpetas ni archivos que no
## tengan extension .HTM o .HTML:
next if -d $_ || $_ !~ /.htm/;
## Abrimos la pagina (si podemos):
if( open( PAGINA, "$directorio"."$_" ) )
{
## Cargamos toda la pagina en una matriz
## y cerramos el archivo:
my @pagina = <PAGINA>;
close( PAGINA );
## Convertimos la matriz @pagina en una
## variable sin saltos de linea:
## (requerido para analizarlas)
my $pagina = join (" ", @pagina);
$pagina =~ s/\n/ /g;
## Solo analizamos la pagina si encontramos
## los delimitadores <!$> ... <!/$>
if( $pagina =~ /<\!\$>(.*)<\!\/\$>/ )
{
## Copiamos en $bloque el texto contenido
## entre los delimitadores:
my $bloque = $1;
## ¿Se encuentran los topicos buscados en
## el bloque de la pagina?
if( $bloque =~ /$topicos/gi )
{
$coincidencias++;
## Tomamos el Titulo de la pagina, o en
## su defecto le asignamos un nombre general:
if ($pagina =~ /<title>(.*)<\/title>/i)
{ $titulo = $1; }
else { $titulo = "Pagina sin nombre"; }
## Damos salida al resultado en HTML con el
## Titulo y Direccion Web de la pagina:
print "<li><a href=\"$host/$_\">";
print "$titulo</a></li><BR>";
}
}
}
}
close (DIR);
print '</ol>';
print "<BR>Paginas encontradas: <B>$coincidencias</B>";
|