NAME
Circa::Indexer - provide functions to administrate Circa, a www search engine running with Mysql
SYNOPSIS
use Circa::Indexer;
my $indexor = new Circa::Indexer;
if (!$indexor->connect_mysql($user,$pass,$db))
{die "Erreur à la connection MySQL:$DBI::errstr\n";}
$indexor->create_table_circa;
$indexor->drop_table_circa;
$indexor->addSite("http://www.alianwebserver.com/",
'alian@alianwebserver.com',
"Alian Web Server");
my ($nbIndexe,$nbAjoute,$nbWords,$nbWordsGood) = $indexor->parse_new_url(1);
print "$nbIndexe pages indexées,"
"$nbAjoute pages ajoutées,"
"$nbWordsGood mots indexés,"
"$nbWords mots lus\n";
$indexor->update(30,1);
Look in admin.pl,admin.cgi,admin_compte.cgi
DESCRIPTION
This is Circa::Indexer, a module who provide functions to administrate Circa, a www search engine running with Mysql. Circa is for your Web site, or for a list of sites. It indexes like Altavista does. It can read, add and parse all url's found in a page. It add url and word to MySQL for use it at search.
This module can:
Remarques:
- This file are not added : doc,zip,ps,gif,jpg,gz,pdf,eps,png,
deb,xls,ppt,class,GIF,css,js,wav,mid
- Weight for each word is in hash $ConfigMoteur
How it's work ?
Circa parse html document. convert it to text. It count all word found and put result in hash key. In addition of that, it read title, keywords, description and add a weight to all word found.
Example:
my %ConfigMoteur=(
'facteur_keyword' =>15,
'facteur_description' =>10,
'facteur_titre' =>10,
'facteur_full_text' =>1,
'niveau_max' =>7,
'nb_min_mots' =>2
);
<html>
<head>
<meta name="KeyWords"
CONTENT="informatique,computing,javascript,CGI,perl">
<meta name="Description" CONTENT="Rubriques Informatique (Internet,Java,Javascript, CGI, Perl)">
<title>Alian Web Server:Informatique,Société,Loisirs,Voyages,Expression</title>
</head>
<body>
different word: cgi, perl, cgi
</body>
</html>
After parsing I've a hash with that:
$words{'informatique'}= 15 + 10 + 10 =35
$words{'cgi'} = 15 + 10 +1
$words{'different'} = 1
Words is add to database if total found is > $ConfigMoteur{'nb_min_mots'} (2 by default). But if you set to 1, database will grow very quicly but allow you to perform very exact search with many worlds so you can do phrase searches. But if you do that, think to take a look at size of table relation.
After page is read, it's look into html link. And so on. At each time, the level grow to one. So if < to $Config{'niveau_max'}, url is added.
VERSION
$Revision: 1.8 $
Manipulation des attributs
size_max($size)
Get or set size max of file read by indexer (For avoid memory pb).
set_agent
port_mysql($port)
Get or set the MySQL port
host_indexed($host)
Get or set the host indexed.
proxy($adr_proxy)
Positionne le proxy a utiliser le cas écheant.
$adr_proxy : Ex: 'http://proxy.sn.no:8001/'
prefix_table
Get or set the prefix for table name for use Circa with more than one time on a same database
connect_mysql($user,$password,$db,$server)
$user : User MySQL
$password : Password MySQL
$db : Database MySQL
$server : Adr IP MySQL
Connect Circa to MySQL. Return 1 on succes, 0 else
close_connect
Close connection to MySQL
Administrative globales methods
addSite($url,$email,$titre,$categorieAuto,$cgi,$rep,$file);
Ajoute le site d'url $url, responsable d'adresse mail $email à la bd de Circa
addLocalSite($url,$email,$titre,$local_url,$path,$urlRacine,$categorieAuto,$cgi,$rep,$file);
Add a local $url
updateUrl($compte,$id,$url,$urllocal,$titre,$description,$langue, $categorie,$browse_categorie,$parse,$valide,$niveau,$last_check,$last_update)
Update url $id on table $compte
parse_new_url($idp)
Parse les pages qui viennent d'être ajoutée. Le programme va analyser toutes les pages dont la colonne 'parse' est égale à 0.
Retourne le nombre de pages analysées, le nombre de page ajoutées, le nombre de mots indexés.
update($xj,$idp)
Reindexe les sites qui n'ont pas été mis à jour depuis plus de $xj jours
create_table_circa
Cree la liste des tables necessaires à Circa:
- categorie : Catégories de sites
- links : Liste d'url
- responsable : Lien vers personne responsable de chaque lien
- relations : Liste des mots / id site indexes
- inscription : Inscriptions temporaires
drop_table_circa
Detruit les tables de Circa
drop_table_circa_id
Detruit les tables de Circa pour l'utilisateur id
create_table_circa_id
Cree la liste des tables necessaires à Circa:
- categorie : Catégories de sites
- links : Liste d'url
- relations : Liste des mots / id site indexes
- stats : Liste des requetes
Fonctions HTML
start_classic_html
Affiche le debut de document (<head></head>)
get_liste_liens($id)
Rend un buffer contenant une balise select initialisée avec les données de la table links responsable $id
get_liste_liens_a_valider($id)
Rend un buffer contenant une balise select initialisée avec les données de la table links responsable $id liens non valides
get_liste_site
Rend un buffer contenant une balise select initialisée avec les données de la table responsable
get_liste_categorie($id)
Rend un buffer contenant une balise select initialisée avec les données de la table categorie responsable $id
fill_template($masque,$vars)
$masque : Chemin du template
$vars : reference du hash des noms/valeurs à substituer dans le template
Rend le template avec ses variables substituées. Ex: si $$vars{age}=12, et que le fichier $masque contient la chaine:
J'ai <? $age ?> ans,
la fonction rendra
J'ai 12 ans,
Methode administration par compte
admin_compte($compte)
Retourne une liste d'elements se rapportant au compte $compte:
$responsable : Adresse mail du responsable
$titre : Titre du site pour ce compte
$nb_page : Nombre de page pour ce site
$nb_words : Nombre de mots indexés
$last_index : Date de la dernière indexation
$nb_requetes : Nombre de requetes effectuées sur ce site
$racine : 1ere page inscrite
most_popular_word($max,$id)
Retourne la reference vers un hash representant la liste des $max mots les plus présents dans la base de reponsable $id
delete_url($compte,$id_url)
Supprime le lien $id_url de la table $compte/relation et $compte/links
valide_url($compte,$id_url)
Supprime le lien $id_url de la table $compte/relation et $compte/links
delete_categorie($compte,$id)
Supprime la categorie $id pour le compte de responsable $compte et tous les liens et relation qui sont dans cette categorie
rename_categorie($compte,$id,$nom)
Renomme la categorie $id pour le compte de responsable $compte en $nom
deplace_categorie($compte,$id1,$id2)
Move url from one categorie to another
inscription($email,$url,$titre)
Inscrit un site dans une table temporaire
Méthodes privées
look_at ($url,$idc,$idr,$lastModif,$url_local)
Ajoute les liens definis à l'URL $url à la base de donnée. Indexe les mots de chaque page
$url : Url de la page à indexer
$idc : Id de l'url dans la table links
$idr : Id du responsable de cette url
$lastModif : Ne parse pas la page si elle n'a pas été mis à jour
depuis cette date (facultatif)
$url_local : Chemin local pour accéder au fichier (facultatif)
Retourne (-1,0) si l'adresse est invalide, le nombre de liens trouvés dans la page ainsi que le nombre de mots trouves sinon.
add_site($url,$idMan,[$local_url],[$browse_categorie],[$niveau],[$categorie])
Ajoute un site à la table links.
$url : Url de la page à ajouter
$idMan : Id dans la table responsable du responsable de ce site
drop_site($id)
Supprime un site de la table personne. Cela supprime egalement les elements de la table links et relation qui appartiennent à ce site
$id : Id du site
get_meta($entete)
Parse et rend les meta-mots-clef et la meta-description de la page HTML contenu dans $entete
analyse_data($data,$facteur,%l)
Recupere chaque mot du buffer $data et lui attribue une frequence d'apparition. Les resultats sont ranges dans le tableau associatif passé en paramètre. Les résultats sont rangés sous la forme %l=('mots'=>facteur).
$data : buffer à analyser
$facteur : facteur à attribuer à chacun des mots trouvés
%l : Tableau associatif où est rangé le résultat
Retourne la référence vers le hash
getParent($id,%tab)
Rend la chaine correspondante à la catégorie $id avec ses rubriques parentes
get_first($requete)
Retourne la premiere ligne du resultat de la requete $requete sous la forme d'un tableau
AUTHOR
Alain BARBET alian@alianwebserver.com
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 66:
Non-ASCII character seen before =encoding in 'à'. Assuming CP1252