From cfdab63598dd72889f3f26e48ac9b3ec3d0085a4 Mon Sep 17 00:00:00 2001 From: Sdj GeeK Date: Mon, 3 Aug 2020 22:40:21 +0200 Subject: [PATCH 1/2] Convertir les code insee en nom de ville --- purge-registres-deces-insee/membre_base.py | 25 +++++++++++++++++ .../site_opendatasoft.py | 27 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 purge-registres-deces-insee/site_opendatasoft.py diff --git a/purge-registres-deces-insee/membre_base.py b/purge-registres-deces-insee/membre_base.py index 14e179e..d742c79 100644 --- a/purge-registres-deces-insee/membre_base.py +++ b/purge-registres-deces-insee/membre_base.py @@ -5,6 +5,7 @@ Voir le fichier LICENSE """ from abc import ABC, abstractmethod +from site_opendatasoft import get_ville_from_cog class MembreBase(ABC): @@ -55,6 +56,29 @@ class MembreBase(ABC): self.i_jour_deces = insee.jour_deces self.i_ville_deces = insee.code_lieu_deces + def convertir_villes_insee(self): + old_value = self.i_ville_naissance + new_value = None + try: + int(self.i_ville_naissance) + except ValueError: + pass + else: + new_value = get_ville_from_cog(self.i_ville_naissance) + if new_value is not None: + self.i_ville_naissance = new_value + if old_value == self.i_ville_deces: + self.i_ville_deces = new_value + else: + try: + int(self.i_ville_deces) + except ValueError: + pass + else: + new_value = get_ville_from_cog(self.i_ville_deces) + if new_value is not None: + self.i_ville_deces = new_value + def get_texte_decede(self): if self.r_sexe == "F": feminin = "e" @@ -62,6 +86,7 @@ class MembreBase(ABC): feminin = "" else: feminin = "(e)" + self.convertir_villes_insee() return f""" Le membre {self.get_nom_registres()} ({self.r_id}), né{feminin} le {self.r_jour:0>2}/{self.r_mois:0>2}/{self.r_annee:0>4} à {self.r_ville.upper()} diff --git a/purge-registres-deces-insee/site_opendatasoft.py b/purge-registres-deces-insee/site_opendatasoft.py new file mode 100644 index 0000000..e9ad88d --- /dev/null +++ b/purge-registres-deces-insee/site_opendatasoft.py @@ -0,0 +1,27 @@ +""" +Copyright (c) 2020 Sdj Geek +Voir le fichier LICENSE + +Classe d'accès aux données du site https://public.opendatasoft.com + +""" + +import requests + + +def get_ville_from_cog(cog): + r = requests.get("https://public.opendatasoft.com/api/records/1.0/search/", + params={'dataset': "correspondance-code-insee-code-postal", + 'q': f"insee_com={cog}", + 'lang': "fr"}, + headers={'Accept': "application/json"}) + try: + r.raise_for_status() + except requests.HTTPError: + print(f"Warning get_ville_from_cog: requests return status {r.headers}") + return None + result = r.json() + if result['nhits'] > 0: + return f"{result['records'][0]['fields']['nom_comm']} ({result['records'][0]['fields']['postal_code']})" + print(f"Warning get_ville_from_cog: no result returned for cog {cog}") + return None From bb709eb2c1929e6fc5270f3cd7de547196d3213b Mon Sep 17 00:00:00 2001 From: Sdj GeeK Date: Tue, 4 Aug 2020 08:46:04 +0200 Subject: [PATCH 2/2] release 7.0 --- CHANGELOG.md | 3 +++ purge-registres-deces-insee/site_opendatasoft.py | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09c4fa1..ed70c53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +### [v7.0] 2020-08-04 +- Convertit les Codes Officiels Géographiques en nom de commune. + ### [v6.1] 2020-07-30 - BUG: Lorsque maiden_name est None, ne pas essayer de le strip diff --git a/purge-registres-deces-insee/site_opendatasoft.py b/purge-registres-deces-insee/site_opendatasoft.py index e9ad88d..cb22c2f 100644 --- a/purge-registres-deces-insee/site_opendatasoft.py +++ b/purge-registres-deces-insee/site_opendatasoft.py @@ -10,18 +10,29 @@ import requests def get_ville_from_cog(cog): + """ + Donne le nom de la commune (et son code postal) correspondant au code officiel géographique (cog) donné en entrée. + + :param cog: le code officiel géographique à convertie + :return: le nom de la commune (et son code postal). None si la recherche a échoué. + """ + # Contacter l'API r = requests.get("https://public.opendatasoft.com/api/records/1.0/search/", params={'dataset': "correspondance-code-insee-code-postal", 'q': f"insee_com={cog}", 'lang': "fr"}, headers={'Accept': "application/json"}) + # Tester la validité de la réponse try: r.raise_for_status() except requests.HTTPError: print(f"Warning get_ville_from_cog: requests return status {r.headers}") return None + # Récupérer le résultat result = r.json() + # Si résultat non vide if result['nhits'] > 0: + # COMMUNE (CODE POSTAL) return f"{result['records'][0]['fields']['nom_comm']} ({result['records'][0]['fields']['postal_code']})" print(f"Warning get_ville_from_cog: no result returned for cog {cog}") return None