- Écrivez la méthode SimpleCrawler.continueCrawling() : elle doit répondre
affirmativement si et seulement si la queue des URLs à visiter n'est pas vide (méthode
Queue.isEmpty()), et si on n'a pas encore visité plus d'URLs qu'on a dit au
constructeur de SimpleCrawler.
- Finissez le corps de la méthode SimpleCrawler.getContent(CrawlerUrl url)
private String getContent(CrawlerUrl url) { // methode essentielle --
// recuperation du fichier .html depuis le serveur
HttpClient httpclient = new DefaultHttpClient();
String text = new String();
try {
HttpGet httpget = new HttpGet(url.getUrlString()); //construction
// de l'objet qui fera la connexion
System.out.println("executing request " + httpget.getURI());
// construction de l'objet qui gerera le dialogue avec le serveur
ResponseHandler responseHandler =
new BasicResponseHandler();
text = httpclient.execute(httpget, responseHandler); //et on y va
System.out.println("----------------------------------------");
System.out.println(text);
System.out.println("----------------------------------------");
}
catch(Throwable t) {
System.out.println("OOPS YIKES "+ t . toString());
t . printStackTrace();
}
finally {
// Lorsque on n'a plus besoin de l'objet de type HttpClient
// on ferme la connexion pour eliberer rapidement les resources
// systeme qu'on avait monopolisees
httpclient.getConnectionManager().shutdown();
}
// appeler la methode de SimpleCrawler qui marque l'URL comme visite
// et qui l'insere dans la liste des URLs visites
// appeler la methode de CrawlerUrl qui recoit le texte HTML brut
// (et le donne au parseur jsoup, pour en extraire le texte, le titre,
// les liens, etc,); l'objet CrawlerUrl a utiliser est 'url'
return text;
}
- Écrivez sur la feuille de papier l'utilité du try-catch dans getContent()
par rapport à ce qui peut se passer concernant les connexions, les liens, etc.
- Dans le shell, toujours depuis le répertoire tp1, allez dans le répertoire petitExemple.
Faites ls -l *_1.txt et écrivez sur la feuille de papier les noms de fichiers que vous voyez apparaître.
Regardez le contenu du fichier download_1.txt. Assurez-vous que votre serveur tourne toujours dans l'autre shell,
et allez avec le browser à l'adresse
http://localhost:8123/data/indexClean.html
et cliquez sur biz-01. Comparez le texte qu'affiche le browser et le contenu du fichier download_1.txt :
la seule différence est le formattage.
- Regardez maintenant le contenu du fichier title_1.txt -- c'est bien le titre du document.
- Regardez maintenant le contenu du fichier url_1.txt -- c'est bien l'url du document.
- Faites maintenant ls -l url_*.txt et regardez le contenu de ces fichiers, pour les numéros 1, 2, et 3. Ces
numéros sont ce qu'on appelle IDENTIFICATEUR DE DOCUMENT (document id). Dans le code, la donnée
membre numberItemsSaved est celle qui numérote les documents au fur et à mesure. Écrivez sur
la feuille de papier le nom de la méthode de SimpleCrawler qui l'incrémente.
- Finissez le corps de la méthode SimpleCrawler.saveContent(CrawlerUrl url), sachant que outputPath est
une donnée membre qui est déjà remplie par le constructeur.
private void saveContent(CrawlerUrl url) throws Exception {
String fileId = String.valueOf(numberItemsSaved);
BufferedWriter rankOutput =
new BufferedWriter(
new FileWriter(outputPath + "/rankscore_"+ fileId +".txt"));
rankOutput . write("0.0");
rankOutput . flush();
rankOutput . close();
String docContent;
String docTitle;
// TRAVAIL A FAIRE
// recuperez dans docContent le texte extrait avec jsoup de la
// variable url, en utilisant une methode de CrawlerUrl
// recuperez dans docTitle le titre extrait avec jsoup de la
// variable url, en utilisant une methode de CrawlerUrl
this.crawlOutput.append( url.getUrlString()+ " " + fileId).append(NL);
// tout comme pour 'rankscore', creez le fichier de nom
// outputPath + "/download_"+ fileId +".txt"
// sauvegarder dedans docContent
// faire flush() et close()
// sauvegardez le titre dans son fichier, similairement
// sauvegardez l'url.getUrlString() dans son fichier, similairement
}
- Finissez le corps de la méthode SimpleCrawler.saveLinks(CrawlerUrl url)
private void saveLinks(CrawlerUrl url) throws Exception {
Collection<String> urlStrings = url . getLinks();
// TRAVAIL A FAIRE
// mettez l'indice du document courant (variable numberItemsSaved)
// comme String dans fileId
// creez le fichier nomme
//
// outputPath + "/outlinkurls_"+ fileId +".txt"
//
// sauvegardez dedans iterativement chaque URL de la collection
// urlStrings, suivie de NL
// flusher et fermer l'ecriture
}
- Finissez le corps de la méthode SimpleCrawler.addUrlsToUrlQueue(CrawlerUrl url)
private void addUrlsToUrlQueue(CrawlerUrl url) {
// TRAVAIL A FAIRE
// recuperer la collection d'URL a l'aide d'une methode
// de la classe CrawlerUrl
int depth = url.getDepth() + 1;
// pour chaque chaine de caracteres URL de la collection
//
///// si la liste (table de hachage) des URL visites (visitedUrls)
///// ne contient pas cette URL
/////
////////// rajouter a la queue des URL a visiter (methode Queue.add())
////////// un nouvel objet de type CrawlerUrl. Le constructeur prend
////////// comme arguments cette chaine URL et la variable depth
/////
///// finsi
//
}