Autor
Christian
Gustavo
Riva http://cgrsoftware.com
Programa
un Buscador
para tu
Sitio
Web
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:
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.
El mini
formulario
debera
ser el
siguiente:
<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>";