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.
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
- le fichier n'existe pas déjà
- 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.
- l'URL 1.html trouvée dans la page index.html doit être convertie en https://info.cegepmontpetit.ca/3N5-Prog3/z/1.html
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.