Réorganisation du code en modules
This commit is contained in:
parent
f83857f4cc
commit
5f281b1511
|
@ -0,0 +1,44 @@
|
|||
import peewee
|
||||
|
||||
|
||||
database = peewee.SqliteDatabase(None)
|
||||
|
||||
|
||||
class BddInsee:
|
||||
|
||||
def __init__(self, chemin_base_donnees):
|
||||
database.init(chemin_base_donnees)
|
||||
|
||||
class Person(peewee.Model):
|
||||
last_name = peewee.CharField()
|
||||
first_name = peewee.CharField()
|
||||
is_woman = peewee.BooleanField()
|
||||
annee_naissance = peewee.IntegerField()
|
||||
mois_naissance = peewee.IntegerField()
|
||||
jour_naissance = peewee.IntegerField()
|
||||
code_lieu_naissance = peewee.CharField()
|
||||
commune_naissance = peewee.CharField()
|
||||
pays_naissance = peewee.CharField()
|
||||
annee_deces = peewee.IntegerField()
|
||||
mois_deces = peewee.IntegerField()
|
||||
jour_deces = peewee.IntegerField()
|
||||
code_lieu_deces = peewee.CharField()
|
||||
numero_act_deces = peewee.CharField()
|
||||
|
||||
class Meta:
|
||||
database = database
|
||||
|
||||
def find_person(self, first_name, last_name, maiden_name, annee_naissance, mois_naissance, jour_naissance):
|
||||
if maiden_name:
|
||||
return self.Person.select().where((self.Person.annee_naissance == int(annee_naissance))
|
||||
& (self.Person.mois_naissance == int(mois_naissance))
|
||||
& (self.Person.jour_naissance == int(jour_naissance))
|
||||
& (self.Person.first_name.contains(first_name.upper()))
|
||||
& ((self.Person.last_name.contains(last_name.upper()))
|
||||
| self.Person.last_name.contains(maiden_name.upper())))
|
||||
else:
|
||||
return self.Person.select().where((self.Person.annee_naissance == int(annee_naissance))
|
||||
& (self.Person.mois_naissance == int(mois_naissance))
|
||||
& (self.Person.jour_naissance == int(jour_naissance))
|
||||
& (self.Person.first_name.contains(first_name.upper()))
|
||||
& (self.Person.last_name.contains(last_name.upper())))
|
|
@ -0,0 +1,22 @@
|
|||
import requests
|
||||
|
||||
|
||||
###
|
||||
# Registres de l'Église
|
||||
def get_member_list(unit_number, cookie):
|
||||
r = requests.get('https://lcr.churchofjesuschrist.org/services/umlu/report/member-list',
|
||||
params={'lang': "fra", 'unitNumber': unit_number},
|
||||
headers={'Accept': "application/json",
|
||||
'Cookie': cookie})
|
||||
r.raise_for_status()
|
||||
return r.json()
|
||||
|
||||
|
||||
def get_member_profile(member_id, cookie):
|
||||
r = requests.get(f'https://lcr.churchofjesuschrist.org/records/member-profile/service/{member_id}',
|
||||
params={'lang': "fra"},
|
||||
headers={'Accept': "application/json",
|
||||
'Cookie': cookie,
|
||||
'Referer': f"https://lcr.churchofjesuschrist.org/records/member-profile/{member_id}?lang=fra"})
|
||||
r.raise_for_status()
|
||||
return r.json()
|
|
@ -0,0 +1,111 @@
|
|||
"""
|
||||
Copyright (c) 2020 Sdj Geek
|
||||
|
||||
Voir le fichier LICENSE
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Ce programme permet de comparer le fichier des personnes décédées établi par l'INSEE avec les registre de membres de
|
||||
l'Église, afin de déterminer si figurent dans nos registre des personnes décédées.
|
||||
|
||||
L'INSEE reçoit des communes les décès enregistrés. Le fichier des personnes décédées établi par l'INSEE est en accès
|
||||
libre sur le site https://www.data.gouv.fr.
|
||||
|
||||
Comment utilise ce programme :
|
||||
1) Demander le ficher de l'INSEE à cette adresse : sdjgeek@protonmail.com
|
||||
2) Installer les dépendance du programme : "pip install requests peewee"
|
||||
3) Configurer les paramètres du programme (fichier settings.py)
|
||||
- chemin_base_donnees : Le chemin vers [le fichier téléchargé ici](https://git.roflcopter.fr/sdjgeek/purge-registres-deces-insee/-/wikis/home#t%C3%A9l%C3%A9charger-la-base-de-donn%C3%A9e)
|
||||
- numeros_unites : La liste des unités que le programme doit tester. La liste commence par le caractère '['. Les
|
||||
numéros d'unités sont séparés par des virgules. La liste se termine par le caractère ']'. Par exemple
|
||||
[47823, 67745, 31456]
|
||||
- cookie : Les cookies de la session au compte SDJ. Pour obtenir ces cookies il faut
|
||||
1- Ouvrir Firefox
|
||||
2- Ouvrir les outils de développement : CTRL + MAJ + E
|
||||
3- Aller sur le site des outils pour greffiers : https://lds.org/lcr
|
||||
4- Entrer identifiant et mot de passe SDJ
|
||||
5- Aller dans la liste des membres
|
||||
6- Dans l'outil de développement, cliquer sur la dernière ligne
|
||||
7- Dans le paneau de droite, dans la section "En-tête de la requête", rechercher le champ "cookie"
|
||||
8- Copier la valeur contenue dans ce champ
|
||||
- chemin_repertoire_sortie : Le chemin vers le répertoire qui contiendra la fichiers de sortie
|
||||
4) Exécuter le programme : "python3.6 trouver_decedes.py"
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Auteur : SDJ GeeK <sdjgeek@protonmail.com>
|
||||
Date : 1 juin 2020
|
||||
Version : 3.0
|
||||
|
||||
"""
|
||||
|
||||
import os
|
||||
import peewee
|
||||
import requests
|
||||
|
||||
from bdd_insee import BddInsee
|
||||
import site_eglise
|
||||
import settings as param
|
||||
|
||||
|
||||
###
|
||||
# Programme principal
|
||||
def trouver_decedes(chemin_base_donnees, numeros_unites, cookie, chemin_repertoire_sortie):
|
||||
base_insee = BddInsee(chemin_base_donnees)
|
||||
# Boucler sur la liste des unités
|
||||
for unite in numeros_unites:
|
||||
print(f"Unité {unite}")
|
||||
# Récupérer la liste des membres
|
||||
members = site_eglise.get_member_list(unite, cookie=cookie)
|
||||
|
||||
# Préparer le fichier de sortie
|
||||
output_file = os.path.join(chemin_repertoire_sortie, f"liste_membres_decedes_unite_{unite}.txt")
|
||||
with open(output_file, 'w') as out_file:
|
||||
out_file.write("Les lieux dans le fichier de l'INSEE sont donnés en Code Officiel Géographique en vigueur au moment de la prise en compte du décès\n")
|
||||
# Boucler sur la liste des membres
|
||||
for member in members:
|
||||
# Lire les noms et date de naissance
|
||||
name_registre = member['nameListPreferredLocal']
|
||||
full_birthdate = member['birth']['date']['date']
|
||||
maiden_name = None
|
||||
ville_registre = None
|
||||
# S'il s'agit d'une femme mariée, trouver son nom de jeune fille
|
||||
if member['isSpouse']:
|
||||
member_profile = site_eglise.get_member_profile(member['legacyCmisId'], cookie=cookie)
|
||||
maiden_name = member_profile['individual']['maidenNameGroup']['name1']['family']
|
||||
ville_registre = member_profile['individual']['birthPlace']
|
||||
try:
|
||||
last_name, first_name = name_registre.split(',')
|
||||
annee_registre, mois_registre, jour_registre = full_birthdate.split('-')
|
||||
except ValueError:
|
||||
print(f"Error with member [{name_registre}, {full_birthdate}]")
|
||||
continue
|
||||
first_name = first_name.strip().split(' ')[0]
|
||||
last_name = last_name.strip().split(' ')[0]
|
||||
query = base_insee.find_person(first_name, last_name, maiden_name, annee_registre, mois_registre, jour_registre)
|
||||
name_registre = name_registre.upper()
|
||||
if maiden_name:
|
||||
name_registre = f"{name_registre} née {maiden_name.upper()}"
|
||||
if member['sex'] == "F":
|
||||
feminin = "e"
|
||||
else:
|
||||
feminin = ""
|
||||
for person in query:
|
||||
if not ville_registre:
|
||||
member_profile = site_eglise.get_member_profile(member['legacyCmisId'], cookie=cookie)
|
||||
ville_registre = member_profile['individual']['birthPlace']
|
||||
if not ville_registre:
|
||||
ville_registre = "<VIDE>"
|
||||
text = f"""
|
||||
Le membre {name_registre},
|
||||
né{feminin} le {jour_registre:0>2}/{mois_registre:0>2}/{annee_registre:0>4} à {ville_registre.upper()}
|
||||
semble être décédé{feminin}.
|
||||
Dans le fichier de l'INSEE on peut trouver {person.last_name}, {person.first_name}
|
||||
né{feminin} le {person.jour_naissance:0>2}/{person.mois_naissance:0>2}/{person.annee_naissance:0>4} à {person.code_lieu_naissance}
|
||||
décédé{feminin} le {person.jour_deces:0>2}/{person.mois_deces:0>2}/{person.annee_deces:0>4} à {person.code_lieu_deces}
|
||||
"""
|
||||
print(text)
|
||||
out_file.write(text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
trouver_decedes(param.chemin_base_donnees, param.numeros_unites, param.cookie, param.chemin_repertoire_sortie)
|
|
@ -1,165 +0,0 @@
|
|||
"""
|
||||
Copyright (c) 2020 Sdj Geek
|
||||
|
||||
Voir le fichier LICENSE
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Ce programme permet de comparer le fichier des personnes décédées établi par l'INSEE avec les registre de membres de
|
||||
l'Église, afin de déterminer si figurent dans nos registre des personnes décédées.
|
||||
|
||||
L'INSEE reçoit des communes les décès enregistrés. Le fichier des personnes décédées établi par l'INSEE est en accès
|
||||
libre sur le site https://www.data.gouv.fr.
|
||||
|
||||
Comment utilise ce programme :
|
||||
1) Demander le ficher de l'INSEE à cette adresse : sdjgeek@protonmail.com
|
||||
2) Installer les dépendance du programme : "pip install requests peewee"
|
||||
3) Configurer les paramètres du programme (fichier settings.py)
|
||||
- chemin_base_donnees : Le chemin vers [le fichier téléchargé ici](https://git.roflcopter.fr/sdjgeek/purge-registres-deces-insee/-/wikis/home#t%C3%A9l%C3%A9charger-la-base-de-donn%C3%A9e)
|
||||
- numeros_unites : La liste des unités que le programme doit tester. La liste commence par le caractère '['. Les
|
||||
numéros d'unités sont séparés par des virgules. La liste se termine par le caractère ']'. Par exemple
|
||||
[47823, 67745, 31456]
|
||||
- cookie : Les cookies de la session au compte SDJ. Pour obtenir ces cookies il faut
|
||||
1- Ouvrir Firefox
|
||||
2- Ouvrir les outils de développement : CTRL + MAJ + E
|
||||
3- Aller sur le site des outils pour greffiers : https://lds.org/lcr
|
||||
4- Entrer identifiant et mot de passe SDJ
|
||||
5- Aller dans la liste des membres
|
||||
6- Dans l'outil de développement, cliquer sur la dernière ligne
|
||||
7- Dans le paneau de droite, dans la section "En-tête de la requête", rechercher le champ "cookie"
|
||||
8- Copier la valeur contenue dans ce champ
|
||||
- chemin_repertoire_sortie : Le chemin vers le répertoire qui contiendra la fichiers de sortie
|
||||
4) Exécuter le programme : "python3.6 trouver_decedes.py"
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Auteur : SDJ GeeK <sdjgeek@protonmail.com>
|
||||
Date : 1 juin 2020
|
||||
Version : 2.0
|
||||
|
||||
"""
|
||||
|
||||
import os
|
||||
import peewee
|
||||
import requests
|
||||
|
||||
import settings as param
|
||||
|
||||
###
|
||||
# Base de donnée INSEE
|
||||
database = peewee.SqliteDatabase(param.chemin_base_donnees)
|
||||
|
||||
|
||||
class Person(peewee.Model):
|
||||
last_name = peewee.CharField()
|
||||
first_name = peewee.CharField()
|
||||
is_woman = peewee.BooleanField()
|
||||
annee_naissance = peewee.IntegerField()
|
||||
mois_naissance = peewee.IntegerField()
|
||||
jour_naissance = peewee.IntegerField()
|
||||
code_lieu_naissance = peewee.CharField()
|
||||
commune_naissance = peewee.CharField()
|
||||
pays_naissance = peewee.CharField()
|
||||
annee_deces = peewee.IntegerField()
|
||||
mois_deces = peewee.IntegerField()
|
||||
jour_deces = peewee.IntegerField()
|
||||
code_lieu_deces = peewee.CharField()
|
||||
numero_act_deces = peewee.CharField()
|
||||
|
||||
class Meta:
|
||||
database = database
|
||||
|
||||
|
||||
def find_person(first_name, last_name, maiden_name, annee_naissance, mois_naissance, jour_naissance):
|
||||
if maiden_name:
|
||||
return Person.select().where((Person.annee_naissance == int(annee_naissance))
|
||||
& (Person.mois_naissance == int(mois_naissance))
|
||||
& (Person.jour_naissance == int(jour_naissance))
|
||||
& (Person.first_name.contains(first_name.upper()))
|
||||
& ((Person.last_name.contains(last_name.upper()))
|
||||
| Person.last_name.contains(maiden_name.upper())))
|
||||
else:
|
||||
return Person.select().where((Person.annee_naissance == int(annee_naissance))
|
||||
& (Person.mois_naissance == int(mois_naissance))
|
||||
& (Person.jour_naissance == int(jour_naissance))
|
||||
& (Person.first_name.contains(first_name.upper()))
|
||||
& (Person.last_name.contains(last_name.upper())))
|
||||
|
||||
|
||||
###
|
||||
# Registres de l'Église
|
||||
def get_member_list(unit_number, cookie):
|
||||
r = requests.get('https://lcr.churchofjesuschrist.org/services/umlu/report/member-list',
|
||||
params={'lang': "fra", 'unitNumber': unit_number},
|
||||
headers={'Accept': "application/json",
|
||||
'Cookie': cookie})
|
||||
r.raise_for_status()
|
||||
return r.json()
|
||||
|
||||
|
||||
def get_member_profile(member_id, cookie):
|
||||
r = requests.get(f'https://lcr.churchofjesuschrist.org/records/member-profile/service/{member_id}',
|
||||
params={'lang': "fra"},
|
||||
headers={'Accept': "application/json",
|
||||
'Cookie': cookie,
|
||||
'Referer': f"https://lcr.churchofjesuschrist.org/records/member-profile/{member_id}?lang=fra"})
|
||||
r.raise_for_status()
|
||||
return r.json()
|
||||
|
||||
|
||||
###
|
||||
# Programme principal
|
||||
|
||||
# Boucler sur la liste des unités
|
||||
for unite in param.numeros_unites:
|
||||
print(f"Unité {unite}")
|
||||
# Récupérer la liste des membres
|
||||
members = get_member_list(unite, cookie=param.cookie)
|
||||
|
||||
# Préparer le fichier de sortie
|
||||
output_file = os.path.join(param.chemin_repertoire_sortie, f"liste_membres_decedes_unite_{unite}.txt")
|
||||
with open(output_file, 'w') as out_file:
|
||||
out_file.write("Les lieux dans le fichier de l'INSEE sont donnés en Code Officiel Géographique en vigueur au moment de la prise en compte du décès\n")
|
||||
# Boucler sur la liste des membres
|
||||
for member in members:
|
||||
# Lire les noms et date de naissance
|
||||
name_registre = member['nameListPreferredLocal']
|
||||
full_birthdate = member['birth']['date']['date']
|
||||
maiden_name = None
|
||||
ville_registre = None
|
||||
# S'il s'agit d'une femme mariée, trouver son nom de jeune fille
|
||||
if member['isSpouse']:
|
||||
member_profile = get_member_profile(member['legacyCmisId'], cookie=param.cookie)
|
||||
maiden_name = member_profile['individual']['maidenNameGroup']['name1']['family']
|
||||
ville_registre = member_profile['individual']['birthPlace']
|
||||
try:
|
||||
last_name, first_name = name_registre.split(',')
|
||||
annee_registre, mois_registre, jour_registre = full_birthdate.split('-')
|
||||
except ValueError:
|
||||
print(f"Error with member [{name_registre}, {full_birthdate}]")
|
||||
continue
|
||||
first_name = first_name.strip().split(' ')[0]
|
||||
last_name = last_name.strip().split(' ')[0]
|
||||
query = find_person(first_name, last_name, maiden_name, annee_registre, mois_registre, jour_registre)
|
||||
name_registre = name_registre.upper()
|
||||
if maiden_name:
|
||||
name_registre = f"{name_registre} née {maiden_name.upper()}"
|
||||
if member['sex'] == "F":
|
||||
feminin = "e"
|
||||
else:
|
||||
feminin = ""
|
||||
for person in query:
|
||||
if not ville_registre:
|
||||
member_profile = get_member_profile(member['legacyCmisId'], cookie=param.cookie)
|
||||
ville_registre = member_profile['individual']['birthPlace']
|
||||
if not ville_registre:
|
||||
ville_registre = "<VIDE>"
|
||||
text = f"""
|
||||
Le membre {name_registre},
|
||||
né{feminin} le {jour_registre:0>2}/{mois_registre:0>2}/{annee_registre:0>4} à {ville_registre.upper()}
|
||||
semble être décédé{feminin}.
|
||||
Dans le fichier de l'INSEE on peut trouver {person.last_name}, {person.first_name}
|
||||
né{feminin} le {person.jour_naissance:0>2}/{person.mois_naissance:0>2}/{person.annee_naissance:0>4} à {person.code_lieu_naissance}
|
||||
décédé{feminin} le {person.jour_deces:0>2}/{person.mois_deces:0>2}/{person.annee_deces:0>4} à {person.code_lieu_deces}
|
||||
"""
|
||||
print(text)
|
||||
out_file.write(text)
|
Loading…
Reference in New Issue