Introduction

Nous allons réaliser une application pour accéder aux données des stations-service françaises. Pour ce faire, nous allons utiliser les données libres fournies par le site prix-carburants.gouv.fr.

Durant les TD, nous allons :

Récupération des fichiers de données

Vous allez télécharger un fichier de données sur la page proposant les données publiques des stations-service françaises. Vous pouvez prendre les données de l'année courante. Notez que nous reviendrons sur cette page pour récupérer les données relatives à des dates différentes pour observer l'évolution des prix. Placez les fichiers de données dans le répertoire data du projet.

Éditez le fichier XML que vous devez de télécharger. Regardez la structure des données présentes dans ce fichier. Essayez de décrire de façon synthétique et précise le format de ce fichier. Indiquez le nom et le type (entier, chaîne de caractères, flottant, heure, etc.) de chaque donnée qu'il contient. N'hésitez pas à regarder les informations données sur la page sur laquelle vous avez téléchargé les données.

Analyse des données à notre disposition

Afin de faire fonctionner ces validations, vous devez compléter les deux fichiers validation/carburants.dtd et validation/carburants.xsd. Pour cela, listez les données présentes dans ces fichiers. Vous devez donner un nom et le domaine de chaque information présente dans le fichier. Vous devez également décrire par écrit la structure du fichier ainsi que les contraintes qui semblent être vérifiées. À partir de la description que vous venez de faire des fichiers, écrivez un DTD et vérifiez, en exécutant la validation, que les fichiers du site prix-carburants.gouv.fr vérifient votre DTD. Essayez avec plusieurs fichiers de données et corrigez le DTD si cela est nécessaire. Réalisez ensuite la même opération en écrivant cette fois-ci un schéma XML. Je vous conseille de créer, à partir d'un des fichiers de données, un fichier XML plus petit en ne conservant qu'un petit nombre de points de vente pour pouvoir déboguer plus facilement le DTD et le schéma.

Pour valider un fichier, il suffit d'exécuter une des commandes suivantes en étant à la racine du projet (en les complétant avec le nom du fichier XML à valider) :

Conception de la base de données

Proposez un modèle conceptuel en UML avec pour objectif le stockage et la manipulation des données des fichiers du site prix-carburants.gouv.fr. Traduisez ensuite ce modèle conceptuel en schéma relationnel puis écrivez le script SQL de création des tables. Créez une base de données carburants et exécutez le script de création des tables en utilisant PhpMyAdmin ou le client MySQL dans un terminal. Le script de création de la base de données devra être placé dans le fichier alimentation/create_database.sql, car il sera utilisé par le script Python d'alimentation de la base de données que vous allez écrire à l'étape suivante.

Alimentation de la base de données

Écrivez un script Python qui extrait les données présentes dans les fichiers XML puis qui insère les données extraites dans la base de données. Dans un premier temps, vous afficherez sur la console les données récupérées. Ensuite, vous modifierez ce script pour alimenter réellement les tables de la base de données MySQL.

À la fin, ce script devra :

Écriture des requêtes SQL

Une fois la base de données alimentée, vous allez pouvoir l'interroger. Écrivez les requêtes qui répondent aux questions suivantes :

  1. Quels sont les types de carburants possibles ?
  2. Quels sont les services possibles ?
  3. Quels sont les coordonnées GPS, l'identifiant et l'adresse des stations situées à Marseille ?
  4. Combien de stations sont situées à Marseille ?
  5. Combien de stations possède chaque département ?
  6. Quelles sont les adresses et villes des stations qui proposent le service Station de gonflage ?
  7. Combien de stations proposent le service Station de gonflage dans chaque département ?
  8. Quel est le prix du Gazole dans la station d'identifiant 61500002 le 13 janvier 2021 ?
  9. Quel est le prix moyen du Gazole le 13 janvier 2021 si on considère uniquement les stations des Bouches-du-Rhône ?
  10. Quel est le prix moyen du Gazole dans chaque département le 13 janvier 2021 ?
  11. Quelle est la station-service la plus proche de Luminy à vol d'oiseau ?
  12. Parmi les stations qui se trouvent à une distance de 30km de Luminy, quels sont les 5 moins chères en considérant le prix du Gazole le 13 janvier 2021 ?
  13. Quelles sont les 10 stations les plus proches de Luminy à vol d'oiseau qui proposent le service Station de gonflage ?
  14. Quels sont les pourcentages des stations en rupture par type de carburant le 13 janvier 2021 ?

Distribution des données

Vous allez mettre en place une API Web permettant d'interroger la base de données. Pour cela, vous allez utiliser le framework Python Flask. Normalement, les modules nécessaires au framework Flask sont installés sur votre ordinateur, car ils sont présents dans le fichier requirements.txt. Si ce n'est pas le cas, vous pouvez les installer à l'aide de la commande pip3 install -r requirements.txt.

Les URI de l'API :

Visualisation

Vous allez implémenter une page Web pour visualiser les données sur une carte. Cette page Web contiendra un script JavaScript qui effectuera des requêtes au service Web mis en place à l'étape précédente. Pour afficher la carte, vous pouvez utiliser la librairie Leaflet.