Buscador sin MySQL utilizando php
Buscador sin MySQL utilizando php
En este caso tan solo necesitamos saber de PHP y un poco de expresiones regulares. Básicamente lo que vamos a hacer en nuestro script es, a partir de un array con las direcciones Web (o URL) de los documentos HTML que deseamos incluir en nuestro sistema de búsquedas, cogeremos el contenido de estos, lo procesaremos y obtendremos un array con los títulos, metas y contenido de estos. Gracias a este array obtendremos las ocurrencias de las palabras clave y asignaremos una puntuación a cada página relacionada con el número de ocurrencias.
En nuestro caso, cada ocurrencia de la palabra clave en el titulo suma 5 puntos, en las meta “description” suman 3 puntos, en las meta “keywords” suman 2 y en el contenido 1 punto.
Código php:
//Funciones
function decodificar_html($str,$FLAG = false){
$all = get_html_translation_table(HTML_ENTITIES, ENT_NOQUOTES);
$entities = get_html_translation_table(HTML_SPECIALCHARS, ENT_NOQUOTES);
if($FLAG)
$ARR = $all;
else
$ARR = array_diff($all, $entities);
$str = strtr($str, array_flip($ARR));
return $str;
}
//Array con todos los archivos html
$urls = array(
'http://www.programacionsitiosweb.com/',
'http://www.programacionsitiosweb.com/articulos/css/como-crear-botones-personalizados-con-html-y-css/61/',
'http://www.programacionsitiosweb.com/articulos/php/busquedas-de-coincidencias-con-php-mysql./67/',
'http://www.programacionsitiosweb.com/programas/flash/adobe-flash-cs3/15/',
'http://www.programacionsitiosweb.com/scripts/mootools/moosearch-rc2/63/',
'http://www.programacionsitiosweb.com/articulos/mootools/moohug-plugin-para-mootools-y-galerias-de-imagen/24/',
'http://www.programacionsitiosweb.com/scripts/recursos/complementos-para-photoshop/59/'
);
if($_POST['key_words']){
$KW = $_POST['key_words'];
$data = array();
//Construimos un array con los campos SCORE,TITULO,META DESC y KW,CONTENIDO de cada uno de los archivos
for($i=0;$i $content = file_get_contents($urls[$i]);
//$content = utf8_decode($content);
$data[$i]['score'] = 0;
preg_match("|
$data[$i]['titulo'] = str_replace("'","\'",str_replace('"',"\"",$items[1]));
unset($items);
preg_match("||m", $content, $items);
$data[$i]['METAdesc'] = $items[1];
unset($items);
preg_match("||m", $content, $items);
$data[$i]['METAkw'] = str_replace(",",", ",$items[1]);
unset($items);
$content = str_replace("\n","", $content);
$content = str_replace("[\n\r]","", $content);
$content = str_replace("[\n]","", $content);
$content = str_replace("'","\'",$desc[$i].'. '.$content);
$content = str_replace('"',"\"",$content);
$content = strip_tags($content);
$data[$i]['contenido'] = decodificar_html($content,true);
}
//Comprovamos las ocurrencias de las palabras clave y vamos aumentando el SCORE
for($i=0;$i preg_match_all("|$KW|i", $data[$i]['titulo'], $items);
$data[$i]['score'] += count($items[0])*5;
unset($items);
preg_match_all("|$KW|i", $data[$i]['METAdesc'], $items);
$data[$i]['score'] += count($items[0])*3;
unset($items);
preg_match_all("|$KW|mi", $data[$i]['METAkw'], $items);
$data[$i]['score'] += count($items[0])*2;
unset($items);
preg_match_all("|$KW|i", $data[$i]['contenido'], $items);
$data[$i]['score'] += count($items[0])*1;
unset($items);
}
//Ordenamos el array por SCORE de mayor a menor
rsort($data);
//Parseamos
for($i=0;$i if($data[$i]['score'] != 0){
print("
TITULO de la página:
".$data[$i]['titulo']."
META DESCRIPTION de la página:
".$data[$i]['METAdesc']."
SCORE de la página:
".$data[$i]['score']);
}
}
}
?>
En primer lugar, tenemos una función que “limpia” el código HTML. Aunque no entiendas su comportamiento al 100% simplemente devuelve un string limpio de etiquetas HTML. Después creamos el array con las URL de las páginas.
Si se existen palabras clave enviadas, procesamos la búsqueda. Primero recorremos el array de direcciones extrayendo el código HTML y limpiándolo a la vez que interpretando cual es el titulo, las meta y el contenido.
Después volvemos a recorrer este array para buscar las ocurrencias y asignar la puntuación. Después ordenamos el array pos score de mayor a menor con la función rsort().
Y por último, mostramos el resultado de la búsqueda por pantalla si tiene la puntuación mayor que 0.
Ver el ejemplo en funcionamiento.
Las fundones preg_match_all y preg_match son funciones de php para buscar ocurrencias de expresiones regulares en un string.
El único inconveniente de este sistema es que no podemos utilizarlo con webs con demasiadas páginas o documentos HTML, ya que el tiempo de ejecución aumentaría demasiado.



