Skip to content

Use the public, non-authenticated, WFS instead of the API #39

@FrnchFrgg

Description

@FrnchFrgg

J'ai de grosses difficultés à obtenir un accès à l'API ATMO-France. J'ai contacté leur support, et on m'a d'abord dit que c'était un problème de mail trop peu commun (j'ai mon propre nom de domaine), puis que c'était bon j'allais avoir mes accès. Je n'ai toujours pas de mail avec mes identifiants, et ne suis peut-être pas le seul à avoir ce problème.

Or, ATMO France propose, en plus d'un accès à leur API avec compte obligatoire, un accès à un serveur WFS totalement public.

Par exemple, pour obtenir la totalité des informations instantanées sur les pollens, on peut faire

import json
from owslib.wfs import WebFeatureService
wfs = WebFeatureService("https://data.atmo-france.org/geoserver/ind_pol/ows", version="2.0.0")

all_pollen = json.load(wfs.getfeature(
    typename='ind_pol:ind_pol',
    outputFormat="application/json"))

print([x for x in all_pollen["features"] if x["properties"]["code_zone"] == "69092"])

qui donne:

[{'type': 'Feature',
  'id': 'ind_pol.fid--1cf7767e_197a68a1662_-2b9b',
  'geometry': None,
  'geometry_name': 'the_geom',
  'properties': {'date_maj': '2025-06-24T14:09:03.965Z',
   'alerte': True,
   'code_ambr': 1,
   'code_arm': 1,
   'code_aul': 1,
   'code_boul': 1,
   'code_gram': 4,
   'code_oliv': 1,
   'code_zone': '69092',
   'conc_ambr': 0,
   'conc_arm': 0.1,
   'conc_aul': 0,
   'conc_boul': 0,
   'conc_gram': 136.9,
   'conc_oliv': 1.9,
   'date_dif': '2025-06-24T10:42:57Z',
   'date_ech': '2025-06-24',
   'lib_qual': 'Élevé',
   'lib_zone': 'Gleizé',
   'type_zone': 'commune',
   'pollen_resp': 'GRAMINEE',
   'source': 'Atmo Auvergne-Rhône-Alpes',
   'code_qual': 4}},
 {'type': 'Feature',
  'id': 'ind_pol.fid--1cf7767e_197a68a1662_-1bde',
  'geometry': None,
  'geometry_name': 'the_geom',
  'properties': {'date_maj': '2025-06-24T14:09:03.965Z',
   'alerte': True,
   'code_ambr': 1,
   'code_arm': 1,
   'code_aul': 1,
   'code_boul': 1,
   'code_gram': 4,
   'code_oliv': 1,
   'code_zone': '69092',
   'conc_ambr': 0,
   'conc_arm': 0.1,
   'conc_aul': 0,
   'conc_boul': 0,
   'conc_gram': 110.8,
   'conc_oliv': 1.1,
   'date_dif': '2025-06-24T10:43:15Z',
   'date_ech': '2025-06-25',
   'lib_qual': 'Élevé',
   'lib_zone': 'Gleizé',
   'type_zone': 'commune',
   'pollen_resp': 'GRAMINEE',
   'source': 'Atmo Auvergne-Rhône-Alpes',
   'code_qual': 4}},
 {'type': 'Feature',
  'id': 'ind_pol.fid--1cf7767e_197a68a1662_-c28',
  'geometry': None,
  'geometry_name': 'the_geom',
  'properties': {'date_maj': '2025-06-24T14:09:03.965Z',
   'alerte': True,
   'code_ambr': 1,
   'code_arm': 1,
   'code_aul': 1,
   'code_boul': 1,
   'code_gram': 4,
   'code_oliv': 1,
   'code_zone': '69092',
   'conc_ambr': 0,
   'conc_arm': 0.1,
   'conc_aul': 0,
   'conc_boul': 0,
   'conc_gram': 85,
   'conc_oliv': 0,
   'date_dif': '2025-06-24T10:43:33Z',
   'date_ech': '2025-06-26',
   'lib_qual': 'Élevé',
   'lib_zone': 'Gleizé',
   'type_zone': 'commune',
   'pollen_resp': 'GRAMINEE',
   'source': 'Atmo Auvergne-Rhône-Alpes',
   'code_qual': 4}}]

Et si l'on utilise typename='ind_pol:ind_national_pol' à la place de typename='ind_pol:ind_pol' on a en plus

{'type': 'MultiPolygon',
   'coordinates': [[[[522992.5237, 5777183.8034],
      [522528.4005, 5776355.6861],
      [521421.2752, 5776221.6148],
      [518584.3289, 5777003.2445],
      [518512.654, 5779254.5397],
      [520858.8474, 5780875.875],
      [525415.9042, 5782054.8715],
      [525352.3863, 5780302.2356],
      [522992.5237, 5777183.8034]]]]}

dans geometry à la place de None (mais ça a l'air plus lent à télécharger, et ça n'a pas l'air aussi "officiel").

Toutes les informations sont là: https://map.atmo-france.org/flux

Par exemple pour avoir l'indice ATMO il faut utiliser

wfs = WebFeatureService("https://data.atmo-france.org/geoserver/ind/ows", version="2.0.0")

all_atmo = json.load(wfs.getfeature(
    typename='ind:ind_atmo',
    outputFormat="application/json"))

L'adresse est obtenue en survolant l'icône "WFS" et en ne gardant que la partie avant le ? et le typename est dans le tableau, colonne "nom technique".

Ce changement pourrait permettre une intégration qui ne requiert pas de login....

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions