Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Donc ce qu'on va faire maintenant c'est filtrer le JSON qu'on a récupéré ici.Donc directement depuis la requête on va même pas écrire ce fichier JSON sur ledisque parce qu'en fait on va avant de l'écrire sur le disque déjà faire lefiltre et ensuite écrire un fichier qui va être beaucoup plus petit.
00:00:13 :Donc ce que je vais faire ici c'est revenir avec mon prompt.On va lui dire donc je veux récupérer les informations principales des filmset leurs horaires. Pour les informations principales on les a déjà dans le JSON.
00:00:24 :Je veux uniquement récupérer certaines informations. Pour l'instant on modifiele script pour filtrer les données et ne garder que celles qui nous intéressent.Et on va s'arrêter là. Donc voilà donc là il va me mettre un petit peu là.
00:00:35 :Voilà j'enlève ça et leurs horaires pour les informations je veux uniquementrécupérer pour l'instant modifier. Ok donc là je vais copier toutes lesinformations qui m'intéressent. Donc voilà les informations qui m'intéressent
00:00:48 :sont et là je mets la liste des choses que je veux. Donc ça je l'avais préparéà l'avance et tout ce dont j'ai besoin le unique ID puisqu'on va l'utiliseraprès pour l'URL qui va nous permettre de récupérer les informations d'horaires,les titres, le genre, synopsis, release date, les images qu'on va afficher après sur notre site,
00:01:05 :l'URL en détail, la durée et la version. Alors la version ça va être intéressantparce que là ça fait partie des choses que en préparant j'ai déjà vérifié.
00:01:13 :Mais si vous regardez ici, si on regarde dans les items il y en a un paquet.Il y en a en fait une cinquantaine et sur le site j'avais remarqué qu'il n'y avait que 30 films.
00:01:21 :Ça fait partie des choses qu'on repère encore en tant qu'humain. Je me suis pas mal creusé latête pour voir qu'est-ce qu'il y a dedans, dans le JSON qu'on a ici, faisait que lesfilms étaient ou pas affichés et il y avait pas mal d'indices ici. Par exemple on a In Theaters
00:01:36 :qui est à True ou False. Donc je me suis dit au départ c'est probablement les films qui sontà False ici puisqu'ils ne sont pas encore au cinéma. En anglais Theaters en fait ça veut dire
00:01:45 :cinéma. Donc je me suis dit peut-être que c'est ça. En fait non ça n'avait pas vraiment de...Ce n'était pas le critère principal parce que j'avais des films qui n'étaient pas affichés etqui pourtant avaient le In Theaters qui était à True. J'ai pensé après que c'était le Movie
00:01:57 :State puisque là on a à peu près la même chose. Donc là on avait Soon ou In Theaters. Donc ily a pas mal d'infos qui étaient redondantes ici. Et finalement ce que j'ai remarqué c'est que ce
00:02:05 :qui dictait qu'est-ce qui était affiché ou non c'était le format. Donc si on va voir dans leformat ici, voilà on a un format 2D. Alors non je ne veux pas faire ça. Format 2D ici et si on
00:02:14 :descend on va voir un format par exemple Atmos ou 3D ou des choses du genre. Et je me suis renducompte que ces informations après ils les affichent sur la page du film. Là vous voyez par exemple on
00:02:25 :a un format Atmos et ça ce n'est pas affiché. Gladiator 2 Atmos il n'est pas affiché. Si jeretourne là sur le site on va voir qu'on a bien Gladiator qui doit être quelque part ici. Voilà
00:02:34 :Gladiator 2 mais la version Atmos n'est pas affichée. Par contre si je viens sur la page làon va voir les versions 2D et on va voir la version Atmos. Donc en fait j'ai remarqué que c'était
00:02:42 :vraiment ça le filtre principal qui faisait qu'un film était affiché ou pas ici. Donc moi ce que jeveux c'est récupérer uniquement tous les films qu'il y a là et après j'aurai les horaires desformats différents directement sur la page ici avec les petits badges ici. On va voir ces
00:02:56 :indications là. Donc ce que je vais faire c'est en plus de ça rajouter un filtre. Donc je peux lemettre directement ici. Je vais dire également on ne veut récupérer que les films qui sont au
00:03:07 :format 2D. Donc 2D comme ça je pense qu'il arrivera à trouver. Je ne sais plus s'il y a un D majusculeou pas mais je pense qu'il va réussir avec ça. Donc on va lui donner tout ça et on va voir ce
00:03:17 :qu'il nous fait avec ça. Donc il nous a modifié le script. Avant d'aller regarder en détail je vaisdéjà lancer. J'ai l'habitude de faire un petit peu ça. C'est peut-être un petit peu la mauvaise
00:03:27 :façon de faire. Ça dépend des gens. Il y a des gens qui préfèrent peut-être aller lire le scriptet après si c'est bon l'exécuter. Si jamais il y a des trucs dangereux ici qui peuvent être fait
00:03:34 :c'est peut-être une meilleure façon de faire. Bon là je lui fais quand même confiance. La façondont je raisonne moi c'est que je me dis que je veux déjà voir si ça fonctionne parce que si çafonctionne pas je vais avoir un oeil un peu critique, un peu différent. Je vais déjà chercher les
00:03:46 :erreurs alors que là si ça fonctionne je vais plus me focaliser sur est-ce que le script est bienécrit. Donc je lance déjà la commande. On va voir si ça a bien récupéré ce qu'on veut. Donc
00:03:55 :Movie Filter. Là on va voir ce qu'il nous dit. Donc filtre uniquement les films au format 2D.Garder que les informations en texte brut plutôt qu'en html. Il sauvegarde dans un fichier Movie
00:04:07 :Filter. On va voir aussi est-ce qu'il sauvegarde le fichier complet. Je l'avais pas supprimé doncje sais pas s'il l'a écrasé. Je pense pas parce qu'on avait un timestamp et affiché le nombre
00:04:17 :qu'il y a 30 films en 2D. Donc c'est bien ce qu'il me semblait. C'est assez proche de ce que j'avaisdans mes tests. Et donc si on va voir Movie Filter ici qu'est-ce qu'on a ? On a une liste cette fois-ci
00:04:25 :avec des dictionnaires qui contiennent toutes les informations. Donc le unique ID, le release date,le synopsis qui n'est pas en html. Du coup ça fonctionne bien. L'image etc etc. Là on a le
00:04:37 :portrait image donc c'est bien ce que je veux parce qu'il y avait des landscapes aussi. Moije vais vouloir les images en portrait comme celles qui sont affichées. Donc ça a l'air de bien
00:04:44 :fonctionner. On a nos 30 films ici et on va aller voir dans le script ce qu'il nous a fait. Et onpeut accepter. Vous voyez ici on a un diff en fait un peu comme ce qu'on a quand on fait des
00:04:54 :modifications avec git. Donc là ça nous permet de tout valider. Si on revient ici je peux acceptertout au complet ou je peux valider un par un. Donc là je vais voir ce qu'il nous fait à la place.
00:05:04 :Donc là il a tout modifié ici. Donc il boucle à travers les movies donc les items. Il vérifiesi c'est au format 2D. Si c'est le cas il récupère uniquement ce qu'il nous faut. Il l'ajoute. Là il
00:05:16 :fait donc un nom différent et il sauvegarde les Filters Movies. Donc là on voit bien qu'il nesauvegarde pas le fichier brut. Il fait bien uniquement sauvegarder les Filters Movies. Donc
00:05:27 :ça me paraît bon. Je vais accepter le tout et je vais juste modifier quelques petits trucs parceque là par exemple on peut modifier. On a du code un peu en escalier qui n'est pas forcément
00:05:35 :agréable ici. Ce qu'on peut faire c'est plutôt que de faire un égal égal, faire une différence. Etlà si on a un film qui n'est pas en 2D, on va faire un continue et on va mettre désindenteren fait tout ça. Ça évite d'avoir trop de code en escalier. Donc ça voilà c'est le genre de
00:05:51 :choses que j'ai pas besoin de demander à l'IA de faire. Je peux le faire moi même. C'est vraimentdeux petites choses à modifier. Et là vous voyez qu'on a aussi quelque chose qui pourrait être
00:05:58 :modifié. C'est que ici on a des crochets. Donc si jamais il y a une information qui manque,le script va planter. Donc là à nous de voir ce qu'on préfère faire et ce qu'on préfère faire
00:06:07 :planter le script et gérer dans le cas où il manque une information. Par exemple on pourraitfaire un Logger, faire un Raise. Donc faire un Raise pour faire planter le script et après gérer
00:06:15 :ce qu'on fait après ce plantage. On pourrait faire un Get à la place des crochets qui nouspermettrait ici de, si l'information n'est pas présente, mettre une chaîne de caractère videpar exemple. Donc là c'est à nous de voir. Moi je pense que ce que je vais faire c'est
00:06:29 :directement gérer l'erreur parce que si j'ai en fait des données qui sont manquantes, je veuxpouvoir lever une exception et logger le problème pour pouvoir l'adresser. Donc on verra plus tard
00:06:38 :comment on l'adresse. Est-ce qu'on relance le script ? Est-ce qu'on fait juste un log et aprèson considère que quelqu'un ira vérifier ce qui se passe, pourquoi ça ne fonctionne pas et corrigerl'erreur ? Donc là ce que je vais faire cette fois-ci c'est juste sélectionner ça ici et je
00:06:51 :vais faire un Edit. Donc on peut faire un Chat pour demander des explications ou un Edit avecl'intelligence artificielle aussi. Et comme instruction je vais lui dire donc ici que je
00:06:59 :veux gérer les erreurs. Donc on va dire rajoute ici une gestion des erreurs au cas où des clésne sont pas trouvées dans le dictionnaire Movie. Je veux lever une exception, c'est plus clair comme
00:07:19 :ça, si jamais des données sont manquantes. On dit ça, je Submit et là on va voir ce qu'il nous faitet on va Review et accepter ça si c'est bon. Donc normalement voilà il va nous faire juste un Try
00:07:31 :Except, c'est bien il n'a pas fait un truc trop générique, il nous a bien mis des Except spécifiquesavec un Key Error ou un Type Error. Donc ça c'est si vraiment on a une structure de données
00:07:39 :invalide, si jamais le Type Error, j'essaie de vérifier dans quel cas on pourrait l'avoir.Je suis en train de voir, ouais il faudrait que je vérifie. Là un Key Error, donc ça ça va être s'il y a une clé
00:07:54 :qui est manquante. Donc si par exemple on essaie de récupérer une clé qui n'existe pas, le TypeError je pense que ça va être dans ce cas là par exemple. Parce que là, qu'est-ce qu'il fait, le
00:08:03 :texte brut c'est bon. Parce que là en fait si on n'a pas une clé, si cette clé n'est pas trouvée,si on a un None par exemple, ou si on a un dictionnaire, si on a quelque chose qui ne permetpas ensuite de faire les crochets ici, donc une structure de données qui n'est pas un dictionnaire
00:08:19 :qui ne permet pas donc de faire ses crochets ici, si je ne me trompe pas on aura un Type Error à laplace. Donc je peux vérifier ça, je peux ouvrir un terminal vite fait, si je fais Python 3 et que
00:08:30 :je fais None crochet par exemple, là alors on a un syntaxe erreur même. En fait soit si la donnéen'est pas trouvée, si on a une chaîne de caractère comme ça, alors c'est toujours un syntaxe. Donc là
00:08:42 :vous voyez un autre exemple où on peut de nouveau utiliser l'IA cette fois-ci pour être sûr qu'ellefait pas des bêtises. Donc je pourrais me creuser un petit peu la tête et essayer de comprendre
00:08:50 :pourquoi il a mis un Type Error, ou je peux lui demander tout simplement. Donc là je vais luidire, on va faire un vocal, je ne suis pas sûr de comprendre pourquoi tu as mis une exception avecun Type Error, dans quel cas de figure ici peut-on avoir un Type Error et non pas juste un Key Error.
00:09:02 :Donc voilà c'est parfait, je l'envoie et là cette fois-ci on va converser avec le fichier, on lui amis les lignes en ce cas-ci. Donc un Type Error, voilà donc accès à une clé dans un objet non
00:09:15 :dictionnaire. Donc c'est bien ce que je pensais, si Movie est None ou un autre type qui ne supportepas l'accès par clé comme une liste ou une chaîne de caractère, l'accès à Movie lèvera une TypeError. Donc là ok, je vais quand même revérifier, parce que comme je vous disais ici, si on a une
00:09:31 :chaîne de caractère et qu'on essaie de récupérer quelque chose, si on va faire un dictionnaire enfait, on va faire un dictionnaire tout simple, on va dire D égale et on va mettre synopsis,comme ça, et on va dire bonjour tout simplement. Donc là si je fais D comme ça, synopsis, et que
00:09:47 :j'essaie de récupérer synopsis, là j'ai mis synopsis en S et j'essaie de récupérer synopsis,et ensuite j'essaie de récupérer une autre clé ici. Donc je vais y arriver, et là vous voyez qu'on
00:09:58 :a un Key Error sur synopsis, par contre si je récupère, alors ce qu'on va faire par contreeffectivement c'est si la clé existe, donc je vais refaire un dictionnaire comme ça, sauf que là onaura une chaîne de caractère vide. Donc je vais récupérer synopsis comme ça, donc là on aura
00:10:13 :bien une chaîne de caractère vide, et si j'essaie ensuite de récupérer Test à partir de la chaînede caractère vide, effectivement là on a bien un Type Error. Donc voilà, String in this must be
00:10:22 :integral not String, parce que sur une chaîne de caractère on peut récupérer, par exemple si jefais Test, on peut récupérer le premier élément, donc le T par exemple, mais on ne peut pas récupérerune clé, ça marche qu'avec les dictionnaires. Donc effectivement dans ce cas-ci on a bien un Type
00:10:37 :Error, et c'est pour ça qu'on a cette exception ici qui va essayer de le récupérer. Donc là c'estdans le cas du synopsis, vraiment uniquement dans ce cas-là, si on n'avait pas cette clé ici ceserait que des Key Error potentiels, donc on pourrait enlever cette deuxième exception. Donc
00:10:51 :ça fonctionne bien, on a bien géré cette erreur ici, s'il y a une Key Error on va lever une ValueError en disant que les données sont manquantes dans le film, et là c'est la structure de donnéesqui n'est pas correcte. Donc là ça veut dire qu'on aurait une structure qui n'est pas
00:11:06 :Synopsis Plain Text, donc là il faudrait aller vérifier dans les données qui sont récupérées,est-ce qu'il y a eu un changement, par exemple ici est-ce que c'est plus Synopsis mais autrechose, ou est-ce qu'il n'y a rien dans Synopsis. Donc là si c'est autre chose que Synopsis ce
00:11:19 :serait un Key Error, mais si on a un Synopsis qui est vide, il faudrait potentiellement le gérer.On va rester là pour l'instant pour pas trop faire durer cette partie, mais vous comprenez l'idée,toujours bien de penser à la gestion d'erreur le plus tôt possible, et par la suite, à la fin,
00:11:32 :on s'assurera de refaire une passe là-dessus pour s'assurer qu'en cas de plantage, en cas de donnéesmanquantes, le script fonctionne de la façon dont on le souhaite. Et juste avant de terminer cette
00:11:42 :partie, je suis quand même retourné voir pourquoi j'avais une erreur de syntaxe tout à l'heure,c'est tout simplement parce qu'ici je mettais des crochets sans aller chercher soit un indice,soit une clé. Donc si on met effectivement juste des crochets derrière, soit même un dictionnaire,
00:11:55 :en fait si je fais un dictionnaire ici, donc on va faire un dictionnaire vide, et qu'ensuite jesais de récupérer juste avec des crochets comme ça, on a une erreur de syntaxe. Si j'essaye par
00:12:03 :contre de récupérer, donc en faisant un dictionnaire avec une clé qui va être égale à 1 comme ça,je fais crochet et je récupère 1, là je vais bien récupérer la valeur associée à la clé. Si on a
00:12:13 :une chaîne de caractère, donc je vais dire bonjour ici, si je fais des crochets on a vu qu'on peutrécupérer donc avec 0, par contre si je fais des ici juste avec les crochets sans indiquer d'indice,j'ai une syntaxe erreur, et si j'essaie de récupérer ici avec par exemple une clé, donc si
00:12:28 :on avait un dictionnaire, là on va avoir un type error parce qu'on ne peut faire ça que sur undictionnaire, et là j'ai essayé de le faire sur une chaîne de caractère. Donc vous voyez ici les
00:12:35 :trois cas de figure qu'on peut avoir avec le key error, le type error, le syntaxe error, et doncdans ce cas-ci on a bien le key error dans le cas où il manque une clé, donc on va chercher une cléqui n'existe pas, le type error si jamais ici on a quelque chose qui n'est pas un dictionnaire,
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.