top of page

Tuto : accéder aux prévisions de Météo France et créer une carte météo avec Python

Dernière mise à jour : 7 nov.


Dans cette période de canicule, beaucoup de cartes météos circulent dans les médias et sur les réseaux sociaux. Dans ce tuto, nous allons voir pas à pas comment vous pouvez réaliser votre propre carte à partir de prévisions accessibles gratuitement via Météo France.


Obtenir l’accès aux APIs de Météo France


Météo France met à disposition certaines de ses prévisions. L’accès à ces données est gratuit et relativement simple. Pour commencer, allez sur le portail des APIs Météo France et créez un compte.

Une fois que le compte est créé, connectez-vous et rendez-vous sur la page “applications” en suivant ce lien ou en cliquant sur l’onglet correspondant en haut à gauche, à côté du logo Météo France.


Sur cette page, cliquez sur “Ajoutez une nouvelle application”, quelques informations sur le projet vous sont demandées mais seul le nom est obligatoire. Mettez ce que vous voulez, par exemple “ Test accès previsions” puis cliquez sur sauvegarder.


Retournez sur la page “Applications” et cliquez sur l’application que vous venez de créer. Dans la colonne de gauche cliquez sur “Abonnements” puis “S’abonner aux APIs” en haut de la page.


Vous pouvez maintenant choisir les APIs auxquels votre application va pouvoir accéder. Nous allons utiliser Arpege, l’un des modèles de météorologiques de Météo France. Cliquez sur “s’abonner” dans la ligne correspondante. Vous pouvez ensuite fermer la fenêtre.


Plusieurs méthodes d’accès sont disponibles, nous allons utiliser la plus simple : générer une clé. Pour cela cliquez sur “Api Key” dans la colonne de gauche puis “Generate key”. Une fenêtre s’ouvre pour vous signaler que la clé sera valable 3 ans, cliquez simplement sur “Générer” puis copiez la clé fournie.


Il reste une dernière étape avant de pouvoir utiliser cette clé dans votre code : changez l’encodage. Pour cela vous pouvez aller sur ce site, coller votre clé dans le premier cadre puis cliquer sur “Encode”.


Félicitation, vous avez maintenant une clé pour accéder aux données de Météo France. Il ne vous reste plus qu’à copier le résultat dans un fichier texte.


Quelles sont les prévisions de température disponibles ?


Les prévisions sont réalisées toutes les 6 heures (à 0h, 6h, 12h et 18h) et courent, en théorie, sur 114 heures. Cependant les prévisions peuvent n’être pas disponibles ou couvrir une période moins longue. Nous allons donc d’abord récupérer la liste des prévisions disponibles pour la température, choisir la plus récente et voir précisément quelle période elle couvre.


Commençons par importer les librairies utiles, la clé de l’API et le nom exact de la prévision que nous cherchons :


  1. from urllib import request

  2. from bs4 import BeautifulSoup

  3. #Lecture du fichier texte contenant la clé

  4. with open('API_key.txt') as f:

  5. api_key = f.read()

  6. #Nom de la prévision recherchée

  7. ID = "TEMPERATURE__SPECIFIC_HEIGHT_LEVEL_ABOVE_GROUND"


Nous allons maintenant construire l’adresse de l’API à interroger, elle se compose :

  1. De l’adresse générique des APIs Météo France : https://public-api.meteofrance.fr/public/

  2. Du nom de la ressource à laquelle on veut accéder, dans notre cas les prévisions disponibles (“capabilities”) du modèle ARPEGE pour l’Europe

  3. De la clé vous autorisant à accéder aux données


L’adresse peut donc être obtenue de la façon suivante :


  1. #Ressource à laquelle on souhaite accéder

  2. ressource = "arpege/1.0/wms/MF-NWP-GLOBAL-ARPEGE-01-EUROPE-WMS/GetCapabilities?service=WMS"

  3. #URL à interroger

  4. url = f"https://public-api.meteofrance.fr/public/{ressource}&apikey={api_key}"


Nous allons interroger cette url, récupérer et lire la réponse puis la mettre en forme en utilisant Beautifulsoup.


  1. #On récupère la réponse de l'API et on la met en forme avec BeautifulSoup

  2. response = request.urlopen(url)

  3. soup = BeautifulSoup(response.read())


La réponse contient les dates des prévisions disponibles pour l’ensemble des variables : la température, qui nous intéresse, mais aussi la vitesse du vent, l’humidité relative, les précipitations, etc. Il faut sélectionner le layer correspondant à la variable que nous cherchons :


  1. #On sélectionne l'ensemble des layers contenus dans la réponse

  2. ensemble_des_layers = soup.find_all("layer")

  3. #On les parcourt jusqu'à trouver celui qui correspond à l'ID recherché

  4. for layer in ensemble_des_layers:

  5. if layer.find("name").text == ID :

  6. break

  7.          else:

  8.                  pass


Dans ce layer nous allons récupérer les dates de début des prévisions disponibles (“reference_time”), puis sélectionner la dernière. Enfin, à partir de cette date et de l’ID de la variable recherchée nous allons construire le nom de la prévision qui nous intéresse :


  1. #On recherche les prévisions disponibles dans ce layer :

  2. previsions_disponibles = layer.find("dimension", {"name":"reference_time"}).text.split(",")

  3. #On récupére la date de la dernière prevision

  4. date_derniere_prevision = previsions_disponibles[-1]

  5. #Et on construit l'ID de la prévision correspondante

  6. derniere_prevision = f"{ID}___{date_derniere_prevision}"


Au moment où cet article est écrit, la dernière prévision est : “TEMPERATURE__SPECIFIC_HEIGHT_LEVEL_ABOVE_GROUND___2022–07–26T12:00:00Z”. C’est-à-dire qu’elle commence le 26 juillet 2022 à midi.


Téléchargement de la prévision météo

Comme on l’a vu plus haut, les prévisions courent normalement sur 114 heures avec un pas de temps horaire mais cela peut parfois changer. Regardons quelles sont les dates couvertes par la notre.

Le principe est le même que précédemment : construire l’url à interroger, récupérer la réponse et chercher les informations qui nous intéressent :


  1. ressource = "/arpege/1.0/wcs/MF-NWP-GLOBAL-ARPEGE-01-EUROPE-WCS/DescribeCoverage?service=WCS"

  2. url = f"https://public-api.meteofrance.fr/public{ressource}&coverageID={derniere_prevision}&apikey={api_key}"

  3. response = request.urlopen(url)

  4. soup = BeautifulSoup(response.read())

  5. debut = soup.find('gml:beginposition').text

  6. fin = soup.find('gml:endposition').text

  7. debut, fin


Le résultat dans notre cas : la première date disponible dans la prévision est le 26 juillet à midi, comme prévu, et la dernière est le 31 juillet à 6h.


On peut récupérer les prévisions pour n’importe quelle heure entre ces deux dates. Prenons par exemple le 30 juillet à 16h.


Encore une fois, il faut construire l’url correspondante. Celle-ci sera un peu plus complexe. Comme précédemment, elle comprend l’url de base, la ressource à laquelle on veut accéder et la clé mais il faut également y ajouter :


  • la prévision utilisée : dans notre cas la dernière, que nous avons identifié plus haut


  • le pas de temps recherché


  • la hauteur au-dessus du sol : 2 mètres


  • les limites en latitude et longitude de la zone qui nous intéresse.


Pour ce dernier point, nous allons prendre 38 à 53 pour la latitude et -8 à 12 pour la longitude ce qui correspond approximativement à la France métropolitaine. Il serait tout à fait possible de prendre une autre zone en Europe ou, en modifiant la ressource pour accéder à la version mondiale du modèle, n’importe où ailleurs dans le monde.


  1. ressource = "/arpege/1.0/wcs/MF-NWP-GLOBAL-ARPEGE-01-EUROPE-WCS/GetCoverage?SERVICE=WCS"

  2. subset_time = "2022-07-30T16:00:00Z"

  3. subset_lat = "38,53"

  4. subset_lon = "-8,12"

  5. url = f"https://public-api.meteofrance.fr/public{ressource}&coverageId={derniere_prevision}&subset=time({subset_time})&subset=lat({subset_lat})&subset=long({subset_lon})&subset=height(2)&apikey={api_key}"


Pour la suite tout se passe comme précédemment. La seule différence est que le résultat n’est plus du html mais un .tiff. On va simplement le récupérer et l’enregistrer dans un fichier temporaire :

  1. response = request.urlopen(url)

  2. #Enregistrement dans un fichier temporaire

  3. open('temp.tiff', 'wb').write(response.read())


Exploitation de la prévision et carte météo

Comme on l’a déjà vu dans des tutos précédents, le fichier .tiff que l’on vient de créer peut être ouvert avec Xarray. On peut donc afficher la prévision très simplement avec .plot() :


  1. import xarray as xr

  2. #Ouverture du fichier et affichage

  3. with xr.open_rasterio('temp.tiff') as temp:

  4. temp.plot()


Voici le résultat obtenu :


Prévision et carte météo

C’est déjà pas mal, mais avec quelques lignes de code supplémentaires, on peut obtenir une carte plus esthétique. Par exemple :


Prévision de température pour le 30 juillet 2022 à 16h

Voici le code pour créer cette carte :


  1. import xarray as xr

  2. import cartopy.crs as ccrs

  3. import cartopy.feature as cfeature

  4. import matplotlib.pyplot as plt

  5. #Ouverture de la prévision

  6. with xr.open_rasterio('temp.tiff') as temp:

  7. da_to_plot = temp.sel(band = 1, drop = True)

  8. #Coordonnées de la zone à représenter

  9. lat_min, lat_max = 40, 52

  10. lon_min, lon_max = -6, 10

  11. central_longitude = (lon_min + lon_max) / 2

  12. central_latitude = (lat_min + lat_max) / 2

  13. #Echelle de température

  14. cmap = "RdBu_r"

  15. milieu = 15

  16. delta = 30

  17. #Initialisation de la figure

  18. fig = plt.figure(figsize=(12,10), facecolor = 'w')

  19. ax = plt.axes(projection = ccrs.LambertConformal(central_longitude = central_longitude,

  20. central_latitude = central_latitude))

  21. ax.set_extent([lon_min, lon_max, lat_min, lat_max])

  22. #Représentation de la prévision

  23. = da_to_plot.plot(transform = ccrs.PlateCarree(),

  24. cmap= cmap,

  25.                               vmin = milieu - delta,

  26.                               vmax = milieu + delta,

  27.                               add_colorbar = False,

  28.                               alpha = 0.8)

  29. #Représentation des isothermes

  30. isothermes = [i for i in range (milieu - delta, milieu + delta + 5, 5)]

  31. g2 = da_to_plot.plot.contour(transform = ccrs.PlateCarree(),

  32.                               cmap = cmap,

  33.                               add_colorbar = False,

  34.                               levels = isothermes,

  35.                               linewidths = 3)

  36. #Création de l'échelle

  37.                               cb = plt.colorbar(g,

  38.                               label = "Température (°C)",

  39.                               shrink = 0.7,

  40.                               extend = 'both')

  41. cb.add_lines(g2)

  42. #Affichage des côtes, frontières et océans

  43. ax.coastlines(zorder = 101)

  44. ax.add_feature(cfeature.BORDERS, zorder = 101, color = 'black', ls = ':')

  45. ax.add_feature(cfeature.OCEAN, zorder = 99, color = 'lightgray')

  46. #Titre

  47. ax.set_title("Prévision de température pour le 30 juillet 2022 à 16h",

  48. fontsize = "xx-large")

  49. plt.show()


Aller plus loin avec les prévisions de Météo France


Avec ce tuto, vous avez toutes les bases pour exploiter les données mises à disposition par Météo France et produire des prévisions météorologiques locales adaptées à vos besoins. Voici quelques pistes :


Réaliser des prévisions pour votre ville ou votre département


Il suffit de trouver les coordonnées correspondantes et d’adapter la latitudes et longitudes dans l’url (subset_lat et subset_lon) puis sur la carte (lat_min, lat_max, lon_min, lon_max).

Si la zone recherchée est en France, vous pouvez également utiliser le modèle AROME. Il n’est disponible que sur 42 heures mais offre une meilleure résolution spatiale : jusqu’à 0.01° contre 0.1 pour ARPEGE. Il faudra vous abonner à ce modèle puis changer le nom de la ressource utilisée dans les urls : il commencera par “/arome/1.0/wcs/MF-NWP-HIGHRES-AROME-001-FRANCE-WCS” au lieu de “/arpege/1.0/wcs/MF-NWP-GLOBAL-ARPEGE-01-EUROPE-WCS”.


Réaliser des prévisions pour un pays étranger

Si la zone que vous recherchez est en Europe, il vous suffit de de changer les latitudes et longitudes comme précédemment.

Si elle est hors d’Europe, il vous faudra en plus utiliser la version mondiale du modèle ARPEGE en modifiant le nom de la ressource dans les urls. Les ressources utilisées commenceront par : “/arpege/1.0/wcs/MF-NWP-GLOBAL-ARPEGE-025-GLOBE-WCS/”.


Réaliser des prévisions de précipitations, de vent, d’humidité…

La température n’est pas tout… Pour accéder aux autres prévisions disponibles, il suffit de modifier l’ID de la prévision recherchée.

Par exemple :

  • Pour les précipitations : “TOTAL_PRECIPITATION__GROUND_OR_WATER_SURFACE”

  • Pour la neige : “TOTAL_SNOW_PRECIPITATION__GROUND_OR_WATER_SURFACE”

  • Pour le vent : “WIND_SPEED__SPECIFIC_HEIGHT_LEVEL_ABOVE_GROUND”

  • Pour l’humidité relative : “RELATIVE_HUMIDITY__SPECIFIC_HEIGHT_LEVEL_ABOVE_GROUND”

  • Pour la pression : “PRESSURE__SPECIFIC_HEIGHT_LEVEL_ABOVE_GROUND”


Calculer des indicateurs pour un besoin spécifique

Les informations nécessaires sont propres à chaque secteurs — agriculture, tourisme ou énergie par exemple — et les grandeurs météorologiques standards ne suffisent pas toujours. Par exemple, vous pouvez avoir besoin d’indicateurs complexes, comme les indicateurs de confort thermique qui font intervenir la température mais aussi l’humidité, l’ensoleillement ou le vent, ou d’agrégation géographique, comme le cumul de précipitations sur un bassin versant…

Une fois que vous avez téléchargé les prévisions météorologiques utiles pour votre cas et que vous les avez ouvert avec Xarray, il est facile de les combiner. Dans d’autres tutoriels, nous avons notamment vu comment réaliser des calculs de température humide ou calculer le rayonnement solaire moyen dans une région.

A vous de jouer.




A propos : Callendar est une start-up spécialisée dans le développement de solutions innovantes pour l’évaluation des risques climatiques. Conscients du défi que représente l’adaptation au changement climatique, nous nous efforçons de partager notre expertise au travers d’outils accessibles ou de tutoriels comme celui-ci.


bottom of page