PASIPHAE
Laurent Eskenazi & Emmanuel Roubion

[download]


Tables des matieres

Pasiphae

Qu'est-ce que c'est ?

Pasiphae est un outil d'analyse de site web ecrit en Java. C'est une application Java, et non une applet executable dans un browser. Son but est d'examiner la structure d'un site web, et d'en proposer une representation graphique hierarchique basee sur les liens hypertextes entre les documents.

Guide de l'utilisateur

De quoi ai-je besoin ?

Pasiphae a ete ecrit avec: Sous Unix,veillez a ce que vos variables d'environnement PATH et CLASSPATH soit bien positionnees. PAr exemple:
    PATH=/opt/net/java/jdk1.1.5/bin/:rest_du_path
CLASSPATH=./:/opt/net/java/APIs/swing-0.7/swing.jar:/opt/net/java/APIs/swing-0.7/jlf.jar:/opt/net/java/APIs/swing-0.7/motif.jar:/opt/net/java/APIs/swing-0.7/windows.jar).


Je veux le faire tourner !

Une fois vos variables bien positionnees, Pasiphae se lance par la commande:
    > java Pasiphae
    

La fenetre principale suivante apparait:

Fenetre principale
(cliquer pour aggrandir l'image)

Il y a deux onglets: celui visible initialement, "View", est celui ou sera affichee la hierarchie du site. Il ne contient rien pour l'instant. "Configure" permet de saisir des parametres:

Illustration de l'onglet "Configure"
Onglet de configuration

Une fois ces parametres saisis, l'analyse est lance avec le bouton "Go !". Apres la phase de recherche (pour l'instant bloquante), la fenetre de visualisation est accessible. Voici deux resultats, de profondeur egal a 4:

Resultat sur http://www.essi.fr/ en mode HTML Resultat sur http://www.essi.fr/~eskenazi en mode HTML

Les radios button en haut de l'onglet "View" permettent de choisir le mode de visualisation: soir par nom d'URL, soir par titre de pages html (qui est le mode par defaut). Voici les meme exemples que precedemment, en mode URL:

Resultat sur http://www.essi.fr/ en mode URL Resultat sur http://www.essi.fr/~eskenazi en mode URL
On voit en plus sur ces exemples des Tooltips, utilises pour afficher le titre html en mode URL, et l'URL en mode Titre. (On ne voit pas le pointeur de la souris sur les captures: imaginez le sur chacun des noeuds selectionnes dans l'arbre...)

On peut egalement "zoomer" une entree. Quand une entree est selectionnee dans l'arbre, un clic sur le bouton "Zoom" (ou un double clic sur l'entree) fait apparaitre une nouvelle fenetre. Cette derniere recense toutes les ressources utilisee par la page (liens html, image gif ou jpeg, divers fichiers accessibles (.ps, .ra, .mpeg, .txt, ...)), et les presentent dans des tables, rangees par categories MIME.
Voici trois exemples:

Zoom sur http://www.essi.fr/, onglet ImageGif

Zoom sur http://www.essi.fr/, onglet TextHtml

Zoom sur http://www.essi.fr/~roubion, onglet Unknown

Trois remarques:

A propos du code

Le concept de la classe MIMEDoc

Dans Pasiphae la classe MIMEDoc est la classe mere de toutes les classes representant les differents objets MIME presents sur le web.

Dans la version courante de Pasiphae, plusieurs types MIME sont reconnus: text/plain (texte brut), text/html (page html), image/gif (image au format gif89a ou gif87a), image/jpeg(image au format jpeg), audio/x-mpeg (fichier audio au format mpeg), audio/x-pn-realaudio (fichier audio au format realaudio).

Chaque type MIME est implemente par une classe dont le nom et les methodes suivent des regles precises pour une raison que nous verrons plus bas. celles ci sont:

Chacune de ces classes derive donc de MIMEDoc et implemente un constructeur de la forme:

public MaClasse(HttpURLConnection urlc)
et eventuellement une methode parse:
public Vector parse(HttpURLConnection urlc)

Le constructeur doit, a partir de l'objet HttpURLConnection passee en parametre etre capable d'extraire les donnees pertinentes pour la classe, a partir du header HTTP recu.

La methode parse, est elle destinee a parser le contenu du document lui meme. Par exemple, pour la classe TextHtml, c'est dans cette methode que le document Html est parse et que des champs tels que le titre, l'auteur et les differents liens contenus dans la page sont extraits.

Le nom de la classe suit les regles suivantes: si une classe correspond a un type MIME donne, le nom de celle ci doit reprendre le nom du type MIME, en capitalisant la premiere lettre de chacun des sous-type MIME, en supprimant le '/' entre les deux sous-type, et en remplacant chacun des '-' presents dans le nom d'un type MIME par un '_'.

Par exemple le type MIME audio/x-mpeg correspond dans Pasiphae a la classe AudioX_mpeg.

En dernier lieu chacune de ces classes implementent des accesseurs dont le nom commence par 'get': getTitle, getAuthor, getGenerator pour la classe TextHtml


Comment ecrire de nouvelles classes de types mime ?

En suivant les regles enoncees ci dessus, il est tres aise d'ecrire une classe correspondant a un type MIME non gere.

Par exemple, si l'on decide d'ecrire une classe qui analyse les fichier compresses au format gzip, c'est a dire correspondant au type MIME application/x-gzip, il faudra implementer une classe nommee ApplicationX_gzip, derivant de MIMEDoc, implementant un constructeur et la methode parse, et presentant par exemple un accesseur 'getCompressionRatio' indiquant le taux de compression du fichier.

Une fois ce fichier ecrit, seul sa compilation sera necessaire pour que le type MIME application/x-gzip soit pris en compte dans l'application lors de son prochain lancement (cf. ci-dessous)


La reflexivite dans Pasiphae

Cette facilite d'ajouter de nouvelles classes correspondant aux differents type MIME est entierement due a l'utilisation de la reflexivite de Java.

Lorsque l'application recupere un document via le protocole HTTP, elle determine le type du document a partir du champ content-type du header HTTP. Une fois cette donnee connue, si une classe implementant ce type MIME existe (c.a.d une classe suivant les regles de nommage enoncees ci-dessus) alors son construicteur est appele pour cree un objet qui sera place dans notre hierarchie de document. Si une telle classe n'existe pas, alors une instance de la classe Unknown est cree.

Par la suite la methode parse() sera appelee sur l'objet nouvellement cree et si celui ci implemente cette methode, de nouvelles informations pourront etre recuperees.

La reflexivite est egalement utilisee dans l'interface graphique. Ainsi, l'interface graphique est capable, pour un objet MIMEDoc donne, de retrouver les methodes d'acces aux donnees membres. Ainsi, l'application sait retrouver les noms des champs a partir des methodes d'access, et donc les faire figurer dans les tables de la fenetre Zoom, en invoquant ces memes methodes.

Un test simple pour verifier cette affirmation consiste en:

Code source

Telechargement du source et executable


Documentation des classes


Bugs, a faire, ameliorations...

Bugs connus (pas encore de patches !):

A faire:

Ameliorations

mailto:roubion@essi.fr,eskenazi@essi.fr
roubion@essi.fr,eskenazi@essi.fr