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 Tu dois utiliser le repo GitHub que ton prof t'a envoyé. 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.

​2 point Prévois et implémente un plan de test permettant de tester toutes les configurations et situations possibles pour la validation des arguments du programme.

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/3M5-Intro-Mobile/z/index.html
htps://info.cegepmontpetit.ca/3M5-Intro-Mobile/z/1.html
https://info.cegepmontpetit.ca/3M5-Intro-Mobile/z/1.html
https://info.cegepmontpetit.ca/3M5-Prog3/z/sub/5.html

On devrait obtenir la trace suivante :

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

Collecte des courriels pendant l'exploration​

​1 point Le programme collecte les adresses courriels valides contenues dans chaque page. 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/3M5-Intro-Mobile/z/index.html
https://info.cegepmontpetit.ca/3M5-Intro-Mobile/z/1.html
https://info.cegepmontpetit.ca/3M5-Intro-Mobile/z/2.html
https://info.cegepmontpetit.ca/3M5-Intro-Mobile/z/sub/3.html
https://info.cegepmontpetit.ca/3M5-Intro-Mobile/z/sub/aaa/index.html
https://info.cegepmontpetit.ca/3M5-Intro-Mobile/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.

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.