Revenir
Revenir

Manipuler le format JSON

Prérequis : maîtriser les bases de la programmation Python (variables, boucles, entrées/sorties)

Sommaire

Avant de commencerPrésentationLiens utiles
Découvrir l'ISSLa Station spatiale internationaleLiens utilesVue de l'ISS au-dessus de la Terre - ImageLes éléments constitutifs de l'ISS - SchémaLa visite de l'ISS - Vidéo
ExercicePréparationLiens utilesTraitement des données avec PythonLiens utilesVers le notebook Capytale - Site

Avant de commencer

Prérequis : maîtriser les bases de la programmation Python (variables, boucles, entrées/sorties)
Contexte de la mise en œuvre de l'activité : en classe, en présence de l'enseignant
Ressources, matériel, documents nécessaires :
  • Bibliothèques Python : json, urllib
  • Connexion Internet

Présentation

L'adressehttp://api.open-notify.org/astros.json est celle d'un "web service" qui renvoie des données concernant la Station spatiale internationale. Les informations sont mises à jour régulièrement. Ainsi, en consultant http://api.open-notify.org/astros.json, nous savons quelles personnes sont actuellement dans l'ISS.
Ces informations sont codées au format JSON. 
L'activité proposée consiste à présenter de manière plus élégante ces informations, en les traitant à l'aide d'un programme Python que vous compléterez. 
Avant cela, vous pourrez vous documenter sur la station ISS pour bien comprendre le contexte de cette activité. 

Liens utiles

https://api.open-notify.org/astros.json

https://api.open-notify.org/astros.json

Découvrir l'ISS

La Station spatiale internationale

En abrégéISS(International Space Station), est une station spatiale placée en orbite terrestre basse, occupée en permanence par un équipage international qui se consacre à la recherche scientifique dans l'environnement spatial. Ce programme, lancé et piloté par la NASA, est développé conjointement avec l'agence spatiale fédérale russe, avec la participation des agences spatiales européenne, japonaise et canadienne.
Il s'agit d'une station composée de modules scientifiques destinés à l'étude des êtres vivants dans l'espace, mais aussi à l'expérimentation de nouvelles technologies militaires et civiles comme les robots, les sondes, les réacteurs, etc. L'ISS a été conçue pour accueillir une équipe d'astronautes pendant plusieurs mois. Ainsi, il n'y a pas seulement des modules de recherche : on trouve également des salles de détente, sport, chambre, salle à manger. Cependant, les pièces sont de taille limitée. Par conséquent, les ressources alimentaires et le matériel mobile sont régulièrement acheminés par des cargos, des vaisseaux Soyouz, car la station n'est pas prévue pour contenir de grands stocks. L'ISS possède donc un sas d'arrimage permettant aux vaisseaux de s'accrocher.
L'ISS est aussi grande qu'un terrain de football ! Ses panneaux solaires, qui lui permettent de s'auto-approvisionner en énergie, s'étendent sur plusieurs dizaines de mètres carrés. De part et d'autre de la poutre principale, qui soutient l'ensemble des modules, on trouve des panneaux grisâtres légèrement pliés "en accordéon" : il s'agit de surfaces permettant d'évacuer la chaleur excessive de l'ISS. De ce fait, afin de maintenir une température convenable pour les astronautes, ces surfaces sont longues de plusieurs mètres.
Placée en orbite à 350 km d'altitude, l'ISS tourne autour de la Terre. Elle se déplace à une vitesse moyenne de 28 000 km/h. Ainsi, en une journée, plusieurs tours complets peuvent être accomplis par la station. Depuis la planète, il est possible d'apercevoir l'ISS à l'œil nu car ses panneaux solaires sont très brillants. Vue depuis la Terre, la station ressemble à un point lumineux qui traverse le ciel. On notera que l'ISS ne fait le tour du globe qu'en 90 minutes seulement !
Visualiser l’ISS en 3D
Dès le départ, la grande complexité d'assemblage de la station est évidente. Pas moins de 43 lancements sont planifiés dès 1994, avec 34 vols Shuttle, 5 lanceurs Soyouz et 4 Proton, sans compter les rotations d'équipages tous les 6 mois. Seize États se sont ainsi associés au montage du plus grand mécano spatial de tous les temps : le Canada, le Danemark, la France, l'Allemagne, l'Italie, le Japon, la Belgique, le Brésil, la Hollande, la Norvège, la Russie, l'Espagne, la Suède, la Suisse, le Royaume-Uni et les États-Unis.

Liens utiles

https://www.heavens-above.com/ISS_3D.aspx?lat=0&lng=0&loc=Unspecified&alt=0&tz=UCT

https://www.heavens-above.com/ISS_3D.aspx?lat=0&lng=0&loc=Unspecified&alt=0&tz=UCT

Vue de l'ISS au-dessus de la Terre - Image

Les éléments constitutifs de l'ISS - Schéma

La visite de l'ISS - Vidéo

https://www.youtube.com/watch?v=lrGQEgAmgWk

https://www.youtube.com/watch?v=lrGQEgAmgWk

Exercice

Préparation

JavaScript Object Notation (JSON) est un format de données textuelles dérivé de la notation des objets du langage JavaScript. Il permet de représenter de l’information structurée. Il a été créé par l’américain Douglas Crockford qui l'a décrit en 2006.
Description :
{...} : les accolades définissent un objet.
"language":"Java" : Les guillemets (double-quotes) et les double-points définissent un couple clé/valeur (on parle de membre).
[...] : Les crochets définissent un tableau (ou array en anglais).
{"id":1, "language":"json", "author":"Douglas Crockford"} : Les virgules permettent de séparer les membres d'un tableau ou, comme ici, d'un objet.
Un web service a une adresse (url) comme une page web. Au lieu de renvoyer du code HTML dans le cas d’une page web, il retourne des données.
Ouvrirla page liée dans votre navigateur.
1. Quel est le format de donnée enregistré dans cette page ?
2. Combien de personne sont actuellement dans l’espace ? Comment s’appellent celles qui sont sur l'ISS ?

Liens utiles

https://api.open-notify.org/astros.json

https://api.open-notify.org/astros.json

Traitement des données avec Python

Ouvrez un IDE Python et dans un nouveau document, importez les bibliothèques nécessaires :
import json
import urllib.request
Maintenant appelons le web service :
response = urllib.request.urlopen("url de l'adresse précédente")
Chargez la réponse JSON dans une structure de données Python :
result = json.loads(response.read())
et affichez le résultat.
Exécutez le programme. Normalement vous devriez retrouver exactement le même affichage que sur le site en ligne.
Un dictionnaire en python est une sorte de liste où l’on utilise des clés alphanumériques associées à des valeurs. Pour ajouter des valeurs à un dictionnaire, il faut indiquer une clé ainsi qu'une valeur.
Exemple :
a = {}
a["nom"] = "Turing"
a["prenom"] = "Alan"
print(a) --> {'nom': 'Turing', 'prenom': 'Alan'}
La méthode get() vous permet de récupérer une valeur dans un dictionnaire :
data = {"name": "Turing", "age": 45}
data.get("name") --> 'Turing'
Pour en savoir plus sur lesdictionnaires.
Maintenant affichons les informations de façon plus lisible. D’abord, cherchons le nombre de personnes présentes dans l'espace :
print("People in Space", result["???"])
3. Que faut-il marquer à la place des points d’interrogation ?
La valeur associée à la clé ‘people’ est une liste de dictionnaires ! Mettons cette valeur dans une variable pour pouvoir l’utiliser :
people = result["people"]
Affichez cette variable.
Maintenant nous avons besoin d’afficher une ligne pour chaque astronaute. Utilisez une boucle ‘for’ pour le faire. À chaque passage dans la boucle, p correspondra à un dictionnaire d’un astronaute différent.
for p in ??? :
print(p["???"])
4. Complétez ce bout de code pour afficher les noms des astronautes présents dans l'espace. Nous utilisons les données en direct donc le résultat dépendra du nombre de personnes actuellement dans l’espace. Que faut-il marquer à la place des points d’interrogation ?
Comme pour le nom des astronautes, le web service fournit le nom du vaisseau dans lequel il se trouve.
5. Modifiez le script pour qu’il affiche aussi le nom du vaisseau dans lequel se trouve l’astronaute ? Quelle instruction doit-on trouver dans la boucle précédente ?
6. Modifiez votre code pour n'afficher que les occupant de l'ISS.

Liens utiles

https://python.doctor/page-apprendre-dictionnaire-python

https://python.doctor/page-apprendre-dictionnaire-python

Vers le notebook Capytale - Site