Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Dans cette partie, on va terminer notre script. Je vais déplacer, je pense, tout ça dans uneautre fonction. En fait, je vais renommer tout simplement cette fonction puisque cette fonction,
00:00:08 :qu'est-ce qu'elle fait ? Elle va récupérer le prix donc je vais l'appeler tout simplementgetCurrentPrice et on va lui passer, plutôt que de passer une URL, on va rendre notre script unpeu plus un peu plus robuste en passant juste le assign comme ça par la suite on pourrait
00:00:21 :imaginer que cet assign, on le passe directement dans le terminal via le module 6 qu'on pourraitrécupérer avec 6.argv. On pourrait récupérer le dernier argument qui est passé après le script
00:00:32 :et comme ça, ça nous permettrait de faire quelque chose du genre Python 3 main et de donner l'assignici dans le terminal. Si jamais on voulait avoir plusieurs scripts avec différents assigns,
00:00:41 :ça serait plus pratique comme ça. Pour l'instant, je ne vais pas faire tout ça mais je vais quandmême prévoir mon script pour que ce soit possible. Donc là, on va faire getCurrentPrice et à la
00:00:52 :place de URL, je vais mettre ici assign qui va être une chaîne de caractère et là dans l'URL,je vais reprendre tout ça ici et je vais le mettre directement comme ceci et on va juste insérer leassign qui va être passé à la fonction directement comme ça. Cette fonction d'ailleurs, on a encore
00:01:07 :des petits trucs à modifier, on n'a plus besoin d'écrire sur le disque, on va également gérerles erreurs donc là on va faire un try except avec la requête en cas de problème donc un try aveccette réponse. On va faire un response.raiseForStatus, s'il y a un problème donc on va faire un
00:01:22 :request.requestExceptionAsE et on va faire un logger en disant qu'il y a eu une erreur doncpar exemple on va mettre un message qui dit couldn't fetch content from et là on va mettrel'URL. Alors l'URL, je l'ai mise comme ça ici, je vais faire une variable intermédiaire donc je
00:01:40 :refactor option commande V sur Mac sinon vous faites un clic droit et vous allez dans refactorpour introduire une variable donc c'est un petit raccourci que j'utilise très souvent et là il nesemble pas être très coopératif alors je sais pas pourquoi, introduce variable, ok il ne veut pas.
00:01:54 :Normalement il fait la chose pour moi automatiquement donc je vais mettre ici URL,on va mettre la chaîne de caractère ici, normalement il fait cette opération automatiquement. Là je
00:02:03 :sais pas pourquoi ça n'a pas marché et donc cette URL ici on va la mettre à l'intérieur de notrefString donc on va dire qu'on n'a pas réussi à récupérer le contenu à partir de cette URL àcause de l'erreur qu'on va mettre ici donc dans notre chaîne de caractère également l'erreur
00:02:17 :qu'on a récupéré ici et on va lever de nouveau cette erreur à partir de l'erreur qu'on a récupérédans cette variable E. Donc ça c'est pour la gestion de cette requête qui est potentiellement
00:02:28 :problématique, on ne sait jamais, on peut avoir des erreurs 404 si jamais la signe n'est pas trouvéeou quelque chose d'autre. Ensuite qu'est ce qu'on va avoir comme erreur potentielle, on avait dit
00:02:38 :avoir donc on peut avoir le priceNode qui n'est pas trouvé, là je fais un priceNode.txt donc onpourrait avoir potentiellement un attributeError, je vais plutôt passer par un if ici, je vaisregarder si on a le priceNode donc si on a priceNode on va retourner ça ici et si ce n'est
00:02:54 :pas le cas ça veut dire qu'on n'a pas réussi à trouver l'information sur la page donc là encoreje vais faire un logger.error et on va faire un fString en disant couldn't find price in et on
00:03:04 :va remettre l'url ici et on va faire un raiseValueError donc là on va lever une erreur puisquevalueError comme ceci, là on va lever une erreur parce qu'on fait juste une vérification ici, onfait pas un try except donc si jamais on a un problème on veut là dans ce cas ci faire planter
00:03:19 :le script pour indiquer qu'on a eu un problème et on verra par la suite comment vérifier etrécupérer ces erreurs s'il y a une erreur comme celle ci pour être averti et aller vérifier pourquoiça a planté. Donc là on va dire on va faire la même chose, on va faire errorMessage, on va
00:03:34 :le mettre ici errorMessage, on va dire à quoi c'est égal et on va le remettre ici aussierrorMessage, message comme ceci. Donc je fais une variable, je la log et je fais un raise de
00:03:45 :cette valueError ici en cas de problème. On pourrait aller encore plus loin comme je vous dis ici, làon pourrait avoir un problème également avec le priceNode, imaginez que le texte retourne autrechose qu'on n'arrive pas à le convertir en int, on aurait dans ce cas ci une typeError si je ne
00:04:02 :me trompe pas. Donc on pourrait tester ça aussi, bon après de toute façon on va voir avec les outilsqu'on va mettre en place par la suite. Si on n'arrive pas à récupérer le prix ici, ça ne sert
00:04:10 :à rien d'envoyer une alerte parce que si on n'arrive pas à récupérer le prix ici, ça ne sert à riend'aller plus loin, on n'aura pas la valeur et ça ne sert à rien de la comparer, on ne peut pas comparerquelque chose qu'on n'a pas. Donc ici si ça plante, ça plante, on va avoir une alerte avec les outils
00:04:22 :qu'on va mettre en place pour indiquer que notre script n'a pas bien fonctionné, donc après on peutdécider d'aller voir est-ce que c'est Amazon qui a changé le HTML, est-ce qu'il y a eu un autreproblème non identifié ou quoi que ce soit. Mais ici voilà ça sert à rien d'aller plus loin donc
00:04:36 :je vais pas faire un try except pour gérer cette erreur potentielle, on va juste laisser cetteerreur arriver si c'est le cas. Donc maintenant qu'on a refait un petit peu cette fonction, on va
00:04:45 :faire une nouvelle fonction main qui là va avoir la logique principale de notre script. Donc je vaisenlever ça, je vais enlever ça aussi et on va appeler main ici. Et qu'est ce qu'on va avoir ici
00:04:55 :comme logique ? Eh bien la logique principale qui va consister à déjà récupérer le prix actuel. Doncje vais faire une variable currentPrice qui va être égale à getCurrentPrice, le assign on l'aici donc je vais le passer à main en fait aussi. Donc on va faire un paramètre ici qui va être
00:05:11 :une string et là on va le passer et comme ça hop on va le passer directement à notre fonctiongetCurrentPrice. Ensuite qu'est ce qu'on va faire ? On va écrire cette valeur sur le disque mais
00:05:22 :avant ça on va récupérer la différence de prix parce que si on écrit déjà la valeur sur le disqueon va comparer la valeur actuelle avec elle même parce qu'on aura déjà écrit sur le disque et onva récupérer la dernière valeur qui va être celle-ci. Donc bien important ici l'ordre on va
00:05:34 :déjà récupérer la différence de prix donc getPriceDifference avec le currentPrice égalecurrentPrice et si jamais on n'a pas de prix, si on n'a pas le fichier qui existe, ça on avaitdéjà prévu, voilà getPriceDifference. Si on lance le script pour la première fois le fichier
00:05:49 :n'existera pas et on va juste avoir le previousPrice qui va être égal au currentPrice doncon aura une variation de 0 et on ne va tout simplement pas envoyer d'alerte donc ce n'estpas un problème. Et ce qu'on va faire c'est écrire donc ce prix sur le disque donc en mettant
00:06:03 :price égale à currentPrice et il ne reste plus qu'à vérifier s'il y a une différence de prixdonc on va faire ifPriceDifference, là on peut vérifier, on peut dire est-ce qu'elle est plusgrande que 10, que 5, donc là c'est à vous de mettre la barre où vous le souhaitez, on pourra
00:06:15 :mettre tout simplement 0. Donc s'il y a une différence de prix on va faire sendAlert eton va envoyer un message qui va dire price has decreased by et on va mettre le pourcentage,buyPriceDifference et on va mettre un symbole pour 100 pour que ce soit bien clair. On pourra
00:06:31 :même mettre moins, après on dit decreased ici donc c'est déjà assez clair que ça a descendu depar exemple 10, 20 ou 30%. Donc normalement c'est bon, on va pouvoir tester ça, on va tester avec
00:06:43 :des valeurs fictives parce que là pour l'instant si je lance le script on n'aura peut-être pas dedifférence donc là on a une valeur de 150, si je me souviens bien on avait une valeur de 234 surle site. Donc je vais lancer le script en l'état, normalement on devrait avoir ici une alerte parce
00:07:00 :qu'on va avoir la dernière valeur qui est de 150, la valeur qu'on va récupérer va être 234 si messouvenirs sont bons, donc on a quand même une grosse différence de prix ici qui va assurémentêtre plus grande que 0 donc ça devrait fonctionner. Je vais enlever de nouveau mon mode avion et vous
00:07:14 :faire écouter pour voir si on a bien l'alerte. Donc on croise les doigts, normalement on a bientout fait, je lance le script et on va vérifier si on a bien tout qui est fonctionnel, on vavérifier le loggeur également, donc on a bien ça et getPriceDifference, writePrice, 234 et là il
00:07:31 :semble qu'on a un problème sur la différence de prix parce qu'on n'a pas détecté de différencedonc là je regarde ici on a 234, ok donc il y a eu un petit souci je pense sur la différence de prix,on va vérifier ce que ça donne ici, donc je vais commenter cette ligne, on va mettre une valeur
00:07:46 :fictive ici pour ne pas faire trop de requêtes, on va dire donc que le currentPrice est égal,on va mettre 500, ah oui c'est parce qu'en fait je pense que c'est une différence, oui c'est uneaugmentation ici en fait, c'est tout ça, c'est simplement pour ça, donc on va mettre je pense
00:08:00 :si mon intuition est bonne on va directement tester ça, on va dire que le prix était à 500 donc ladernière valeur à 500, là on va récupérer de nouveau 234 et donc je pense que cette fois-cion va bien avoir l'alerte. Donc je reteste pour voir si mon intuition est bonne, je relance et
00:08:16 :là effectivement j'ai bien l'alerte, donc ça me dit alerte Amazon price has decreased by 53%,donc on va voir si c'est bien ça, effectivement 53% donc c'est cohérent et c'est bien donc lecomportement attendu puisque la price difference ici c'est une différence qui se fait que dansle sens négatif si je puis dire, puisque si on a une augmentation du prix on ne va pas rentrer
00:08:38 :dans cette condition, nous ce qu'on regarde ici c'est juste une diminution du prix, on pourraitaussi tester une augmentation du prix si ça vous intéresse d'acheter des choses plus chères queprévu, mais ici ça va bien être une diminution. Donc quand on est passé de 150 à 234 ça n'a pas
00:08:51 :lancé l'alerte, c'est logique, et quand on passe de 500 à 234 là on a bien une diminution de 53%ce qui est assez logique, 50% on serait à 250 donc là un peu plus que 50% ça semble être lavaleur attendue. Donc voilà pour notre script, normalement tout est bon, on a la gestion des
00:09:09 :erreurs, on a notre fonction principale, on peut envoyer la signe ici directement donc c'est bienoptimisé, on a nos gestions d'erreur ici avec le loggeur, on va aller voir les fichiers de logici, là on n'a rien de nouveau parce que c'est normal, on a mis le fichier de log avec un niveau
00:09:24 :à warning, donc warning, error, critical, que des messages problématiques, on pourra le mettre àinfo si on voulait vraiment tout logger, donc là si je relance avec ce niveau vous allez voir qu'onva récupérer tout dans le fichier de debug, donc que ce soit les infos mais aussi les erreurs et
00:09:40 :là on voit bien qu'on a les infos également. Moi je vais le laisser à warning, là je souhaitejuste avoir les informations en cas de problème et ne pas surcharger le fichier de log avec lesvaleurs d'info. A savoir que généralement ce qu'on fait c'est d'avoir plusieurs fichiers, on peut
00:09:54 :avoir un fichier juste pour les erreurs, un fichier pour le debug avec les infos un peu plus précises,donc là c'est à vous de voir, c'est quelque chose qu'on voit assez régulièrement, vous allez avoirun fichier par exemple err.log qui va contenir les erreurs en cas de problème, comme ça vous
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.