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 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 La classe principale s'appelle KotCrawlerDupont.kt

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

Correction

L'ensemble de 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 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 commandes

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 commandes. 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 Si l'utilisateur a bien entré 2 arguments, il faut valider l'existence du fichier avec les urls. Il faut afficher un message significatif si le fichier n'existe ou s'il n'est pas accesible en lecture 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.

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 fichier est accessible en écriture

Exemple - Arguments : urls.txt courriels.txt

Le fichier urls.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
      • afficher le titre de la page
      • afficher 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

amon.ra@egypt.com
biloubilou@microsoft.com
bob.gilford@patatoes.com
indentez.lecode@cmieux.org
johnny@go.com
joris@aaa.hlm
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 urls des pages et les convertir en URL absolues.

Tu dois sauvegarder des urls dans le fichier a-urls.txt.

Itération sur les fichiers (avancé)

1 point Répéter le traitement précédent en partant du fichier a-urls.txt. En itérant, on accumulera les courriels sur toutes les itérations pour n'écrire qu'une seule fois le fichier avec tous les courriels trouvés.

TODO faire s'arreter quand toutes les urls ont déjà été explorées.

Exemple de séquence de fichiers si on part de l'index du site de correction.