- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette partie, on va enfin récupérer les données de l'API à l'intérieur d'un script Python.Donc la première chose que je vais faire c'est créer ce script en faisant un clic droit sur lenom de mon dossier et en allant dans new python file et je vais appeler mon script tout simplement
00:00:15 :api.py. J'appuie sur entrée pour valider et j'ai mon script qui est bien créé. Donc la premièrechose qu'on va faire c'est importer les packages dont on a besoin. Donc la première chose dont
00:00:26 :j'ai besoin c'est la classe DateTime et la classe TimeDelta qui sont contenus à l'intérieur dumodule DateTime. Donc on va faire FromDateTime, ImportDateTime et TimeDelta. Donc c'est les deux
00:00:40 :classes dont on va avoir besoin pour gérer les dates. La deuxième chose qu'on va importer c'estle module Request pour pouvoir faire la requête web vers l'API. Donc on va importer Request. Donc
00:00:51 :attention ne pas oublier le s à la fin donc Request avec un s. Donc on a nos deux packagesqui sont importés donc les deux classes dans le package DateTime et le package Request quel'on va également utiliser. La deuxième chose que je vais faire c'est tout de suite créer une
00:01:06 :condition qui va vérifier que la variable name est bien égale à main. Donc ça c'est quelque chosequ'on fait très souvent. Dans PyCharm vous pouvez taper main et appuyer sur tab et automatiquement
00:01:15 :ça va compléter cette condition. Donc cette condition ça va nous permettre d'éviter que lecode qu'on va mettre à l'intérieur de cette condition soit exécuté quand on va importerle module puisque notre API par la suite on va l'importer dans notre interface Django et on neveut pas que le code de test ici soit exécuté lors de l'import. Donc on va protéger avec cette
00:01:35 :structure conditionnelle. Donc ce que je vais mettre ici c'est le nom de ma fonction qu'onva créer tout de suite après. Donc la fonction elle va s'appeler GetRate et on va la créer ici.
00:01:44 :Donc on crée la fonction GetRate et cette fonction elle va avoir deux paramètres. Lepremier paramètre ça va être une liste de devises qu'on va lui passer. Donc par exemple on va lui
00:01:54 :passer une liste de devises USD, euro, franc suisse et dollars canadiens par exemple et c'estces devises qu'on va vouloir récupérer de l'API. Donc je vais appeler ce paramètre Currencies et
00:02:05 :le deuxième paramètre qu'on va mettre c'est un nombre entier qui va représenter le nombre dejours qu'on veut chercher. Donc entre aujourd'hui et un certain nombre de jours. Donc si on veut
00:02:13 :voir les 30 derniers jours par exemple on va passer 30 à ce paramètre. Donc c'est la valeur que jevais mettre par défaut 30, Days égale 30. Les Currencies ici je ne vais pas mettre de valeur
00:02:23 :par défaut puisque je vais m'attendre à ce que l'utilisateur nous donne au moins une valeur,mais les jours par défaut on va afficher le dernier mois. Donc si on voulait afficher la
00:02:32 :dernière année et bien on mettrait 365 et dans la fonction on va voir comment récupérer donc uneétendue de date entre la date d'aujourd'hui et 365 jours auparavant. Donc par défaut on va
00:02:42 :remettre 30 et à l'intérieur donc de cette fonction on va récupérer la date d'aujourd'hui. Donc ladate d'aujourd'hui on va la récupérer dans une variable que je vais appeler EndDate puisque çava être la date de fin donc la date jusqu'à laquelle on va récupérer la liste des devises.
00:02:56 :Alors EndDate ça va être égal à DateTime donc dans ce cas-ci j'ai mis DateTime mais on pourraitmettre aussi tout simplement Date donc là j'ai importé DateTime mais si je mets Date ça vamarcher de la même façon puisque en fait nous ce qui nous intéresse ici c'est juste la date,
00:03:09 :c'est pas la date et l'heure donc dans ce cas-ci c'est peut-être plus clair de juste mettre Dateet de ne pas directement mettre DateTime. Donc comme ça on va avoir un objet Date qui va correspondre
00:03:18 :à la date d'aujourd'hui. La deuxième chose qu'on va faire c'est utiliser le TimeDelta donc si vousvous souvenez bien dans la partie dans laquelle je vous ai présenté le module DateTime on avaitla possibilité de créer un delta auquel on va passer donc le nombre de jours duquel on veut
00:03:32 :reculer. Donc là on a mis Days égale 30 donc on va faire un delta de 30 jours dans ce cas-ci ettout ça on va le soustraire donc on va faire notre EndDate et on va soustraire ce delta à notre datede fin. Donc comme ça par exemple imaginez aujourd'hui on est le 24 avril et bien on va
00:03:48 :reculer de 30 jours et on va se retrouver quelque chose comme le 24 ou le 25 mars donc dépendamments'il y a 30 ou 31 jours dans les mois et donc tout ça on va le récupérer dans une variable qu'on vamettre dans StartDate. Donc StartDate c'est la date de début donc comme ça on a la date de début,
00:04:03 :la date de fin donc la date de début qui va correspondre à la date de fin moins le delta etça va nous donner toute l'étendue des dates qu'on va pouvoir passer à notre API. Donc ce qu'on va
00:04:14 :faire maintenant c'est utiliser le module Request pour faire une requête Get de type Get à notreAPI. Donc tout ça je vais le récupérer dans une variable que j'appelle R donc ça c'est quelque
00:04:24 :chose que je fais assez régulièrement quand je fais des requêtes je récupère le résultat dela requête dans une variable que j'appelle R tout simplement. On pourrait mettre autre chose là
00:04:32 :c'est juste un nom de variable donc ça n'a pas beaucoup d'importance mais vous allez voir quetout au long de la formation moi c'est quelque chose que j'utilise donc le nom de cette variableR pour les requêtes. Donc on va faire Request et on va utiliser la méthode Get qui me permet
00:04:44 :de faire une requête de type Get et entre les parenthèses on va mettre l'adresse de l'API doncl'API qu'on avait dans les parties précédentes que je vous ai montré dans la section précédentequand on a vu l'appel à l'API quand on a vu dans Postman et avec Curl et dans Google Chrome
00:04:59 :comment récupérer ces données et bien ça on va le récupérer cette fois-ci directement dans Pythonavec notre requête Get ici. Donc je vais mettre un fString puisque en fait je vais devoir insérer
00:05:10 :à l'intérieur de cette requête la date de début, la date de fin et également les devises que l'onveut récupérer. Donc cette requête je vais la coller au complet ici et on va la regarder un
00:05:19 :peu plus en détail. Donc ça ici c'est le site web qui va nous permettre de faire notre appel àl'API et on va lui passer ici History et on va lui dire que la date de début donc le paramètrestartAt ici est égale à notre date de début. On va rajouter avec les superluettes ici un autre
00:05:35 :paramètre endAt et on va dire qu'il est égal à endDate. Vous voyez que par défaut ici je n'aipas besoin de convertir ces dates, on pourrait faire une conversion en string, mettre string icipour convertir cet objet de type date en chaîne de caractère mais par défaut quand on le met à
00:05:49 :l'intérieur d'un string comme ceci ça va être automatiquement converti en chaîne de caractèredonc on aura bien le format par exemple 2020-4-24 pour aujourd'hui donc par exemple comme ceci 20204 et 24 donc comme ceci. Donc ça ça va être automatiquement intégré dans notre dans notre
00:06:08 :chaîne de caractère ici sous forme de chaîne de caractère même si on met directement l'objetdate. Donc on va faire la même chose avec la date de fin ici et pour finir on va mettre la liste des
00:06:18 :devises. Donc là vous voyez que j'ai fait une petite opération puisque Currencies ici en faitc'est une liste donc on ne peut pas pour le coup passer directement une liste à l'intérieur denotre chaîne de caractère et ce qu'il s'attend à avoir ici l'API ce qu'elle veut dans les symboles
00:06:32 :donc les devises qu'on va lui passer c'est une liste de devises séparées par des virgules doncpar exemple usd, cad, chf, etc. Donc ce qu'on va faire c'est utiliser la méthode join pour
00:06:43 :joindre les devises donc les devises qui sont dans notre liste Currencies par une virgule. Donc là jemets le caractère virgule alors il faut bien faire attention j'ai mis des guillemets simplespuisque j'utilise des guillemets doubles ici pour ma chaîne de caractère donc pour ne pas fermer lachaîne de caractère ici et se retrouver avec des problèmes on varie les types de guillemets. Donc
00:07:01 :un guillemet simple ici je spécifie le caractère avec lequel je veux joindre les éléments de maliste et donc ici une virgule donc si on a usd et cad dans notre liste on va joindre ces élémentspour avoir usd, cad et d'autres devises qu'on pourrait avoir. Donc voilà la requête au complet
00:07:17 :qu'on va faire et la dernière chose qu'on va faire ici c'est une petite vérification pours'assurer que notre requête fonctionne bien. Donc ce que je vais faire en fait c'est que je vais
00:07:25 :fonctionner par la négative ici on pourrait vérifier est-ce que la requête donc par exemple est-ce quele code de notre requête est de deux sens qui voudrait dire que la requête a réussi donc onpourrait faire une vérification comme ça vérifier est-ce que la requête a réussi et ensuite mettre
00:07:38 :toute la suite du code à l'intérieur de cette structure conditionnelle. Moi ce que j'aime bienc'est éviter d'avoir trop de niveaux d'indentation comme ceci donc je vais faire l'inverse je vaisdire si la requête n'a pas réussi donc if not r donc if not r ça veut dire que la requête n'a pas
00:07:52 :réussi on n'est même pas obligé de vérifier en fait le code le status code on peut juste vérifierest-ce que r est évalué comme vrai ou faux et si ça n'est pas évalué comme vrai et bien on va toutsimplement retourner ici false et on va pas juste retourner false on va retourner deux fois false
00:08:06 :donc ça vous le verrez dans la deuxième partie de la création de ce script en fait avec cettefonction ici on va retourner deux choses on va retourner la liste des devises et on va égalementretourner la liste des jours entre la date de début et la date de fin donc on va retourner deux
00:08:20 :choses et donc quand on va appeler ici notre fonction on va récupérer les jours et les devisescomme ceci et donc on va avoir deux variables ici de ce côté du symbole égal et donc c'est bienimportant quand on fait un return ici de retourner deux valeurs également puisque si on n'en retourne
00:08:35 :qu'une et bien là on aura deux variables et là on n'aura qu'un seul élément qui sera retourné etdonc ça ne va pas fonctionner on aura une erreur donc bien faire attention ici on va mettre deuxfalse pour l'instant et dans ma condition je ne vais pas uniquement m'assurer que la requête n'a
00:08:49 :pas uniquement pas fonctionné en fait on va également vérifier si on a ou pas la méthodejson sur notre requête donc on va rajouter un end et on va dire end not r.json puisque la
00:09:01 :requête pourrait avoir réussi on pourrait avoir une requête qui est passée mais ne pas avoir lesdonnées de json donc normalement il n'y a pas de raison que ça arrive si la requête a réussi c'estprobablement que l'API nous a retourné ce qu'il nous faut et qu'on va pouvoir donc récupérer les
00:09:15 :données json donc ça on le récupère avec la méthode json sur notre requête mais on saitjamais imaginez que dans un an ou deux les gens qui font cette API décident de ne plus retournerces données sous un format json mais un autre format et bien on pourrait avoir une requête
00:09:30 :qui réussit mais ne pas avoir de données dans le json ici donc je vais également vérifier queon a bien quelque chose dans cette méthode json et l'ordre est bien important ici je mets en premierle r donc if not r and not rjson donc ça c'est très important puisque en fait quand on a une
00:09:46 :condition end comme ça quand on a un opérateur end avec deux conditions et bien si cette premièrecondition n'est pas réussie il ne va pas évaluer la deuxième et c'est bien important ça ici puisqueen fait si on inversait si on mettait r.json au début et r après et bien ça veut dire
00:10:02 :qu'on évaluerait cette méthode ici donc la méthode json sur r mais si la requête n'a pas réussir sera égal à non ou ce sera un statut d'erreur ou quelque chose comme ceci qui n'aura pas cetteméthode json donc ce qu'il faut faire c'est déjà s'assurer que la requête a réussi et ensuite si
00:10:19 :la requête a réussi vérifier si on a quelque chose dans ce json ici donc c'est les deux vérificationsqu'on veut faire et dans cet ordre précis on ne veut pas déjà vérifier s'il y a du json et aprèsvérifier si la requête a réussi mais déjà vérifier si la requête a réussi et si elle a réussi est ce
00:10:34 :que l'on a quelque chose dans le json ici si on n'a rien de le json et bien ce sera évalué commefalse et donc on va retourner également ici false et false qui sont retournés dans ces deux variablesdays et rates donc voilà pour la base de notre api donc on va pouvoir tester tout ça la dernière
00:10:50 :chose que je vais faire ici c'est récupérer dans une variable que je vais appeler api rate toutsimplement r.json et donc ça ça va être un dictionnaire ça va être le dictionnaire qui
00:10:59 :contient les données et si vous vous souvenez bien quand on récupérait ce dictionnaire on avait uneclé rate qui contenait toutes les devises donc toutes les valeurs des devises donc cette clé ilva falloir récupérer sa valeur donc je vais utiliser get et la clé c'est la clé rate donc
00:11:14 :ça c'est mon dictionnaire r.json c'est le dictionnaire au complet qui va contenir plusieursclés et nous on veut les valeurs associées à la clé rate donc je récupère tout ça avec la méthodeget donc ce qu'on va pouvoir faire c'est faire un pprint de api rate par ailleurs vous voyez ici
00:11:29 :que pprint n'a pas été importé alors une petite astuce spycharm si vous voulez rapidement importerquelque chose qui n'est pas déjà importé que vous utilisez dans votre script mais qui n'est pas encoreimporté dans votre script vous voyez que par défaut ici il nous met logiquement une erreur si on va
00:11:43 :voir en bas ici à gauche ça nous met un unresolved reference pprint donc ça veut dire qu'il n'arrivepas à trouver ce pprint à quoi ça correspond donc si je veux rapidement l'importer sans quittercette ligne de code ici je peux cliquer sur la petite ampoule qui apparaît ici et choisir import
00:11:57 :this name donc je vais cliquer là dessus et là vous voyez qu'automatiquement il me donne plusieurschoix donc vous voyez que j'ai plusieurs fonctions pprint qui apparaissent donc moi c'est la fonctionpprint à l'intérieur du module pprint qui m'intéresse donc je clique dessus et automatiquementvous voyez qu'il a fait l'import donc l'import est ici vous voyez par la même occasion qu'il le met
00:12:13 :au bon endroit c'est à dire que il fait les imports déjà des packages de la librairie standard doncdatetime et pprint ce sont des modules de la librairie standard donc il va les grouper ensembleet on a ensuite le package request qui lui est installé en supplément on l'a installé dans les
00:12:28 :premières parties de la formation et donc vous voyez qu'ils sont séparés d'une ligne donc çac'est le ppait c'est des conventions en fait on sépare les modules de la librairie standard desmodules qui sont installés en plus donc comme le module request ici donc pprint a bien été importé
00:12:42 :donc on va pouvoir tester notre api donc ce que je vais faire c'est un clic droit ici sur mon fichierapi.py et je vais cliquer ici sur run api ce qui va avoir pour effet de lancer mon script et là vous
00:12:53 :voyez qu'on a une erreur puisque je n'ai pas donné de devise ici donc j'ai appelé la fonction vousvoyez qu'ici il me le signifie qu'il y a un problème parce que currencies donc le paramètrecurrencies n'est pas rempli donc je vais dire currencies égale et on va mettre une liste de
00:13:06 :devise donc pour l'instant je vais mettre usd et on va mettre cad aussi donc usd dollar américaindonc on va envoyer tout ça par défaut on a une étendue de jours de 30 jours donc ça on n'a pasbesoin de renseigner si on veut garder l'argument par défaut je vais recliquer sur run ici donc en
00:13:22 :haut à droite je peux cliquer ici sur la petite flèche ou refaire un clic droit ici et sélectionnerrun c'est la même chose et là vous voyez que ça fonctionne et si je regarde là on a bien ici laliste des devises avec à chaque fois la date et la devise canadienne et la devise américaine donc
00:13:37 :cad usd avec les valeurs correspondantes à chaque fois donc ça fonctionne on a bien récupéré lesdonnées de l'api grâce au module request ici et grâce au module date time qui nous a permis despécifier une étendue entre une date de début et une date de fin donc voilà pour cette première
00:13:54 :partie de l'api dans laquelle on a tout simplement refait en fait ce que l'on faisait dans chrome oudans postman et dans la prochaine partie on va en fait formater toutes ces données puisque pourl'instant on a la date en clé et ensuite on a une clé pour la devise canadienne une clé pour la
00:14:08 :devise usd et donc nous on va vouloir récupérer ça sous un autre format donc il va falloir manipulerun petit peu ce dictionnaire pour avoir quelque chose de différent qu'on va pouvoir utiliserensuite à l'intérieur de notre application django avant de terminer cette partie vous avez probablementremarqué qu'il y a une petite erreur dans notre script si je relance l'api vous voyez qu'on a bien
00:14:26 :les dates qui s'affichent mais si on remonte un peu plus haut on a une erreur de type typeerreur donc qu'est ce qui se passe ici et bien c'est tout simplement que l'on n'a rien retournédans notre fonction et ici on essaie de récupérer deux valeurs donc par défaut une fonction dans
00:14:39 :laquelle on n'a pas de return ça va retourner none et le problème ici c'est que si on mettaitdonc return none on n'aurait qu'une seule valeur alors que là on en attend deux donc là juste pourne pas avoir cette erreur on pourrait retourner none et none deux fois donc none virgule none qui
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.