Aller au contenu principal

Travail 1 : KotCrawler

Parcourir le Web

Écrivons un programme qui parcourt des pages web en :

  • cherchant les hyperliens qu'elles contiennent
  • extrayant les courriels valides qu'on y trouve

Vous êtes fortement encouragés à utiliser des librairies vues dans le cours (ou pas) pour aider : lib standard, Guava, jsoup etc.

Format de projet

Remplacer Dupont par TON nom de famille

3 points Il y a minimum 4 commits valides dans un français correct (voir ici). Ces points sont conditionnés à la remise d'au moins un commit par semaine de cours.

0,5 point Le fichier principal s'appelle KotCrawlerDupont.kt

0,5 point Le package de l'application est crawly.dupont

Correction

La correction est effectuée sur le site de correction. Tu peux tester ton bot sur d'autres sites mais ça n'aura pas d'impact sur la correction.

Si tu n'es pas certain.e que ton code fonctionne correctement dans un exemple spécifique, demande au prof!

1 point Ton application doit afficher le message Bienvenue dans KotCrawlerDupont au démarrage (en remplaçant Dupont par ton nom de famille).

Arguments en ligne de commande

Ton application doit prendre 2 arguments en ligne de commande dans l'ordre spécifié ici.

Attention!

Il ne s'agit pas d'une application interactive. Tu dois passer les arguments en ligne de commande. Il est fortement recommandé de créer plusieurs configurations d'exécution pour tester plusieurs combinaisons de paramètres corrects ou incorrects.

1 point Si l'utilisateur ne fournit pas 2 arguments, on lui indique clairement comment utiliser l'application puis l'application s'arrête.

  • quels sont les arguments
  • un exemple d'utilisation

Exemple - Argument : allo

Merci de nous fournir 2 arguments :
- le chemin vers le fichier contenant les URL à explorer
- le nom du fichier à créer pour sauvegarder les courriels
Par exemple : urls.txt ../courriels.txt

1 point Il faut ensuite valider l'existence du fichier avec les URL. Il faut afficher un message significatif si le fichier n'existe pas, puis quitter.

Exemple - Arguments : X:\fichiernonexistant.txt courriels.txt

Nous avons rencontré un problème avec le chemin fourni : X:\fichiernonexistant.txt
Merci de fournir un chemin vers un fichier existant.

1 point Si le fichier existe, il faut s'assurer qu'il est accessible en lecture, sinon, quitter.

Exemple - Arguments : Z:\fichierexistantmaispaslisible.txt courriels.txt

Nous avons rencontré un problème avec le chemin fourni : Z:\fichierexistantmaispaslisible.txt
Le fichier existe mais ne semble pas accessible en lecture.

1 point Pour le nom du fichier pour les courriels, il faut s'assurer que :

  1. le fichier n'existe pas déjà
  2. le dossier (parent) est accessible en écriture (vous êtes capable d'écrire le fichier à cet endroit)

Exemple - Arguments : urls.txt courriels.txt

Le fichier courriels.txt existe déjà.

Exemple - Arguments : urls.txt c:\Windows\System32\courriels.txt

Le chemin spécifié n'est pas accessible en écriture.

Exploration

Si les arguments sont corrects, il faut alors commencer l'exploration des pages.

Pour chaque ligne du fichier en paramètre 1, tu dois :

  • tenter de télécharger la page
    • 1 point Si une page ne télécharge pas correctement, tu dois afficher un message significatif et passer à la page suivante.
    • 1 point Si le téléchargement a fonctionné, afficher :
      • le titre de la page;
      • l'URL complète de la page.

Exemple

Avec un fichier contenant les URL suivantes :

https://info.cegepmontpetit.ca/3N5-Prog3/z/index.html
htps://info.cegepmontpetit.ca/3N5-Prog3/z/1.html
https://info.cegepmontpetit.ca/3N5-Prog3/z/1.html
https://info.cegepmontpetit.ca/3N5-Prog3/z/sub/5.html

On devrait obtenir la trace suivante :

Am   https://info.cegepmontpetit.ca/3N5-Prog3/z/index.html
URL malformée : htps://info.cegepmontpetit.ca/3N5-Prog3/z/1.html
Stram https://info.cegepmontpetit.ca/3N5-Prog3/z/1.html
Pas de page à l'adresse : https://info.cegepmontpetit.ca/3N5-Prog3/z/sub/5.html

Collecte des courriels pendant l'exploration

1 point Le programme collecte les adresses courriels valides contenues dans chaque page pendant l'exploration. L'application doit sauvegarder la liste des courriels en minuscule dans un fichier dans le chemin spécifié en paramètre 2.

1 point Dans ce fichier, tu dois avoir chaque courriel sur une ligne séparée, classés dans l'ordre alphabétique. Si un courriel a été trouvé plusieurs fois dans l'exploration, tu dois supprimer les doublons.

Exemple pour la liste d'URL suivante

https://info.cegepmontpetit.ca/3N5-Prog3/z/index.html
https://info.cegepmontpetit.ca/3N5-Prog3/z/1.html
https://info.cegepmontpetit.ca/3N5-Prog3/z/2.html
https://info.cegepmontpetit.ca/3N5-Prog3/z/sub/3.html
https://info.cegepmontpetit.ca/3N5-Prog3/z/sub/aaa/index.html
https://info.cegepmontpetit.ca/3N5-Prog3/z/sub/aaa/page5.html

Le contenu du fichier de courriels devrait être :

amon.ra@egypt.com
biloubilou@microsoft.com
bob.gilford@patatoes.com
indentez.lecode@cmieux.org
johnny@go.com
joris@aaa.hlm
leon.deguet@gmail.com
pablito.escobar@escobar.org
pablo.deguet@gmail.com
programmation.reseau@choix.com

Collecte des liens dans les pages pendant l'exploration

Pendant l'exploration, tu dois collecter les URL des pages et les convertir en URL absolues.

  • 1 point Vos URL sont converties en absolues. Par exemple, l'URL 1.html trouvée dans la page index.html doit être convertie en https://info.cegepmontpetit.ca/3N5-Prog3/z/1.html.
  • 1 point Tu dois sauvegarder les URL dans le fichier a-urls.txt.

Itération sur les fichiers (avancé)

1 point L'idée est de répéter le traitement précédent en partant du fichier a-urls.txt :

  1. le fichier d'URL fourni est utilisé pour la première passe et on produit a-urls.txt
  2. on refait une passe en lisant les URL depuis a-urls.txt et on produit b-urls.txt
  3. on refait une passe en lisant les URL depuis b-urls.txt et on produit c-urls.txt
  4. etc.

Le programme s'arrête quand il n'y a plus de nouvelles URL à explorer (toutes les URL qu'on trouve ont déjà été vues).

Le programme doit accumuler les courriels de toutes les passes en mémoire et écrire une seule fois à la fin de l'exécution tous les courriels trouvés.