Class NavThread

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--NavThread
All Implemented Interfaces:
java.lang.Runnable

public class NavThread
extends java.lang.Thread

Cette classe génère un processus qui se connecte aux pages HTML à visiter afin de les analyser et de rajouter ds la base de données du crawler tous les liens contenus ds ces pages.

Rem: Les processus engendrés par cette classe sont appelés 'processus de navigation'.


Field Summary
protected  Pgsql bd
          Objet permettant de communiquer avec la base de données du crawler.
protected  int BOUCLE_MAX
          Nombre maximum de répétitions d'une requête avant que celle-ci ne soit considérée comme échouée.
protected  java.util.Properties[] dicos
          Tableau de dictionnaires de mots à ignorer lors du parsage.
protected  boolean in_getPage
          Drapeau signalant que le processus se trouve actuellement dans un appel à la méthode PageWeb getPage() de la classe WebFifo.
protected  int max_depth
          Pour limiter la profondeur de recheche.
protected  java.io.PrintStream outLog
          Flux d'entrée sur le fichier de journalisation.
protected  WebFifo pile_pages
          Pile FIFO contenant les pages à visiter.
protected  boolean to_finish
          Drapeau signalant que le processus doit s'arrêter.
protected  VerifThread verif_proc
          Objet contenant le processus de vérification du crawler.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
NavThread(java.lang.String nom, java.io.PrintStream outLog, java.util.Properties[] dicos, WebFifo pile_pages, VerifThread verif_proc, int max_depth)
          Construit un nouvel objet NavThread pret à créer un nouveau processus pour compléter et mettre à jour la base de données du crawler.
 
Method Summary
protected  Page caractPage(java.net.URL url)
          Recupère toutes les caractéristiques d'une page (qu'on s'apprète à parser).
 void finish()
          Permet un arrêt propre du processus.
protected  int getIdSite(java.lang.String site_url)
          Récupère l'identificateur d'un site dans la base de données.
protected  int insertHttpDB(java.util.Hashtable ht_liens, int id_page)
          Insère tous les liens http d'une page web dans la base de données du crawler.
protected  int insertMailDB(java.util.Hashtable ht_liens, int id_page)
          Insère tous les liens de type mailto d'une page web dans la base de données du crawler.
protected  int insertPageDB(java.lang.String fin_url, int iSite)
          Insert dans la base de données la page passée en argument.
protected  void insertPagePile(java.util.Hashtable ht_liens, PageWeb pw)
          Insert une page html dans la pile des pages à visiter.
protected  int insertPictDB(java.util.Hashtable ht_liens, Page page, java.net.URL url)
          Insère tous les liens de type img (c'est à dire vers une image) d'une page web dans la base de données du crawler.
protected  int insertSiteDB(java.lang.String site_url)
          Insert dans la base de données le site passé en argument.
protected  java.lang.String newPictFile(java.lang.String path, java.net.URL url)
          Télécharge une image et la stocke dans un fichier dans le répertoire ..
protected  java.lang.String racine(java.net.URL url)
          Extrait de l'url d'une page web le chemin de celle-ci, c'est à dire supprime de l'url absolue le nom du fichier html contenant la page.
 void run()
          Méthode déterminant le fonctionnement du processus.
protected  void setLastModif(int id_page, int lastModifDate)
          Modifie la date de dernière modification d'une entrée de la table Page dans la base de données.
protected  void suppPictFile(java.lang.String fichier)
          Supprime un fichier image du système.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

BOUCLE_MAX

protected final int BOUCLE_MAX
Nombre maximum de répétitions d'une requête avant que celle-ci ne soit considérée comme échouée. En effet, il est possible (et normal) pour divers raisons qu'une requête échoue alors qu'elle devrait réussir.

See Also:
Constant Field Values

to_finish

protected boolean to_finish
Drapeau signalant que le processus doit s'arrêter.


in_getPage

protected boolean in_getPage
Drapeau signalant que le processus se trouve actuellement dans un appel à la méthode PageWeb getPage() de la classe WebFifo.

See Also:
LockedFifo.get()

dicos

protected java.util.Properties[] dicos
Tableau de dictionnaires de mots à ignorer lors du parsage.

Ce tableau est partagé par tous les processus de navigation. Il s'agit du tableau qui a été construit dans la classe Crawler

See Also:
Crawler.dicos, Crawler.loadDico(java.lang.String,int)

outLog

protected java.io.PrintStream outLog
Flux d'entrée sur le fichier de journalisation.

Ce flux est partagé avec les autres processus de navigation (NavThread) ainsi que le processus de vérification (VerifThread).

See Also:
VerifThread

pile_pages

protected WebFifo pile_pages
Pile FIFO contenant les pages à visiter.

Cette pile est partagée par tous les processus de navigation.


verif_proc

protected VerifThread verif_proc
Objet contenant le processus de vérification du crawler.

Ce qui permet aux processus de navigations d'avertir ce dernier si une nouvelle page a été insérée dans la base de données.

See Also:
VerifThread.is_new_page

bd

protected Pgsql bd
Objet permettant de communiquer avec la base de données du crawler.


max_depth

protected int max_depth
Pour limiter la profondeur de recheche.

Constructor Detail

NavThread

public NavThread(java.lang.String nom,
                 java.io.PrintStream outLog,
                 java.util.Properties[] dicos,
                 WebFifo pile_pages,
                 VerifThread verif_proc,
                 int max_depth)
Construit un nouvel objet NavThread pret à créer un nouveau processus pour compléter et mettre à jour la base de données du crawler.

Parameters:
nom - nom du processus
outLog - flux vers le fichier de journalisation
dicos - tableau contenant tous les dictionnaires des mots à ignorer
pile_pages - pile FIFO stockant les pages à visiter
See Also:
outLog, dicos, pile_pages
Method Detail

finish

public void finish()
Permet un arrêt propre du processus.

L'arrêt n'est pas immédiat, il s'agit plutôt d'une demande d'arrêt permettant au processus de terminer ce qu'il est en train de faire et l'empéchant d'enchainer sur une nouvelle tâche.


insertSiteDB

protected int insertSiteDB(java.lang.String site_url)
                    throws java.sql.SQLException
Insert dans la base de données le site passé en argument.

Parameters:
site_url - l'url du site a inséré dans la base de données
Returns:
l'identificateur du site dans la base de données du crawler
Throws:
java.sql.SQLException - En cas d'erreur de communication avec la base de données ou de réponses incohérentes de sa part.

insertPageDB

protected int insertPageDB(java.lang.String fin_url,
                           int iSite)
                    throws java.sql.SQLException
Insert dans la base de données la page passée en argument.

Une page se définit par le site auquel elle appartient et le chemin indiquant le fichier contenant son code (ce chemin peut être vide, par exemple pour http://www.free.fr)

La date de dernière modification est mise à 0 initialement.

Returns:
l'identificateur du site dans la base de données du crawler
Throws:
java.sql.SQLException - En cas d'erreur de communication avec la base de données ou de réponses incohérentes de sa part.

getIdSite

protected int getIdSite(java.lang.String site_url)
Récupère l'identificateur d'un site dans la base de données.

Si ce site n'existe pas encore dans la base de données, il est inséré.

Parameters:
site_url - L'url du site
Returns:
  • l'identificateur du site si tout se passe bien
  • -1 en cas d'erreur de requête
See Also:
insertSiteDB(String)

caractPage

protected Page caractPage(java.net.URL url)
Recupère toutes les caractéristiques d'une page (qu'on s'apprète à parser).

Si celle-ci n'est pas encore présente dans la base de données (c'est à dire si elle n'a jamais été visitée), elle est insérée.

Parameters:
url - l'url de la page dont on veut connaître les caractéristiques
Returns:
Un objet de type Page contenant les caractéristiques de la page

racine

protected java.lang.String racine(java.net.URL url)
Extrait de l'url d'une page web le chemin de celle-ci, c'est à dire supprime de l'url absolue le nom du fichier html contenant la page.

Par exemple, http://www.truc.fr/rep/page.htm -> http://www.truc.fr/rep/

Parameters:
url - l'objet représentant la page dont on veut connnaître la racine
Returns:
La racine de la page sous forme de chaine de caractères

insertHttpDB

protected int insertHttpDB(java.util.Hashtable ht_liens,
                           int id_page)
                    throws java.sql.SQLException
Insère tous les liens http d'une page web dans la base de données du crawler.

Cette méthode s'appuie entièrement sur les fonctions ins_http_url et ins_http_id de la base de données.

Parameters:
ht_liens - table de hachage contenant:
  • le nom des liens http trouvés dans la page
  • les mots référençant ces liens
  • le nombre de fois qu'un mot référence un lien
id_page - l'identificateur (dans la base de données) de la page qui vient d'être parsée
Returns:
Le nombre de liens insérés dans la base de données
Throws:
java.sql.SQLException - Emis lors d'une erreur inattendue.
See Also:
"Pour plus de renseignement sur le déroulement de l'insertion, voir le code des fonctions ins_http_url et ins_http_id dans le fichier crawler.sql"

insertPagePile

protected void insertPagePile(java.util.Hashtable ht_liens,
                              PageWeb pw)
Insert une page html dans la pile des pages à visiter.

Quand on parse une page, tous les liens html trouvés dans cette page sont mis dans la pile des pages à visiter pour être parser à leur tour.

Normalement, il ne faut ajouter à cette pile que des pages n'allant pas à une profondeur au-delà de la profondeur maximale d'exploration et n'étant pas déjà présente dans la pile. Ces vérification ne sont pas faite ici, mais dans la méthode put(PageWeb) de la classe WebFifo.

Parameters:
ht_liens - tous les liens html trouvés dans la page parsée
pw - objet représentant la page parsée
See Also:
WebFifo.put(PageWeb)

setLastModif

protected void setLastModif(int id_page,
                            int lastModifDate)
                     throws java.sql.SQLException
Modifie la date de dernière modification d'une entrée de la table Page dans la base de données.

Parameters:
id_page - Identificateur de la page dont il faut modifier la date de dernière modification.
lastModifDate - La nouvelle date de dernière modification.
Throws:
java.sql.SQLException - En cas d'erreur de requête.

insertMailDB

protected int insertMailDB(java.util.Hashtable ht_liens,
                           int id_page)
                    throws java.sql.SQLException
Insère tous les liens de type mailto d'une page web dans la base de données du crawler.

Cette méthode s'appuie entièrement sur les fonctions ins_mail_adr et ins_mail_id de la base de données.

Parameters:
ht_liens - table de hachage contenant:
  • le nom des liens mail trouvés dans la page
  • les mots référençant ces liens
  • le nombre de fois qu'un mot référence un lien
id_page - l'identificateur (dans la base de données) de la page qui vient d'être parsée
Returns:
Le nombre de liens insérés dans la base de données
Throws:
java.sql.SQLException - Emis lors d'une erreur inattendue.
See Also:
"Pour plus de renseignement sur le déroulement de l'insertion, voir le code des fonctions ins_mail_adr et ins_mail_id dans le fichier crawler.sql"

insertPictDB

protected int insertPictDB(java.util.Hashtable ht_liens,
                           Page page,
                           java.net.URL url)
                    throws java.lang.Exception
Insère tous les liens de type img (c'est à dire vers une image) d'une page web dans la base de données du crawler.

L'insertion de chaque image se fait en 3 temps:

Parameters:
ht_liens - table de hachage contenant:
  • le nom des liens mail trouvés dans la page
  • les mots référençant ces liens
  • le nombre de fois qu'un mot référence un lien
page - Objet contenant les caractéristiques (notamment id_site et id_page) de la page qui vient d'être parsée
url - L'url de la page dans laquelle on a trouvé l'image (nécessaire pour récupérer celle-ci).
Returns:
Le nombre de liens insérés dans la base de données
Throws:
java.sql.SQLException - Emis lors d'une erreur inattendue avec la base de données
java.io.IOException - Erreur de création du fichier où on va stocker l'image ou d'écriture dedans (voir la méthode newPictFile(String,URL))
java.lang.SecurityException - Problème de droit d'accès au fichier (voir la méthode newPictFile(String,URL))
java.io.FileNotFoundException - Impossible de retrouvé le fichier (voir la méthode newPictFile(String,URL))
java.lang.Exception
See Also:
"Pour plus de renseignement sur le déroulement de l'insertion, voir le code des fonctions ins_pict_nom et ins_pict_id dans le fichier crawler.sql", newPictFile(String,URL)

suppPictFile

protected void suppPictFile(java.lang.String fichier)
Supprime un fichier image du système.

Deux raisons peuvent amener à supprimer un fichier image:

Remarque: les fichiers images se trouvent tous dans le répertoire ../data/.

Parameters:
fichier - Le nom du fichier contenant une image.

newPictFile

protected java.lang.String newPictFile(java.lang.String path,
                                       java.net.URL url)
                                throws java.io.IOException,
                                       java.lang.SecurityException,
                                       java.io.FileNotFoundException
Télécharge une image et la stocke dans un fichier dans le répertoire ../data/pict .

Parameters:
path - Le chemin de l'image dans le site
url - L'url de la page dans laquelle on a trouvé le lien (pour connaître l'url du site)
Returns:
Suivant le déroulement de la méthode:
  • Le nom du fichier dans lequel l'image a été stockée.
  • null en cas d'erreur non grave (le processus peut continuer)
Throws:
java.io.IOException - Erreur de création du fichier où on va stocker l'image ou d'écriture dedans
java.lang.SecurityException - Problème de droit d'accès au fichier
java.io.FileNotFoundException - Impossible de retrouvé le fichier

run

public void run()
Méthode déterminant le fonctionnement du processus.

Ce processus permet d'alimenter la base de données du crawler en nouveaux liens et de mettre à jour les pages ayant déjà été visitée.

Ce processus peut se décomposer en trois étapes se répétant indéfiniment tant que la méthode finish() n'a pas été appelée:

Specified by:
run in interface java.lang.Runnable
Overrides:
run in class java.lang.Thread