Programa un Buscador para tu Sitio
Christian Gustavo Riva
Un buscador de contenidos
en un Sitio Web no solo es sinonimo de cierto prestigio o calidad en el
desarrollo, sino que ademas es una excelente y utilisima opcion para los
usuarios que lo visiten, particularmente si tienes muchas paginas.
El siguiente codigo te mostrara
como puedes hacer tu mismo un Buscador en Perl, de manera muy simple y
sin ningun enfasis en el diseño de la pagina de resultados.
La implementacion del buscador
se encuentra dividida en 3 etapas:
-
El codigo en Perl, ubicado en
la carpeta CGI-BIN (o similar) de tu sitio.
-
El mini formulario de busqueda
dentro de tus paginas HTML
-
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 #
# https://www.programasprogramacion.com
#
###################################
#!/usr/bin/perl
use strict;
## Utilizamos
el modulo CGI para tomar el formulario Web:
use Cwd;
my $directorio =
getcwd;
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 =
'https://www.programasprogramacion.com';
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>";