• Aucun résultat trouvé

Modularité. Nous cherchons à récupérer dans un programme python la température et à l afficher. Pour cela, nous allons utiliser une API existante.

N/A
N/A
Protected

Academic year: 2022

Partager "Modularité. Nous cherchons à récupérer dans un programme python la température et à l afficher. Pour cela, nous allons utiliser une API existante."

Copied!
6
0
0

Texte intégral

(1)

Modularité

I. API

Définition 0.1.

Une API (ApplicationProgramming Interface) permet aux développeur d’intégrer une application à une autre. Cela peut permettre par exemple de récupérer des don- nées structurées depuis un site web pour les exploiter de manière automatisée dans un programme.

1. Exemple

Nous cherchons à récupérer dans un programme python la température et à l’affi- cher. Pour cela, nous allons utiliser uneAPIexistante.

Nous allons utiliser les services d’openweathermap(faites une recherche internet pour acceder au site). Si vous vous rendez sur le site, vous voyez bien les informations qui nous intéressent mais sous cette forme, nous ne pouvons pas les exploiter facile- ment. Si vous cliquez sur l’ongletAPI, vous verrez tout ce que le site propose comme API. Certaines sont gratuites d’accès, d’autres payantes Dans tous les cas, pour en bé- néficier, il faudra créer un compte sur le site. Pour découvrir le principe de l’utilisation de ces API, nous n’aurons pas besoin de compte car une API de démonstration suffit pour tester notre programme. Libre à vous si vous souhaitez travailler sur des données réelles et actualises de créer un compte.

Nous utiliserons dans cet exemple l’API : https ://openweathermap.org/current.

On accède à une API via une URL fournie par le site. Un exemple d’une telle URL

est : https ://samples.openweathermap.org/data/2.5/weather ?zip=14200,frappid=439d4b804bc8187953eb36d2a8c26a02 Cette URL contient plusieurs paramètres :

— zip : code postal et pays

— appid : clé fournie par le site quand vous avez créé un compte. Celle qui est pro- posée ici donne accès à des informations de démonstration. Elles ont le bon for- mat pour nous permettre de développer et tester notre programme.

Si vous ouvrez cette URL avec FireFox, ce dernier va les présenter de manière li- sible. En réalité, le fichier qui est envoyé via cette URL est un fichier au formatjsonqui ressemble àune structure de dictionnaireavec des association clé-valeur.

(2)

1 {

2 " c o o r d ":{" lon ":-122.09 ," lat ":37.39} ,

3 " w e a t h e r ":[{" id ":500 ," main ":" Rain "," d e s c r i p t i o n ":"

l i g h t rain "," icon ":" 10 d "}] ,

4 " base ":" s t a t i o n s ",

5 " main ":{" temp ":280.44 ," p r e s s u r e ":1017 ," h u m i d i t y ":61 ,"

t e m p _ m i n ":279.15 ," t e m p _ m a x ": 2 8 1 . 1 5 } ,

6 " v i s i b i l i t y ":12874 ,

7 " wind ":{" s p e e d ":8.2 ," deg ":340 ," gust ":11.3} ,

8 " c l o u d s ":{" all ":1} ,

9 " dt ": 1 5 1 9 0 6 1 7 0 0 ,

10 " sys ":{" type ":1 ," id ":392 ," m e s s a g e ":0.0027 ," c o u n t r y ":"

US "," s u n r i s e ": 1 5 1 9 0 5 1 8 9 4 ," s u n s e t ": 1 5 1 9 0 9 1 5 8 5 } ,

11 " id ":0 ,

12 " name ":" M o u n t a i n View ",

13 " cod ":200

14 }

Grâce au modulerequests, Python peut récupérer les données au formatjsonet les intégrer dans un dictionnaire.

Voici un programme basique permettant de récupérer et afficher quelques infor- mations :

1 i m p o r t r e q u e s t s

2

3 A P I _ K E Y = " 439 d 4 b 8 0 4 b c 8 1 8 7 9 5 3 e b 3 6 d 2 a 8 c 2 6 a 0 2 "

4

5 def g e t _ w e a t h e r ( api_key , l o c a t i o n ) :

6 url = f" h t t p s :// s a m p l e s . o p e n w e a t h e r m a p . org / data / 2 . 5 / w e a t h e r ? zip ={ l o c a t i o n }& a p p i d ={ a p i _ k e y } "

7 r = r e q u e s t s . get ( url )

8 r e t u r n r . json ()

la fonctionget_weatherva renvoyer directement un dictionnaire :

(3)

1 > > > w e a t h e r = g e t _ w e a t h e r ( API_KEY , " 14000 , fr ")

2 > > > p r i n t( w e a t h e r )

3

4 {’ c o o r d ’: {’ lon ’: -122.09 , ’ lat ’: 37.39} ,

5 ’ w e a t h e r ’: [{’ id ’: 500 ,

6 ’ main ’: ’ Rain ’,

7 ’ d e s c r i p t i o n ’: ’ l i g h t rain ’,

8 ’ icon ’: ’ 10 d ’}] ,

9 ’ base ’: ’ s t a t i o n s ’,

10 ’ main ’: {’ temp ’: 280.44 ,

11 ’ p r e s s u r e ’: 1017 ,

12 ’ h u m i d i t y ’: 61 ,

13 ’ t e m p _ m i n ’: 279.15 ,

14 ’ t e m p _ m a x ’: 281.15} ,

15 ’ v i s i b i l i t y ’: 12874 ,

16 ’ wind ’: {’ s p e e d ’: 8.2 , ’ deg ’: 340 , ’ gust ’: 11.3} ,

17 ’ c l o u d s ’: {’ all ’: 1} ,

18 ’ dt ’: 1 5 1 9 0 6 1 7 0 0 ,

19 ’ sys ’: {’ type ’: 1 ,

20 ’ id ’: 392 ,

21 ’ m e s s a g e ’: 0.0027 ,

22 ’ c o u n t r y ’: ’ US ’,

23 ’ s u n r i s e ’: 1 5 1 9 0 5 1 8 9 4 ,

24 ’ s u n s e t ’: 1 5 1 9 0 9 1 5 8 5 } ,

25 ’ id ’: 0 ,

26 ’ name ’: ’ M o u n t a i n View ’,

27 ’ cod ’: 200}

Récupérer la température se fait alors via

1 > > > p r i n t( w e a t h e r [’ main ’][’ temp ’])

En effet, notre dictionnaire sous la clé ’’main’renvoie un nouveau dictionnaire

1 {’ temp ’: 280.44 ,

2 ’ p r e s s u r e ’: 1017 ,

3 ’ h u m i d i t y ’: 61 ,

4 ’ t e m p _ m i n ’: 279.15 ,

5 ’ t e m p _ m a x ’: 2 8 1 . 1 5 }

qui à son tour renvoie la température via sa clé’temp’.

2. Exercice

1. Récupérer de l’exemple précédent la direction du vent (en degrés).

2. En utilisantHourly Forecast 4days(https ://openweathermap.org/api/hourly-forecast), afficher les prévisions météo pour les 4 prochains jours.

(4)

II. Créer un module en python

Vous l’avez vu, le travail sur les API a été grandement facilité par l’utilisation du modulerequestsqui fait en réalité tout le travail pour nous. Grâce à ce module, notre programme est très concis et lisible. De plus, nous pouvons exploiter ce même module requestsdans plusieurs programmes sans avoir à le redévelopper.

Nous allons voir maintenant comment créer nos propres modules en python afin d’enrichir le langage de nouvelles fonctions et objets réutilisables facilement.

1. Principe Général

Un module est un ensemble de fonctions suffisamment générales pour être réuti- lisables dans plusieurs projets. Pour plus de clarté, on ne regroupera dans un même module que les fonctions relatives à une même fonctionnalité.

Un module s’importepar son nom qui est le nom du fichier python privé de l’ex- tension .py.

Par exemple, le module random regroupe des fonctions en lien avec l’aléatoire (ran- dint,choice,shuffle, ...)

Un module étantune boîte noire- on a pas en général le code des fonctions sous les yeux - , celui-ci doit exposer de manière claire au développeur soninterface, c’est à dire

— la liste des fonctions et leur rôle

— ce que chaque fonction prend en entrée

— ce que chaque fonction renvoie en résultat

Ces fonctions sont stockées dans un fichierrandom.pyquelque-part sur le système de fichiers de votre ordinateur.

Pour cela, un formalisme particulier existe sous python - lesdocstrings- qui per- met de décrire précisément ces informations. Ainsi, un développeur pourra accéder à l’interface du module pour savoir comment utiliser chacune des fonctions.

2. Exemple

Tapez ce code dans une console python :

1 > > > from r a n d o m i m p o r t r a n d i n t

2 > > > help( r a n d i n t )

Vous constaterez l’affichage de ce texte explicatif. Cela est rendu possible par l’uti- lisation dedocstringsà l’intérieur de la fonctionrandint.

(5)

1 Help on m e t h o d r a n d i n t in m o d u l e r a n d o m :

2

3 r a n d i n t ( a , b ) m e t h o d of r a n d o m . R a n d o m i n s t a n c e

4 R e t u r n r a n d o m i n t e g e r in r a n g e [ a , b ] , i n c l u d i n g both end p o i n t s .

Si vous tapezhelp(random)vous aurez une description générale des fonctions dis- ponibles dans le module.

Il est intéressant de regarder les sources d’un module officiel de python pour voir

comment sont implémentées toutes ces docstrings : https ://github.com/python/cpython/blob/master/Lib/random.py On retiendra :

— Unedocstringest une chaîne de caractère délimitée par doubles quotes

— un module commence par unedocstringde présentation générale

— chaque fonction commence par unedocstring présentant le rôle et le fonction- nement de celle-ci.

Voici l’implémentation de la fonctionrandintdans le modulerandomqui montre d’où provient le texte d’aide affiché par la fonctionhelp().

1 def r a n d i n t ( self , a , b ) :

2 """ R e t u r n r a n d o m i n t e g e r in r a n g e [ a , b ] , i n c l u d i n g both end p o i n t s .

3 """

4

5 r e t u r n self . r a n d r a n g e ( a , b +1)

Pour en savoir plus sur les docstrings, vous pouvez vous référer au guide de préco- nisations python PEP-257 : https ://www.python.org/dev/peps/pep-0257/

3. Importer un Module

Vous êtes confrontés à l’import de modules depuis la première ligne de python que vous avez rencontré pratiquement. En effet, si vous voulez utiliser des fonctions aléa- toires ou mathématiques de base, vous êtes obligé d’importer le modulerandomou maths.

R ATTENTION ATTENTION : N’importez JAMAIS un module par la commande from module import *

et pourtant, c’est la première ligne que l’on trouve lorsque l’on programme en py- thon sur calculatrice. C’estune très mauvaise pratiquemenant à des bugs difficiles à déceler. En effet, cela importe toutes les fonctions du module sans distinction, avec le risque d’écraser d’autres fonctions de même nom dans d’autres modules.

Vous trouverez beaucoup de code python sur internet important les modules ainsi.

C’est mal, ne le faîtes pas !

Il y a deux moyens d’importer proprement des modules :

(6)

from module import fonction_1 fonction_2, ...

Avec cette syntaxe, on indique explicitement les fonctions que l’on souhaite utili- ser. C’est très clair pour le lecteur et le développeur. Il n’y a pas de risques de confusion ou de conflits de noms car on voit les fonctions que l’on importe.

Pour utiliser les fonctions, il suffit de les invoquer simplement par leur nom :fonc- tion1(arguments).

1 from r a n d o m i m p o r t r a n d i n t

2 a = r a n d i n t (1 ,100)

import module

Cette syntaxe concise à l’import est aussi sans ambiguïté. Par contre, elle va impo- ser que chaque appel de fonction soit précédé du module en préfixe.

Pour utiliser les fonctions, on les invoquera en faisant :module.fonction1(arguments).

1 i m p o r t r a n d o m

2 a = r a n d o m . r a n d i n t (1 ,100)

Il est possible en cas de nom de module trop compliqué de lui donner unaliasplus cours par commodité :

1 i m p o r t r a n d o m as rd

2 a = rd . r a n d i n t (1 ,100)

4. Exercices

Écrire un module aires permettant de calculer les aires de figures géométriques usuelles :

— triangle

— disque

— carré

— rectangle

— parallélogramme

— losange

Vous veillerez à respecter les consignes suivantes :

— à chaque figure correspondra une fonction du même nom

— vous déciderez des paramètres pertinents à communiquer à chaque fonction pour le calcul de l’aire

— le module et chaque fonction seront correctement documentées afin qu’un dé- veloppeur ne connaissant pas votre module puisse l’utiliser facilement grâce à la fonctionhelp.

Vous écrirez ensuite un petit programme afin de tester le fonctionnement de ce module.

Références

Documents relatifs

Notre seule question, en réalité, est de savoir si nous allons ainsi ouvrir réellement nos clas, ses sur la vie et tuer définitivement la scolas- tique sans

Evoquant la tendance prédominante dans le domaine péda - gogique contempora in de ((l'éducation spécialisée )) qui impose une ((pédagogie curative)) , cette vague

Les chiffres so nt là.. Qu e je

Le module Turtle contient des fonctions pour déplacer un curseur dans une fenêtre graphique en laissant une trace sous les endroits par lesquels il est passé... Les

•  créer un autre fichier et utiliser les différentes fonctions en prenant soin de mettre au début du fichier la ligne suivante :. import mNomFichier

Définition : Un décorateur est une fonction qui prend en paramètre un élément pour retourner un élément du même type décoré (avec des fonctionalités supplémentaires).

Autre conséquence de l’indépendance : Cov(X,Y)=0.. Autrement dit, à une valeur donnée de X correspond une et une seule valeur de Y et vice versa.. 2°) Présenter les lois

Rappelons que diagonaliser une matrice dans , c’est déterminer une base de vecteurs propres et de valeurs propres associées, c'est-à-dire trouver des nombres réels