N.S.I. WorkSpace Compétence,T-Th-D3,Terminale Terminale – Compétence | API (Application Programming Interface) 2/4

Terminale – Compétence | API (Application Programming Interface) 2/4

Vous avez dit « wrapper Python » ?

De nombreuses API disposent d’un wrapper Python : c’est un module Python qui permet d’interroger la base de données d’un fournisseur de façon simplifiée, sans avoir à écrire les requêtes Web, ni à interpréter les réponses.

Ces dernières sont généralement écrites au format JSON, qui est un format d’échange de données, au même titre que le XML.

À partir de ces réponses, le wrapper Python génère des listes ou des dictionnaires, facilement manipulables.

Source

Utilisation du wrapper Python pour l’API de « Mars Rover Photos »

Contexte

Découvrir le site :

Installation du wrapper

Télécharger le wrapper :
python_nasa_api-0.0.2-py3-none-any.whl (source) – Après téléchargement, vérifier que le fichier se trouve bien dans le dossier « Téléchargement » de l’utilisateur en cours.

Ouvrir un éditeur/interpréteur Python (ex : Pyzo).

Dans la console, utiliser les commandes « cd » et « ls » (comme les commandes d’un shell) pour se déplacer dans l’arborescence du système de fichier et visualiser le contenu d’un répertoire afin d’atteindre le fichier du wrapper. [ Dans certains cas la commande cd Downloads suffit]

Dans la console taper et valider la commande :

>>> pip install python_nasa_api-0.0.2-py3-none-any.whl

Des informations s’affichent dans la console sur la progression de l’installation… (variable selon la configuration de l’installation de Python)

Processing c:usersuserdownloadspython_nasa_api-0.0.2-py3-none-any.whl
Installing collected packages: python-nasa-api
Successfully installed python-nasa-api-0.0.2

Premiers pas avec le wrapper…

Obtenir un ‘jeton’ : pour cela il faut créer un compte à partir de cette adresse : https://api.nasa.gov/ et suivre les consignes données.
Le jeton donné ci-après n’a qu’une valeur indicative. Il n’est plus actif.

Dans la console, entrer les instructions suivantes les unes après les autres :

from nasaapi import MarsRovers
jeton = 'plVirWytxjNQ8XTD92IEflveR85cXOUou2NtXx'
rovers = MarsRovers(jeton, 50, 'RHAZ')
cur = rovers.curiosity()
print(cur['photos'][0]['img_src'])

Noter le type de réponse obtenue et vérifier sa validité.

On cherche à expliciter les instructions précédentes.

  • Se renseigner sur les fonctions « help() », « type() » et « dir() ».
  • A partir de ces fonctions :
    • identifier le type de ‘rovers’ et par là même le paradigme de programmation sur lequel repose le wrapper ;
    • identifier à quels paramètres correspondent les valeurs 50 et ‘RHAZ’. Chercher d’autres valeurs possibles pour ces paramètres (consulter les informations fournies sur l’API ‘Mars Rover Photos’ à cet URL : https://api.nasa.gov/) et tester ;
    • identifier le type de ‘cur’ et le cas échéant le nombre d’éléménts qu’il comporte ;
    • identifier d’autres valeurs possibles à la place de ‘img_src’.
Aide
>>> import nasaapi

>>> type(nasaapi)
<class 'module'>

>>> dir(nasaapi)
['Client', 'MarsRovers', 'NIVL', 'TLE', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'load', 'random', 'requests']

>>> help(nasaapi.MarsRovers)
Help on class MarsRovers in module nasaapi:

class MarsRovers(builtins.object)
 |  MarsRovers(api_key, sols=1444, camera='fhaz')
 |  
 |  Methods defined here:
 |  
 |  __init__(self, api_key, sols=1444, camera='fhaz')
 |      Initialize self.  See help(type(self)) for accurate signature.
 |  
 |  curiosity(self)
 |  
 |  opportunity(self)
 |  
 |  spirit(self)
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)

>>> dir(nasaapi.MarsRovers)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'curiosity', 'opportunity', 'spirit']

>>> api_key = 'plVirWytxjNQ8XTD92IEflveR85cXOUou2NtXx'
>>> rovers = nasaapi.MarsRovers(api_key)

>>> type(rovers)
<class 'nasaapi.MarsRovers'>

>>> type(rovers.curiosity)
<class 'method'>

>>> help(rovers.curiosity)
Help on method curiosity in module nasaapi:

curiosity() method of nasaapi.MarsRovers instance

>>> type(rovers.curiosity())
<class 'dict'>

>>> len(rovers.curiosity())
1

>>> rovers.curiosity().keys()
dict_keys(['photos'])

>>> type(rovers.curiosity()["photos"])
<class 'list'>

>>> len(rovers.curiosity()["photos"])
10

>>> type(rovers.curiosity()["photos"][0])
<class 'dict'>

>>> rovers.curiosity()["photos"][0].keys()
dict_keys(['id', 'sol', 'camera', 'img_src', 'earth_date', 'rover'])